Struts2整体结构:
Struts2的入口在web.xml中,通过Filter进入。
通过filter的 url-patten设置拦截的请求类型:
“/*”表示拦截所有请求,可以拦截自定义请求类型,如:/*.action,/*.do等等
工作原理:
一个请求在Struts2中的大概处理分为以下几个步骤:
1.客户端发起请求
2.请求被Struts2的filter拦截,然后提交到一系列的过滤器,最后到FilterDispatcher
3.FilterDispatcher为Struts2控制器的核心控制器,主要通过其doFilter()方法处理,FilterDispatcher询问ActionMapper是否需要调用某个Action来处理这个(request)请求,如果ActionMapper决定需要调用某个Action,然后把请求交给ActionProxy来处理。
4.ActionProxy通过Configuration Manager也就是struts.xml来找到需要调用的action类
5.ActionProxy创建一个ActionInvocation的实例,同时ActionInvocation通过代理模式调用Action,但在调用之前ActionInvocation会根据配置加载Action相关的所有Interceptor(struts2核心级东西)。
6.拦截器(Interceptor)是aop的一种实现,在struts2中拦截器的调用类似栈,先进后出,一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果(result)。
ActionInvocation 是Xworks 中Action 调度的核心。而对Interceptor 的调度,也正是由ActionInvocation负责。ActionInvocation 是一个接口, 而DefaultActionInvocation 则是Webwork 对ActionInvocation的默认实现。
Interceptor 的调度流程大致如下:
1. ActionInvocation初始化时,根据配置,加载Action相关的所有Interceptor。
2. 通过ActionInvocation.invoke方法调用Action实现时,执行Interceptor。
Interceptor将很多功能从我们的Action中独立出来,大量减少了我们Action的代码,独立出来的行为具有很好的重用性。XWork、WebWork的许多功能都是有Interceptor实现,可以在配置文件中组装Action用到的Interceptor,它会按照你指定的顺序,在Action执行前后运行。
工作流程
1、客户端浏览器发出HTTP请求.
2、根据web.xml配置,该请求被FilterDispatcher接收
3、根据struts.xml配置,找到需要调用的Action类和方法, 并通过IoC方式,将值注入给Aciton
4、Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证。
5、Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页面
6、返回HTTP响应到客户端浏览器
那啥...看源码的就等下次吧....
网友评论