Struts2深入理解

来源:互联网 发布:淘宝店铺客服分流设置 编辑:程序博客网 时间:2024/06/04 17:46

Struts2的体系结构

一个初始化的请求到达Servlet容器后,将被传递给一个标准的过滤器链。这个过滤器包括了可选的ActionContextClearUp过滤器,当你的Struts2Web应用程序中集成SiteMesh时,将会用到这个过滤器。接下来,必须的FilterDispatcher被调用时,它轮询ActionMapper以便确定这个请求是否应该调用一个action。

如果ActionMapper确定了一个Action应该被调用,那么FilterDispatcher就把控制权委派给ActionProxy,ActionProxy询问框架的配置文件管理器(它从struts.xml文件中读取配置信息)。接下来,ActionProxy创建一个实现了命令模式的ActionInvocation。ActionInvocation在调用action之前会依次调用所有配置的拦截器。
一旦action执行返回,ActionInvocation就要查找这个action的结果码所对应的result(action的结果码和result的映射在struts.xml文件中配置),然后执行这个result。通常情况下result会调用JSP或FreeMarker模板来呈现页面(但不总是这样,例如result也可以是一个Action链)。当呈现页面时,模板可以使用框架提供的Struts标签。其中一些组件可以和ActionMapper一起工作来为后面的请求呈现正确的URL。

拦截器被再次执行(顺序和开始相反),最后响应被返回给在web.xml中配置的这些过滤器。如果已经设置了ActionContextClearUp过滤器,那么FilterDispatcher就不会清理ThreadLocal中的ActionContext信息:如果没有设置ActionContextClearUp过滤器,FilterDispatcher会清理掉所有的ThreadLocal。

Struts2框架的组成部分

1.ActionMapper和ActionMapping

org.apache.struts2.dispatcher.mapper.ActionMapper接口在HTTP请求和action调用请求之间提供了一个映射。当给定一个HTTP请求时,ActionMapper根据请求的URI来查找是否有对应的action调用,如果有,则返回一个描述了action调用的ActionMapping;如果没有找到匹配的action调用请求,则返回null。

Struts2框架对该接口提供的默认实现是org.apache.struts2.dispatcher.mapper.DefaultActionMapper。

ActionMapping本质上是一个数据传输对象,它将Action类和要执行的方法详细资料收集在一起。ActionMapping由org.struts2.dispatcher.Dispatcher和各种用户接口组件使用。

0 0
原创粉丝点击