Struts2原理

一个请求在Struts2框架中的基本工作过程如下:
客户端初始化一个指向Servlet容器(例如Tomcat)的请求
这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做
ActionContextCleanUp的可选过滤器
这个过滤器对于Struts2和其他框架的集成很有帮助,
例如:SiteMesh Plugin);
接着StrutsPrepareAndExecuteFilter被调用
StrutsPrepareAndExecuteFilter询问ActionMapper
来决定这个请求是否需要调用某个Action
如果ActionMapper决定需要调用某个Action
StrutsPrepareAndExecuteFilter把请求的处理交给
ActionProxy;
ActionProxy通过ConfigurationManager询问框架的配置文件,
找到需要调用的Action类
ActionProxy创建一个ActionInvocation的实例。
ActionInvocation实例使用命名模式来调用
在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。
一旦Action执行完毕,ActionInvocation负责根据struts.xml
中的配置找到对应的返回结果。
返回结果通常是(但不总是,也可能是另外的一个Action链)一个
需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以
使用Struts2框架中继承的标签。在这个过程中需要涉及到ActionMapper。

 

Struts2核心组件介绍
ActionMapper:通过method参数将请求转发到具体的action
ActionProxy代理:是Action的一个代理类,也就是说Action
的调用是通过ActionProxy实现的,其实就是调用了
ActionProxy.execute()方法,而该方法又调用了
ActionInvocation.invoke()方法。归根到底,最后调用的是
DefaultActionInvocation.invokeAction()方法。
ActionInvocation:就是Action的调用者。
ActionInvocation在Action的执行过程中,
负责Interceptor、Action和Result等一系列元素的调度。
Interceptor拦截器:是Struts 2的一个强有力的工具,
有许多功能(feature)都是构建于它之上,如国际化、校验等。
Struts2是一套非常优秀的Web应用框架,实现优雅、功能强大、使用简洁。
可以说是Struts2是一款非常成熟的MVC架构。
在我们学习Struts2时,最好是先学习它的运行流程、核心概念,
从中得到启发,提升自己,而不仅仅是学习怎么怎么使用它。
在网上看到这样一句话:
你千万不要成为一个只会熟练使用框架的程序员,那样,你会疲于奔命,
你也许永远只会使用 Hadoop ,而写不出一个 Hadoop ,你只是一个 
Hadoop程序员,而不是一个分布式工程师。
你也许永远只会使用 Struts,而忘记了自己写 filter,你只是一个 
SSH 程序员,而不是一个 Web 工程师。
话不多说,一起走进Struts2
一、系统架构
Struts2的官方文档附带了Struts2的架构图。从这张图可以很好的去理解Struts2

Servlet Filters:过滤器链,客户端的所有请求都要经过Filter链的处理。
Struts Core:Struts2的核心部分,但是Struts2已经帮我们做好了,
我们不需要去做这个
Interceptors,Struts2的拦截器。Struts2提供了很多默认的拦截器,
可以完成日常开发的绝大部分工作;而我们自定义的拦截器,用来实现实际的客户业务需要的功能。
User Created,由开发人员创建的,包括struts.xml、Action、Template,
这些是每个使用Struts2来进行开发的人员都必须会的。
1.FilterDispatcher是整个Struts2的调度中心,也就是MVC中的C
(控制中心),根据ActionMapper的结果来决定是否处理请求,
如果ActionMapper指出该URL应该被Struts2处理,那么它将会执行Action处理
,并停止过滤器链上还没有执行的过滤器。
2.ActionMapper 会判断这个请求是否应该被Struts2处理,如果需要Struts2处理,
ActionMapper会返回一个对象来描述请求对应的ActionInvocation的信息。
3.ActionProxy,它会创建一个ActionInvocation实例,位于Action和xwork之间,
使得我们在将来有机会引入更多的实现方式,比如通过WebService来实现等。
4.ConfigurationManager是xwork配置的管理中心,可以把它看做struts.xml这
个配置文件在内存中的对应。
5.struts.xml,是开发人员必须光顾的地方。是Stuts2的应用配置文件,负责诸
如URL与Action之间映射关系的配置、以及执行后页面跳转的Result配置等。
6.ActionInvocation:真正调用并执行Action,它拥有一个Action实例和这个
Action所依赖的拦截器实例。ActionInvocation会按照指定的顺序去执行这些拦截器、
Action以及相应的Result。
Interceptor(拦截器):是Struts2的基石,类似于JavaWeb的Filter,
拦截器是一些无状态的类,拦截器可以自动拦截Action,它们给开发者提供
了在Action运行之前或Result运行之后来执行一些功能代码的机会。
7.Action:用来处理请求,封装数据。

 

二、运行流程
1.当用户的发出请求,比如http:localhost:8080/Struts2/helloworld/
helloworldAction.action,请求会被Tomcat接收到,Tomcat服务器来选择
处理这个请求的Web应用,那就是由helloworld这个web工程来处理这个请求。
2.Web容器会去读取helloworld这个工程的web.xml,在web.xml中进行匹配,
但发现,由struts2这个过滤器来进行处理(也就是
StrutsPrepareAndExecuteFilter),根据Filter的配置,
找到FilterDispatcher(Struts2的调度中心)
3.然后会获取FilterDispatcher实例,然后回调doFilter方法,进行真正的处理
PS:FilterDispatcher是任何一个Struts2应用都需要配置的,通常情况下,
web.xml文件中还有其他过滤器时,FilterDispatcher是放在滤器链的最后;
如果在FilterDispatcher前出现了如SiteMesh这种特殊的过滤器,还必须
在SiteMesh前引用Struts2的ActionContextCleanUp过滤器

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值