Struts 2 流程
来源:互联网 发布:算法基础vb 编辑:程序博客网 时间:2024/06/01 09:31
基本流程
1、客户端初始化一个指向Servlet容器(例如Tomcat)的请求;
HttpServletRequest请求,如在浏览器中输入”http://localhost:8080/TestMvc/add.action”
2、这个请求经过一系列的过滤器(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMeshPlugin);
Filter主要是三层:
ActionContextCleanUp,FilterDispatcher(Struts 2.0-2.1中的),StrutsPrepareAndExecuteFilter(Struts 2.2之后的)
3、接着StrutsPrepareAndExecuteFilter被调用,StrutsPrepareAndExecuteFilter询问ActionMapper来决定这个请求是否需要调用某个Action;
4、如果ActionMapper决定需要调用某个Action,StrutsPrepareAndExecuteFilter把请求的处理交给ActionProxy;
5、ActionProxy通过ConfigurationManager询问框架的配置文件(struts.xml),找到需要调用的Action类;
6、ActionProxy创建一个ActionInvocation的实例。
7、ActionInvocation实例使用命名模式(代理模式)来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。
ActionInvocation工作原理:
ActionInvocation初始化时,根据配置,加载Action相关的所有Interceptor。
通过ActionInvocation.invoke方法调用Action实现时,执行Interceptor。
一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果
就是因为要用拦截器所以才要用代理方法执行。在调用Action的前后执行代理方法。
8、一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2框架中继承的标签。在这个过程中需要涉及到ActionMapper。
其他
在struts2.0中,可以通过ServletActionContext.getRequest()获取request对象。
在action的方法中return一个字符串,该字符串对应struts.xml中的result标签的name相同,result标签中包含的就是跳转页面。
可以说Struts2本质还是一个Servlet(在S1中用于整体控制的是一个Servlet;S2中是一个Filter,其实也可把它看作是Servlet),只是对Servlet进一步的封装罢了
打个比方:做Web项目,好比建房子。Servlet好比木材,用一根根的木材搭,也可盖起房子,只是速度慢而已;
而Struts2好比是用木材做好的一个房子大概结构,要建房子时,只需把它拿过来,再往其里面添砖加瓦,修修补补,就能很快盖好房子,这要比直接使用Servlet要快得多
- Struts 2 调用流程
- Struts 2 调用流程
- Struts 2 调用流程
- struts的流程2
- Struts 2工作流程
- Struts 2 流程
- struts 2 流程
- Struts 2的基本流程
- Struts 2请求处理流程
- Struts 2详细工作流程
- Struts 2详细工作流程
- Struts 2 的执行流程
- Struts 2请求处理流程
- Struts 2详细工作流程
- Struts 2的基本流程
- Struts 2详细工作流程
- Struts 2的基本流程
- Struts 2详细工作流程
- 第1章基础知识 (1)
- VB定义接口
- 通过jersey-client客户端调用Jersey的Web服务模拟CURD
- Good mood!!!
- C++实验4-1
- Struts 2 流程
- linux下FFmpeg编译生成ffplay
- 查看服务器类型
- 在线书籍收集
- Java WebService 简单实例
- iOS小常识 解决设置setBarTintColor颜色变色
- POJ-2689-Prime Distance(筛法)
- svn cleanup failed–previous operation has not finished; run cleanup if it was interrupted
- SIMPLE_DEV_PM_OPS宏