zoukankan      html  css  js  c++  java
  • Struts1与Struts2区别?

    (1)Struts1执行过程:

    <1>Web容器启动的时候ActionServlet被初始化,加载struts-config.xml配置文件。

    <2>浏览器发送请求到ActionServlet时,ActionServlet对请求进行处理。根据请求的路劲和配置信息找到对应的Action和ActionForm。

    <3>在确定将要调用的Action和对应的ActionForm后,将请求中包含的值填充到ActionForm中。在调用Action的execute方法前ActionServlet需要准备好ActionMapping参数。

    <4>Action调用业务逻辑方法得到返回值,并返回ActionForward对象。

    <5>控制权重新回到ActionServlet,ActionServlet根据Action返回的ActionForward对象转发到相应的页面。

    <6>处理结果返回给浏览器。

    (2)Struts2执行过程:

       <1>当WEB容器收到一个请求时,它将请求传递给一个标准的过滤器链(如ActionContentCleanUp)。

    <2>FilterDispatcher被调用,它调用ActionMapper确定请求调用哪个Action,ActionMapper返回一个收集了Action信息的ActionMapping对象

    <3>FilterDispatcher将控制权委派给ActionProxy,ActionProxy调用配置管理器(ConfigurationManager)从配置文件中读取配置信息,然后创建ActionInvocation对象,ActionInvocation被创建的同时,填充了需要的所有的对象和信息,它在调用Acton之前会依次调用所用配置的拦截器(Intercepter)。

    <4>一旦Action执行返回结果字符串,ActionInvocation负责根据struts.xml中的配置查找结果字符串对应的Result,然后执行这个Result,一般Resul会调用一些模板(JSP)来呈现页面。

    <5>之后拦截器会被再次执行(顺序和Action执行之前相反),最后响应,被返回给在web.xml中配置的哪些过滤器(FilterDispatcher等)。

    (3)Struts1与Struts2区别:

    <1>struts1要求Action类继承一个抽象基类,而不是接口。

        struts2的action类可以实现一个action接口,也可以实现其他接口。

    <2>sturts1 的action是单例模式,线程是不安全的。

        struts2 的action线程是安全的,action为每一个请求都生成了一个实例。

    <3>sturts1过去依赖serlet API,不容易测试。

        struts2不依赖于容器,允许Action脱离容器单独被测试。

    <4>Struts1使用ActionForm对象捕获输入。所有的ActionForm必须继承一个基类。

        Struts2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。

    <5>Struts1整合了JSTL,因此使用JSTL EL。这种EL有基本对象图遍历,但是对集合和索引属性的支持很弱。

        Struts2可以使用JSTL,但是也支持一个更强大和灵活的表达式语言OGNL(Object Graph Notation Language)。

    <6>Struts1使用标准JSP机制把对象绑定到页面中来访问。

        Struts2使用ValueStack技术使taglib能够访问值而不需要把页面(view)和对象绑定起来。

    <7>Struts1的ActionForm属性通常都是String类型。

        Struts2使用OGNL进行类型转换提供基本和常用对象的转换器。

    <8>Struts1支持在ActionForm的validate方法中手动校验,或通过Commons Validator的扩展来校验。

       Struts2支持通过validate方法和XWork校验框架来进行校验。

    <9>Struts1支持每一个模块有单独的Request Processors(生命周期),但是模块中的所有Action必须共享相同的生命周期。

        Struts2支持通过拦截器堆栈(Interceptor Stacks)为每一个Action创建不同的生命周期,堆栈能够根据需要和不同的Action一起使用。

  • 相关阅读:
    P3916 图的遍历 题解
    NBL小可爱纪念赛「 第一弹 」 游记(部分题解)
    P4147 玉蟾宫 题解
    十、一些小例子
    九、基础正则表达式BRE
    八.linux系统文件属性知识
    七、linux目录结构知识---实战
    六、linux目录结构知识
    3.20-30岁形成好的习惯
    五、Centos linux系统优化-实战
  • 原文地址:https://www.cnblogs.com/hongwei2085/p/8878007.html
Copyright © 2011-2022 走看看