Struts2深入理解

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
   1. struts是一个按MVC模式设计的Web层框架,其实它就是一个大大的servlet,这个Servlet名为ActionServlet,或是ActionServlet的子类。我们可以在web.xml文件中将符合某种特征的所有请求交给这个Servlet处理,这个Servlet再参照一个配置文件(通常为/WEB-INF/struts-config.xml)将各个请求分别分配给不同的action去处理。    一个扩展知识点:struts的配置文件可以有多个,可以按模块配置各自的配置文件,这样可以防止配置文件的过度膨胀;    2. ActionServlet把请求交给action去处理之前,会将请求参数封装成一个formbean对象(就是一个java类,这个类中的每个属性对应一个请求参数),封装成一个什么样的formbean对象呢?看配置文件。    3.要说明的是, ActionServlet把formbean对象传递给action的execute方法之前,可能会调用formbean的validate方法进行校验,只有校验通过后才将这个formbean对象传递给action的execute方法,否则,它将返回一个错误页面,这个错误页面由input属性指定,(看配置文件)作者为什么将这里命名为input属性,而不是error属性,我们后面结合实际的运行效果进行分析。    4.action执行完后要返回显示的结果视图,这个结果视图是用一个ActionForward对象来表示的,actionforward对象通过struts-config.xml配置文件中的配置关联到某个jsp页面,因为程序中使用的是在struts-config.xml配置文件为jsp页面设置的逻辑名,这样可以实现action程序代码与返回的jsp页面名称的解耦。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值