Struts2的工作原理

Struts2的工作原理_第1张图片

 

上图来源于Struts2官方站点,是Struts 2 的整体结构。 

 一个请求在Struts2框架中的处理大概分为以下几个步骤 

1 客户端初始化一个指向Servlet容器(例如Tomcat)的请求 
2 这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin) 
3 接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action 
4 如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy 
5 ActionProxy通过ConfigurationManager询问框架的配置文件,找到需要调用的Action类 
6 ActionProxy创建一个ActionInvocation的实例。 
7 ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。 
8 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可 能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper 

在上述过程中所有的对象(Action,Results,Interceptors,等)都是通过ObjectFactory来创建的。

 

 扩展:-----------------------------------------------------------------------

那么现在我们先来说说你要使用struts开发的一个简单流程, 首先一个项目的开发必须也是首要的工作, 项目环境的搭建, 先把我们的一些用到包导入工程, 然后配置好一些需要用到的xml配置文件, 接着就是测试一下你的环境是否搭建成功. 其次的准备工作就是数据库的建立之类的一些东西.

  接着, 一切准备就绪, 可以开始我们的项目编写, 那么我们还是以简单的例子为例, 就以登录为案例吧. 既然要登录, 那么肯定会需要接受用户传入给服务器username以及pwd参数, 然后我们就要与数据库的数据进行匹配. 那么我们先来接受这些参数,在struts2里面有3种接收参数的方法, 那么其中2种是比较常用的, 分别是属性接收和Bean接收. 因为这里比较简单的案例, 我们就选简单的属性接收就可以了.

  package  com.action

  public class LoginAction {

  private String username;

  private String pwd;

  //...

  //提供setter和getter方法

  }

  在我们Action类里面定义2个属性去接收这2个参数, 这就是属性接收, 是不是很简单呢, 当然得注意的是, 必须提供setter以及getter方法这样我们struts才能为我们的属性赋值, 接着需要执行我们的业务, 这里我们需要在Action类里面写一个业务方法.

  public String execute() throws Exception {

  // ... 访问数据库进行数据对比

  return "success"; //逻辑字符串

  }那么简单的业务方法就如上述所写啦, 当然格式必须得注意, 首先返回值必须得是String, 当然public公开的也是必须的, 那么返回回来的字符串也是一个关键, 必须与我们的配置文件对应. 好了, 说到配置文件, 我们怎么让struts去运行我们写的这个Action同时给我们的Action属性赋值呢, 那么这个就需要我们手动的去配置.怎么写呢, 请看:

  <!-- 首先需要定义一个包,用来存放这个action -->

  <package name="demo"extends="struts-default" namespace="/" >

  <!-- 接着就是正式配置所写的Action-->

  <action name="login"class="com.action.LoginAction" method="execute">

  <!-- 看吧,name是你给这个Action取的名字,class对于的是你让struts去访问的哪个类, 最后的method就是对应你要struts调用这个类的哪个方法 -->

  <!-- 上述还没有使用到我们返回值对吧, 接下来配置我们的返回值 -->

  <resultname="success">/index.jsp</result>

  <!-- 如上所示当你的返回值与result的name属性对应的时候, struts就

  会帮你转发到/index.jsp 页面上-->

  </action>

  </package>

Struts2的工作原理_第2张图片

 

上图来源于Struts2官方站点,是Struts 2 的整体结构。 

你可能感兴趣的:(框架,struts2)