StrutsStruts2的区别

首先看一张Struts2的发展路线图:

      从Struts2的发展过程来看,Struts2继承了Struts与Webwork的特性,形成了新的框架。但是它的称呼只是在“Struts”后面添加一个“2”,显然Struts2还是更多的继承了Struts的设计思想,并加入了WebWork的特点。下面将从十个方面来说明Struts与Struts2之间的不同点:

(1)Action

在Struts中都是使用抽象类编程而不是接口,因此它要求开发的Action类继承一个抽象基类,如DispatchAction等;

Struts2则基于接口编程,我们的Action类可以实现一个Action接口,也可实现其他接口,使可选和定制的服务成为可能。Struts2提供一个ActionSupport基类去实现常用的接口。更加强大的是,在Struts2中Action接口不是必需的,任何有execute()函数的POJO对象都可以用作Struts2的Action类来使用。

(2)线程模式

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

Struts2的Action对象为每一个请求产生一个实例,因此没有线程安全的问题。

(3)Servlet依赖

Struts的Action依赖于ServletAPI,当一个Action被调用时,HttpServletRequest和HttpServletResponse被传递给执行的方法;

Struts2的Action不依赖于容器,运行Action脱离容器单独被测试。如果需要,Struts2的Action仍然可以访问初始的request和response。

(4)可测试性

测试StrutsAction的一个主要问题是,execute()方法暴露了ServletAPI,这使得测试要依赖于容器。

Struts2Action的类是POJO类,因此可以直接编写测试类来进行测试,只需要在测试类中为Action注入属性即可。

(5)捕获输入

Struts使用ActionForm对象捕获用户输入,所有的ActionForm必须继承一个基类ActionForm。因为其他的JavaBean不能用作ActionForm,开发者经常创建多余的类捕获输入。动态表单可以作为创建传统ActionForm的选择,但是,开发者可能是在重新创建已经存在的JavaBean,仍然会导致有冗余的JavaBean;

Struts2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。输入属性可能是有自己子属性的rich对象模型。Action属性能够通过Web页面上的taglibs访问。同时,Struts2也支持ActionForm模式。

(6)表达式语言

Struts整合了JSTL,这种EL有基本对象图遍历,但是对集合和索引属性的支持很弱;

Struts2可以使用JSTL,但是也支持一个更强大和灵活表达式语言OGNL。

(7)绑定值到页面

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

Struts2使用ValueStack(值堆栈)技术,使taglib能够访问值,而不需要把你的页面和对象绑定起来。ValueStack策略允许通过一系列名称相同但类型不同的属性重用页面。

(8)类型转换

Struts的ActionForm属性通常都是String类型,并使用Commons-Beanutils进行类型转换。每个类提供一个转换器,对每一个实例来说都是不可配置的;

Struts2使用表达式语言OGNL进行类型转换,提供了基本和常用对象的转换器。

(9)数据校验

Struts支持在ActionForm的validate()方法中手动校验,或者通过Commons Validator的扩展来校验。同一个类可以有不同的校验内容,但不能校验子对象;

Struts2支持通过validate()方法和XWork校验框架来进行校验,XWork校验框架使用属性类型定义的校验和内容校验,来支持chain校验子属性。

(10)Action执行的控制

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

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

     总之,从实际开发的角度来说,Struts框架和Struts2框架的主要不同点在于Action类不同。

