zoukankan      html  css  js  c++  java
  • 关于struts1与struts2

    1.Action方面

    Action是整个Struts框架的核心内容,Struts1.x与Struts2的Action模型很大的区别。Struts2是一个 pull-MVC架构 ,从开发者角度看,就是说需要显示给用户的数据可以直接从Action中获取,而不像 Struts1.x那样,必须把相应的Bean存到Page、Request或者Session中才能获取。Struts1.x 必须继承org.apache.struts.action.Action或者其子类,表单数据封装在FormBean中。在Struts2中,处理业务逻辑的方法(通常是execute方法)返回的对象不是ActionForward,而是String。在Struts1.x中,只有“execute”方法才能处理该Action的业务逻辑, 但在Struts2中并非必要,任何声明为public String methodName() 方法,都能通过配置来调用Action。

    • Struts1要求Action类继承一个抽象基类。Struts1的一个普遍问题是使用抽象类编程而不是接口,而struts2的Action是接口;

    • Struts2的Action 可以实现一个Action接口,也可实现其他接口,还可以不实现任何接口,这使得可选和定制的服务成为可能。在Struts2中,它提供了一个ActionSupport基类去实现 常用的接口。注意,Action接口不是必须的,任何有execute标识的POJO对象都可以用作Struts2的Action对象。

    2.线程模式方面

    • Struts1的Action是线程安全的单例模式,因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts1 Action能作的事,并且要在开发时特别小心,因为Action使用的资源必须是线程安全的或同步的。

    • Struts2的Action对象为每一个请求产生一个实例,因此没有线程安全问题。Struts2中的ActionContext为Action的执行提供了环境,而 ActionContext 实质上是一个 ThreadLocal 变量

    3.对servlet的依赖方面

    Struts1的Action与Servlet API是紧耦合的。

    Struts2的Action 并不依赖于Servlet容器,允许Action脱离容器单独被测试

    4.可测试性方面

    测试Struts1的Action的一个主要问题是execute方法暴露了servlet API,这使得测试要依赖于容器。

    Struts2的Action可以通过初始化、设置属性、调用方法来测试,“依赖注入”支持也使测试更容易。

    5.输入捕获方面

    Struts1使用ActionForm对象捕获输入。所有的ActionForm必须继承一个基类,因为其他JavaBean不能用作ActionForm,开发者经常创建多余的类捕获输入。

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

    6.表达式语言方面

    Struts1 整合了JSTL,因此可以使用JSTL的EL。

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

    7.绑定值到页面方面

    • Struts1使用标准JSP机制把对象绑定到页面中来访问;

    • Struts2 通过ValueStack可以使taglib能够访问值而不需要把你的页面(view)和对象绑定起来。

    8.类型转换方面

    Struts1的ActionForm属性通常都是String类型,Struts1借助于Apache的Commons-Beanutils进行类型转换。

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

    9.数据校验方面

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

    Struts2支持通过validate方法和XWork校验框架(拦截器机制)来进行校验。

    10.对Action执行的控制方面

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

    • Struts2支持通过拦截器堆栈(InterceptorStacks)为每一个Action创建不同的生命周期。

    11.对IOC的应用

    Struts2是以Webwork 2作为基础发展出来。而在Webwork 2.2之前的Webwork版本,其自身有一套控制反转的实现,Struts2推荐大家通过Spring实现控制反转。

    12.struts2的拦截机制

    拦截器(Interceptor) 在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前进行拦截,然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。在Webwork的中文文档的解释为:拦截器是动态拦截Action调用的对象。它提供了一种机制可以使开发者定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行,同时,也提供了一种可以提取action中可重用的部分的方式。

    • Struts1.x的标准框架中不提供任何形式的拦截器,虽然有一个名为SAIF的附加项目则实现了这样的功能,但它的适用的范围还很有限。
    • 拦截器是Struts2的一个强有力的工具。Struts2许多的功能(feature)都是构建于它之上,如国际化、类型转换器、数据校验、异常处理等。
  • 相关阅读:
    redis数据查看工具
    CSS3 使用 calc() 计算高度 vh px
    springboot集成freemarker属性配置(不知道是针对于某个版本,2.0后有变动)
    springboot中Thymeleaf和Freemarker模板引擎的区别
    Velocity与Jsp、Freemarker的对比
    Eclipse中如何安装Git插件
    git 介绍
    PO BO VO DTO POJO DAO 概念及其作用
    layer icon样式及 一些弹框使用方法
    layer之关闭弹窗
  • 原文地址:https://www.cnblogs.com/easilyai/p/9315545.html
Copyright © 2011-2022 走看看