struts2 之 处理流程

1)       当servlet容器接收到一个请求后,将请求交给你在web.xml里配置的过滤器FilterDispatcher,调用它的doFilter()方法。
2)       FilterDispatcher询问ActionMapper,以便确定这个请求有对应的action调用。
3)       ActionMapper返回一个描述action调用的ActionMapping对象。
4)       FilterDispatcher调用Dispatcher类的serviceAction()方法。
5)       Dispatcher调用ActionProxy的execute ()方法。
6)       ActionProxy设置ActionInvocation对象的执行上下文,然后调用其invoke()方法。
7)       ActionInvocation的invoke()方法从拦截器映射中查找尚未执行的拦截器,调用它的intercept (invocation)方法,并将自身对象的引用作为参数传递给拦截器。
8)       拦截器完成某些预处理工作后,反过来调用ActionInvocation的invoke()方法。ActionInvocation维护着自己的状态,所以它知道哪些拦截器已经被执行,如果还有没执行的拦截器就继续执行它的intercept (invocation)方法
9)       如果所有的拦截器都已经执行过了,就调用Action实例的excute()方法(如果在struts.xml文件中没有被设置成其他方法的话)。
10)    ActionInvocation根据Action执行返回的结果码,查出对应的result,调用result的execute(invocation)方法,将结果页面呈现给用户。
11)    ActionInvocation的invoke()方法将控制权返回给拦截器映射中的最后一个拦截器,该拦截器完成所有必需的后期处理工作,然后从intercept (invocation)方法返回,允许前一个拦截器执行它自己的后处理工作,如此反复直到所有的拦截器都成功的返回。

12)    ActionInvocation的invoke()方法执行完毕后,向ActionProxy返回一个String类型的结果码,最后ActionProxy清理状态并返回。




  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一个请求在Struts 2框架中的处理大概分为以下几个步骤。  客户端提交一个(HttpServletRequest)请求,如上文在浏览器中输入 http://localhost: 8080/bookcode/ch2/Reg.action就是提交一个(HttpServletRequest)请求。  请求被提交到一系列(主要是3层)的过滤器(Filter),如(ActionContextCleanUp、其他过滤器(SiteMesh等)、 FilterDispatcher)。注意:这里是有顺序的,先ActionContext CleanUp,再其他过滤器(Othter Filters、SiteMesh等),最后到FilterDispatcher。  FilterDispatcher是控制器的核心,就是MVC的Struts 2实现中控制层(Controller)的核心。  FilterDispatcher询问ActionMapper是否需要调用某个Action处理这个(HttpServlet Request)请求,如果ActionMapper决定需要调用某个Action,FilterDispatcher则把请求的处理交给ActionProxy。  ActionProxy通过Configuration Manager(struts.xml)询问框架的配置文件,找到需要调用的Action类。例如,用户注册示例将找到UserReg类。  ActionProxy创建一个ActionInvocation实例,同时ActionInvocation通过代理模式调用Action。但在调用之前,ActionInvocation会根据配置加载Action相关的所有Interceptor(拦截器)。  一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果result。 Struts 2的核心控制器是FilterDispatcher,有3个重要的方法:destroy()、doFilter()和Init(),可以在Struts 2的下载文件夹中找到源代码,如代码1所示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值