Struts与Struts2的区别的更多相关文章

  1. struts和struts2的区别

    1.Structs2简介和Structs2开发环境搭建 一.Structs2简介: 1.什么是Struct2? 著名的SSH三大框架分别为:表现层(Structs).业务逻辑层(Spring),持久化 ...

  2. Java框架中Struts和Struts2框架的区别

    struts1 与 struts2 的区别:1.都是 MVC 的 WEB 框架,2 struts1的老牌框架,应用很广泛,有很好的群众基础,使用它开发风险很小,成本更低!struts2虽然基于这个框架 ...

  3. SpringMVC 和Struts2的区别

    SpringMVC 和Struts2的区别 1. 机制: spring mvc的入口是servlet,而struts2是filter,这样就导致了二者的机制不同. 2. 性能: spring会稍微比s ...

  4. Struts1和Struts2的区别和对比(完整版)

    Struts2其实并不是一个陌生的Web框架,Struts2是以Webwork的设计思想为核心,吸收了Struts1的优点,因此,可以认为Struts2是Struts1和Webwork结合的产物. 简 ...

  5. Struts2五、Struts1与Struts2的区别

    Struts1和Struts2的区别和对比: Action 类:  • Struts1要求Action类继承一个抽象基类.Struts1的一个普遍问题是使用抽象类编程而不是接口,而struts2的Ac ...

  6. Struts1和Struts2的区别和对比

    Struts1和Struts2的区别和对比: Action 类: • Struts1要求Action类继承一个抽象基类.Struts1的一个普遍问题是使用抽象类编程而不是接口. • Struts 2  ...

  7. JAVAEE——SpringMVC第一天:介绍、入门程序、架构讲解、SpringMVC整合MyBatis、参数绑定、SpringMVC和Struts2的区别

    1. 学习计划   第一天 1.SpringMVC介绍 2.入门程序 3.SpringMVC架构讲解 a) 框架结构 b) 组件说明 4.SpringMVC整合MyBatis 5.参数绑定 a) Sp ...

  8. SpringMVC和Struts2的区别及优势

    1.SpringMVC和Struts2的区别比较 1.Struts2是类级别的拦截, 一个类对应一个request上下文,SpringMVC是方法级别的拦截,一个方法对应一个request上下文,而方 ...

  9. 面试:----Struts和springmvc的区别--区别上

    SpringMVC和Struts2的区别 1核心控制器(前端控制器,预处理控制器):对于使用过MVC框架的人来说这个词应该不会陌生.核心控制器的主要用途处理所有的请求.然后对那些特殊的请求.统一的进行 ...

随机推荐

  1. string转byte[]

    static byte[] GetBytes(string str) { byte[] bytes = new byte[str.Length * sizeof(char)]; System.Buff ...

  2. win10下装Ubuntu双系统

    本机状况: ssd在笔记本原来的硬盘位,已经安装win10 机械硬盘在光驱位 现在安装Ubuntukylin16到光驱位的机械硬盘建立双系统,并用Windows管理启动 1,将下载的Ubuntu镜像用 ...

  3. <%@ page contentType="text/html; charset=utf-8" language="java"%>每一个字符的含义

    contentType="text/html:网页类型htmlcharset=utf-8"网页编码类型language="java"网页编程语言<% @ ...

  4. C标准头文件<stdio.h>

    是很多人学C语言接触的第一个头文件,顾名思义,stdio就是"标准输入输出",其中声明了一组关于输入输出的类型,宏和函数,其中就包括了打印著名的"hello,world! ...

  5. json中含有Unicode的处理办法 C#

    public static class StringExtension { #region unicode 字符转义 /// <summary> /// 转换输入字符串中的任何转义字符.如 ...

  6. java web学习总结(四) -------------------HTTP协议

    一.什么是HTTP协议 HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的 ...

  7. css知多少(12)——目录

    <css知多少>系列就此完结了.常来光顾的朋友可能会觉得突然:css的知识点还有很多,怎么突然就完了,还没讲完呢?这样说是对的.不过凡事都有一个定位,如果盲目求多,定位模糊,那样就没有目的 ...

  8. 仿腾讯QQ竖直滑动导航菜单

    菜单就像qq软件的分组,鼠标经过自动显示相应组的内容. 效果体验网址:http://keleyi.com/a/bjad/nf86w2dv.htm 以下是源代码: <html> <he ...

  9. mvc中form表单提交的几种形式

    第一种方式:submit 按钮 提交 <form action="MyDemand" method="post"> <span>关键字: ...

  10. eclipse Swt编程—窗口小部件widget

    1.标签Label // 标签(Label类)组件是SWT中最简单的组件.Label类的构造方法和格式如下: // Label(Composite parent,