Struts2详细执行流程自己总结
Struts2详细执行流程总结
这篇文章是在参考大量资料之下总结出来的,一是减少学习Struts2同学的疑惑,二是顺便自己总结一下提升自己的知识水平,三是抗遗忘。欢迎纠正,谢谢各位朋友,若不慎涉及他人的版权,请qq联系1354611365,我将删除。
一、struts2总体框架。
先给出总体框架,从战略上分析。保持学习过程中不会出现走邪路的状况。
图1:Struts2的总体框架预览
二、解释框架图中的各个层次的意思。
1、我们一般会把我们做的项目部署到Tomcat服务器上,由服务器解析我们所做的Struts2项目。
2、项目部署完毕后通过jsp运行项目
其实jsp表单里面含有提交到action的内容的。
图2:jsp里的表单
服务器开始启动,会加载先web.xml文件,web.xml其实是一个监管器
图3:web.xml文件里的内容
StrutsPrepareAndExecuteFilter。表面意思就是struts准备并执行过滤器
其真正含义有两条与这句话差不多。
一是为struts2执行做一些相关的准备。如加载相关的配置信息。
二是为struts2的request请求处理相关的信息。如设置编码格式和找到对应的action映射类
StrutsPrepareAndExecuteFilter
包含两个主要方法:
void doFilter(javax.servlet.ServletRequest req, javax.servlet.ServletResponse res, javax.servlet.FilterChain chain)
void init(javax.servlet.FilterConfig filterConfig)
doFilter()主要是通过ActionContex包装httpServletRequest,和HttpServletRespone用ActionContext包装请求和响应信息然后提交各Action类。至于怎么搞的自己看源码。
Init()方法主要是读取响应的struts2的配置文件。顺序读取文件为;
1、default.properties(框架提供):配置了struts运行的参数
2、struts-default.xml(框架提供):struts框架加载创建、Result、拦截器等,框架运行要用
3、struts-plugin.xml(插件提供):插件文件,比如:第三方插件,转json插件、struts2和spring整合插件。。
4、struts.xml(程序员定义):它能配置的内容和struts-default.xml一样,重点要配置Action、自定义运行参数、自定义的拦截器
5、struts.properties(程序员定义):可以配置struts运行的参数
注意:图片中用的是FilterDispatcher类在struts2.1.3中已经过时了,改为了StrutsPrepareAndExecuteFilter类了
此时已经进入这个struts2框架的这个部位了。
图4 Struts2行进图
三、通过ActionMapper寻找对应的Action。
上次说到web.xml检测到jsp表单里的提交到action的内容就会被检测拦截
然后然后通过StrutsPrepareAndExecuteFilte类进行过滤包装,将请求信息转发给ActionMapper,由ActionMapper检测这个信息是否要Struts2进行处理。
如果需要,ActionMapper反馈给StrutsPrepareAndExecuteFilter,然后StrutsPrepareAndExecuteFilter创建ActionProxy对象。
但ActionPropxy并不知道具体的action内容。于是又调用ConfigurationManager
,ConfigurationManager之前将struts.xml,等一些struts2配置文件加载进入了内存。因此它能对struts.xml进行处理。
通过struts.xml的内容去查找相应的Action类。
那么如何查找呢?
<form action="user_Register.action" method="post"
表单action内容为“user_Register.action”
图5:查找actionl类
图6:ActionProxy中间层的作用(注意箭头)
四、ActionProxy获知要使用的action后创建ActionInvocation类这个类包含四个属性.
简单的来说通过ActionInvocation获取了前端的各种属性,比如name, age,等提交的表格信息内容。还获取了struts2的各种配置信息,还有ConfigurationManager查找到的具体执行的action,等。然后经过业务层处理将内容返回出来。也就是通过struts.xml中的result信息返回响应的页面。
图7:result返回响应的页面
图8:httpServletReponse响应页面。
经过result找到响应页面通过HttpServletResponse响应用户的请求。
1、HttpServeletRequest
请求信息。
2、ActionContextCleanUP
3、Other filters
2,3不重要,貌似现在已经没用了。
4、Filter Dispatcher
过滤器,这个应该是最底层的过滤器。
5、ActionMapper
Struts2中主要检测请求信息是否需要Struts2处理。
6、ActionProxy
一个中间层,就是可以调用其他类什么的。
7、ConfigurationManager
ConfigurationManager则负责将struts.xml文件中配置文件映射到内存中去的
8、Struts.xml
Struts配置文件需要程序员填写。
9、ActionInvocation
包含四个属性分别获取前端传递的值,action,struts.xml信息,其他一些数据。
10、Interceptor
拦截器不是太理解应该是获取前端传递的属性值,然后封装到action的属性域中。
11、Tag Subsystem
Struts2自带标签库没用
12、Templete
Struts2的前端模版,没用吧,不清楚。
13、HttpServletResponse
响应用户的类。
最后奉上一个struts2的执行图解