1) 在Action完成类方面的号码大全比照:Struts 1需求Action类承继一个笼统基类关键词挖掘工具;Struts 1的一个详细问题是运用笼统类编程而不是接口。Struts 2 Action类可以完成一个Action接口,也可以完成其他接口,使可选和定制的效劳成为可能。Struts 2供给一个ActionSupport基类去完成常用的接口。即便Action接口不是有必要完成的,只要一个包含execute办法的POJO类都可以用作Struts 2的Action。 

2) 线程形式方面的比照:Struts 1 Action是单例形式而且有必要是线程安全的,由于仅有Action的一个实例来处置一切的恳求。单例战略约束了Struts 1 Action能做的事,而且要在开发时格外小心。Action资本有必要是线程安全的或同步的;Struts 2 Action目标为每一个恳求发生一个实例,因而没有线程安全问题。 

3) Servlet依靠方面的比照:Struts 1 Action依靠于Servlet API,由于Struts 1 Action的execute办法中有HttpServletRequest和HttpServletResponse办法。Struts 2 Action不再依靠于Servlet API,然后答应Action脱离Web容器运转,然后降低了测验Action的难度。 当然,假如Action需求直接拜访HttpServletRequest和HttpServletResponse参数,Struts 2 Action仍然可以拜访它们。可是,大多数时分,Action都无需直接拜访HttpServetRequest和HttpServletResponse,然后给开发者更多灵敏的挑选。 

4) 可测性方面的比照:测验Struts 1 Action的一个首要问题是execute办法依靠于Servlet API,这使得Action的测验要依靠于Web容器。为了脱离Web容器测验Struts 1的Action,有必要借助于第三方拓展:Struts TestCase,该拓展下包含了系列的Mock目标(模拟了HttpServetRequest和HttpServletResponse目标),然后可以脱离Web容器测验Struts 1的Action类。Struts 2 Action可以经过初始化、设置特点、调用办法来测验。 

5) 封装恳求参数的比照:Struts 1运用ActionForm目标封装用户的恳求参数,一切的ActionForm有必要承继一个基类:ActionForm。一般的JavaBean不能用作ActionForm,因而,开发者有必要创立很多的ActionForm类封装用户恳求参数。尽管Struts 1供给了动态ActionForm来简化ActionForm的开发,但仍然需求在装备文件中界说ActionForm;Struts 2直接运用Action特点来封装用户恳求特点,避免了开发者需求很多开发ActionForm类的烦琐,实际上,这些特点还可以是包含子特点的Rich目标类型。假如开发者仍然怀念Struts 1 ActionForm的形式,Struts 2供给了ModelDriven形式,可以让开发者运用独自的Model目标来封装用户恳求参数,但该Model目标无需承继任何Struts 2基类,是一个POJO,然后降低了代码污染。 

6) 表达式言语方面的比照:Struts 1结合了JSTL,因而可以运用JSTL表达式言语。这种表达式言语有根本目标图遍历,但在对调集和索引特点的支撑上则功用不强;Struts 2可以运用JSTL,但它结合了一种更强大和灵敏的表达式言语:OGNL(Object Graph Notation Language),因而,Struts 2下的表达式言语功用更加强大。 

7) — 绑定值到视图的比照:Struts 1运用规范JSP机制把目标绑定到视图页面;Struts 2运用“ValueStack”技能,使标签库可以拜访值,而不需求把目标和视图页面绑定在一同。 

8) 类型变换的比照:Struts 1 ActionForm 特点一般都是String类型。Struts 1运用Commons-Beanutils进行类型变换,每个类一个变换器,变换器是不可装备的;Struts 2运用OGNL进行类型变换,支撑根本数据类型和常用目标之间的变换。 

9) 数据校验的比照:Struts 1支撑在ActionForm重写validate办法中手动校验,或许经过结合Commons alidator结构来完成数据校验。Struts 2支撑经过重写validate办法进行校验,也支撑结合XWork校验结构进行校验。 

10) Action履行控制的比照:Struts 1支撑每一个模块对应一个恳求处置(即生命周期的概念),可是模块中的一切Action有必要同享一样的生命周期。Struts 2支撑经过拦截器仓库(Interceptor Stacks)


-        indexRead arguments from command-line "http://www.shoudashou.com"

-        indexRead arguments from command-line "http://www.4lunwen.cn"

-        indexRead arguments from command-line "http://www.zx1234.cn"

-        indexRead arguments from command-line "http://www.penbar.cn"

-        indexRead arguments from command-line "http://www.whathappy.cn"

-        indexRead arguments from command-line "http://www.lunjin.net"

-        indexRead arguments from command-line "http://www.ssstyle.cn"

-        indexRead arguments from command-line "http://www.91fish.cn"

-        indexRead arguments from command-line "http://www.fanselang.com"

为每一个Action创立不一样的生命周期。开发者可以根据需求创立相应仓库,然后和不一样的Action一同运用。 

11) 捕获输入:Struts1 运用ActionForm目标捕获输入。一切的ActionForm有必要承继一个基类。由于其他JavaBean不能用作ActionForm,开发者常常创立多余的类捕获输入。动态Bean(DynaBeans)可以作为创立传统ActionForm的挑选,可是,开发者可能是在从头描绘(创立)现已存在的JavaBean(仍然会导致有冗余的javabean)。Struts 2直接运用Action特点作为输入特点,消除了对第二个输入目标的需求。输入特点可能是有自个(子)特点的rich目标类型。Action特点可以经过 web页面上的taglibs拜访。Struts2也支撑ActionForm形式。rich目标类型,包含业务目标,可以用作输入/输出目标。这种 ModelDriven 特性简化了taglib对POJO输入目标的引证。