- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
02-Struts2的工作流程及配置文件
Struts2的工作流程及配置文件
Struts2.0的流程图
从图中看到Struts2的工作流程如下:
1.服务器接收到的请求首先经过一组过滤器链(实际中的其他过滤器可能还包括诸如Spring的字符过滤器CharactorEncodingFilter、Velocity的过滤器等,一般FilterDispatcher位于过滤器的最后一个执行),过滤器链按照你在web.xml中的配置顺序在接收客户请求时顺序执行,在向客户发送响应时反序执行,Struts2的核心FilterDispatcher在web.xml中的配置如下:
filter
filter-namesetCharactor/filter-name
!-- 配置字符过滤 --
filter-classorg.springframework.web.filter.CharacterEncodingFilter/filter-class
init-param
param-nameencoding/param-name
param-valueUTF-8/param-value
/init-param
/filter
filter
filter-namestruts2/filter-name
!-- 配置Struts2过滤器 --
filter-classorg.apache.struts2.dispatcher.FilterDispatcher/filter-class
/filter
filter-mapping
filter-namesetCharactor/filter-name
url-pattern/*/url-pattern
/filter-mapping
filter-mapping
filter-namestruts2/filter-name
url-pattern/*/url-pattern
/filter-mapping
注意:如果你使用的是WebLogic6.1作为应用服务器,需要使用FilterDispatcherCompatWeblogic61替代FilterDispatcher。
2.请求被送到FilterDispatcher之后,FilterDispatcher会通过其私有静态的属性ActionMapper询问这个请求是否需要调用Action处理,如果需要调用Action,FilterDispatcher会把请求委托给ActionProxy,ActionProxy调用ActionInvocation查找配置文件中该Action的所有信息,并以这个Action为目标创建代理对象(因为Struts2中的Action由于XWork的设计理念,并没有与Servlet的API被调用,所以如果直接调用Action的实例,那么显然基于HTTP的请求都将无法传入Action。Struts2通过创建Action的代理对象,并使用拦截器将HTTP的请求信息传入代理对象,这是典型的AOP处理方式,这也实现了控制器与Servlet的API的分离,这是Struts1.x所欠缺的优秀的设计方式),然后执行该Action之前的所配置的所有拦截器,与过滤器相同,在接受请求时,会顺序执行你在配置文件中为该Action配置的拦截器顺序;
3.在穿越拦截器之后,就会执行Action,当Action执行完毕,ActionInvocation就要使用result加载结果(可以是JSP、PDF、XML、Velocity、EXCEL、Action等,Struts2为我们提供了丰富的视图模板可以调用),加载完结果之后会再次反向穿越拦截器和过滤器链,将响应结果发送给客户;
从上面不难看出,拦截器(Interceptor)是Struts2中非常重要的组成部分,在Struts2中绝大多数功能都是通过配置拦截器实现的,例如防止表单的重复提交、文件上传等等。
在上图中的action与Struts1有很大的不同,Struts1在接收到第一个请求时,会创建Action实例,将其放到HashMap中,以后的请求会直接返回这个实例,也就是说一个Action的实例是多线程共享的,这样虽然节省了资源,但在Action中应谨慎使用全局变量,因为全局变量是多线程共享的,所以Struts1+Hibernate3+Spring2整合的时候,其中一种方式是把Struts1的Action交给Spring容器管理,我们在Spring的XML文件中用bean元素配置Action的时候,Spring建议我们设置singleton=”false”(Spring2.0之后改为scope=”prototype”),也就是一个请求产生一个Action实例!
在
文档评论(0)