struts原来的核心过滤器是FilterDispatcher,现在是StrutsPrepareAndExecuteFilter;后者支持在action前添加过滤器
工作原理:客户的请求HttpServletRequest经过一系列的过滤器,由ActionMapper匹配到以.action为结尾的请求后,过滤器将action转交到ActionProxy,它会通过ConfigurationManager读取struts.xml的配置文件,根据配置文件找到相应的action类,通过ActionProxy创建一个action的反向实例,经过一系列拦截器执行到action,返回字符串对象result,再经过一系列的拦截器通过HttpServletResponse返回给客户。
从客户端发送请求过来,先经过前端控制器(核心过滤器 StrutsPrepareAndExecuteFilter)过滤器中执行一组拦截器(一组拦截器 就会完成部分功能代码),到底哪些拦截器执行了呢,在Struts2中定义很多拦截器,在其默认栈中的拦截器会得到执行,这个我们可以通过断点调试的方式测试,拦截器执行完成后,就会执行目标Action,在Action中返回一个结果视图,根据Restult的配置进行页面的跳转。
Struts2的工作原理及文件结构
Struts2工作原理
struts2工作原理
Struts2的工作原理图
struts2工作原理
Struts2工作原理
Struts2工作原理
StrutsPrepareAndExecuteFilter可以在Action执行之前添加我们自己的Filter
Struts 工作原理
@Struts2---工作原理图
Struts2的工作原理流程图
struts2的工作原理及文件结构
struts2的工作原理
一个请求在Struts2框架中的处理分为以下几个步骤:
1.客户端发出一个指向servlet容器的请求(tomcat);
2.这个请求会经过图中的几个过滤器,最后会到达 StrutsPreparedAndExceuteFilter过滤器。
3.过滤器 StrutsPreparedAndExceuteFilter是struts2框架的心脏,在处理用户请求时,它和请求一起相互配合访问struts2的底层框架结构。在web容器启动时,struts2框架会自动加载配置文件里相关参数,并转换成相应的类。 如:ConfigurationManager、ActionMapper和ObjectFactory。ConfigurationManager 存有配置文件的一些基本信息,ActionMapper存有action的配置信息。在请求过程中所有的对象(Action,Results,Interceptors等)都是通过ObjectFactory来创建的。过滤器会通过询问ActionMapper类来查找请求中需要用到的Action。
4.如果找到需要调用的Action,过滤器会把请求的处理交给ActionProxy。ActionProxy为Action的代理对象。ActionProxy通过ConfigurationManager询问框架的配置文件,找到需要调用的Action类。
5.ActionProxy创建一个ActionInvocation的实例。ActionInvocation在ActionProxy层之下,它表示了 Action的执行状态,或者说它控制的Action的执行步骤。它持有Action实例和所有的Interceptor。
6.ActionInvocation实例使用命名模式来调用,1. ActionInvocation初始化时,根据配置,加载Action相关的所有Interceptor。2. 通过ActionInvocation.invoke方法调用Action实现时,执行Interceptor。在调用Action的过程前后,涉及到相关拦截器(intercepetor)的调用。
7. 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果 通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。
客户端发出一个请求,服务器端 StrutsPreparedAndExceuteFilter接收请求,如果该请求是一个以 .action 结尾请求,则Struts2将请求转发至相应的Action,进行数据类型转换,如果数据类型转换出错,则返回到 input 指定的结果页面,如果数据类型转换没有出错,则调用setXX 方法进行设值,如果使用了validate()验证方法(或者是使用了验证框架),则进行相应的验证,如果验证出错,回到 input 指定的结果页面,如果没有使用验证,或者验证没有出错,则执行 execute() 方法,返回到相应的页面
struts2的工作原理(个人理解--仅作参考)
web项目使用到框架都要在web.xml配置框架的核心入口(web项目启动时首先加载的是这个文件)
Struts2相当于一个控制器(通过过滤器实现,过滤器的执行和在代码中调用的顺序正相关,struts2在不断完善时考虑到各类需求和问题,针对其核心过滤器在不断完善 )用户发送请求(发送的请求要满足tcp/ip协议,请求通过自身携带的url需要服务器资源),Struts2利用url的个性来决定是否处理用户请求,满足struts2处理的请求url很多,但struts2实际处理的请求需要满足用户请求服务器资源的url对应有action来寻找指定的资源 。
请求url有对应的acion处理时的流程:struts2内部actionProxy(代理)使用配置文件管理来查看struts.xml文件,找到指定的action类的全路径,acitonProxy实例化一个aciton,此实例处理请求寻找服务器资源。
当action处理完请求时,返回一个变量(此变量对应视图),用户能够轻易看懂的需要的资源展示。此视图通过HttpServletRespons到达用户浏览器,浏览器解析后展示给用户。
struts2工作原理