zoukankan      html  css  js  c++  java
  • Struts2原理

    Struts 2以WebWork优秀的设计思想为核心,吸收了Struts 1的部分优点,建立了一个兼容WebWork和Struts 1的MVC框架,Struts 2的目标是希望可以让原来使用Struts 1、WebWork的开发人员,都可以平稳过渡到使用Struts 2框架。在2005年12月,WebWork与Struts Ti宣布合并。与此同时,Struts Ti改名为Struts Action Framework 2.0,成为Struts真正的继承者。
    (1)支持的表现层技术单一
     那时候还没有FreeMarker、Velocity等技术,因而没有考虑与这些FreeMarker、Velocity等视图技术的整合
    (2)与Servlet API严重耦合,难于测试
    (3)代码严重依赖于Struts 1 API,属于侵入式设计

    Struts2优点

    Struts2是在WebWork2基础发展而来的。和struts1一样, Struts2也属于MVC框架。不过有一点大家需要注意的是:尽管Struts2和struts1在名字上的差别不是很大,但Struts2和struts1在代码编写风格上几乎是不一样的。那么既然有了struts1,为何还要推出struts2。主要是因为struts2有以下优点:
    (1)在软件设计上Struts2没有像struts1那样跟Servlet API和struts API有着紧密的耦合,Struts2的应用可以不依赖于Servlet API和struts API。 Struts2的这种设计属于无侵入式设计,而Struts1却属于侵入式设计。下面为Struts1的Action设计:
    public class OrderListAction extends Action {
    public ActionForward execute(ActionMapping mapping, ActionForm form,
      HttpServletRequest request, HttpServletResponse response)
      throws Exception {
      }
    }
    (2)Struts2提供了拦截器,利用拦截器可以进行AOP编程,实现如权限拦截等功能。
    (3) Strut2提供了类型转换器,我们可以把特殊的请求参数转换成需要的类型。在Struts1中,如果我们要实现同样的功能,就必须向Struts1的底层实现BeanUtil注册类型转换器才行。
    (4)Struts2提供支持多种表现层技术,如:JSP、freeMarker、Velocity等
    (5)Struts2的输入校验可以对指定方法进行校验,解决了Struts1长久之痛。
    (6)提供了全局范围、包范围和Action范围的国际化资源文件管理实现

    工作原理

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

    Struts2的处理流程

     

    StrutsPrepareAndExecuteFilter是Struts 2框架的核心控制器,它负责拦截由<url-pattern>/*</url-pattern>指定的所有用户请求,当用户请求到达时,该Filter会过滤用户的请求。默认情况下,如果用户请求的路径不带后缀或者后缀以.action结尾,这时请求将被转入Struts 2框架处理,否则Struts 2框架将略过该请求的处理。当请求转入Struts 2框架处理时会先经过一系列的拦截器,然后再到Action。与Struts1不同,Struts2对用户的每一次请求都会创建一个Action,所以Struts2中的Action是线程安全的。

  • 相关阅读:
    lamp架构之一键编译安装lamp搭建wordpress和discuz脚本(基于centos)
    更换公网IP导致wordpress网站无法正常访问解决方法
    centos7一键编译安装Apache2.4.46脚本
    redis之RDB备份脚本
    一键编译安装redis5.0.9脚本(centos)
    一键二进制安装mysql8.0.19脚本(shell)
    c语言 扫雷游戏(才做了三分之一)
    C语言 数据结构单链表(未解决版)
    JAVA final关键字的使用
    JAVA 520 无限循环I love you
  • 原文地址:https://www.cnblogs.com/wuyudong/p/5091068.html
Copyright © 2011-2022 走看看