struts1与2的区别

合集下载

struts1和struts2的详细区别

struts1和struts2的详细区别

特征Struts 1 Struts 2Action类Struts1的action需要去继承一个抽象基类。

一个普遍问题就是Struts1是面向抽象类编程来代替接口编程Struts2的action可以实现一个Action接口,也可以同时实现一些其他的接口来添置一些附加的,常用的服务。

Struts2提供一个基类ActionSupport实现了一些常用的接口。

虽然Action接口不是必须的。

任何附带execute方法的POJO对象都可以作为Struts2的action对象。

线程模型Struts1的action是单例的而且必须是线程安全的,因为该类会只有唯一一个引用来为action处理所有的请求。

单例策略会限制Struts1的action的功能以及需要扩展的额外的功能(The singletonstrategy places restrictions on what canbe done with Struts 1 Actions andrequires extra care to develop)。

Struts1的action必须是线程安全的并且是同步的。

Struts2的Action对象是针对每一个请求的,所以自然也就不存在线程安全问题了。

(实际上,)Servlet的依赖Struts1的Action依赖于Servlet API,因为当Action被调用的时候HttpServletRequest和HttpServletResponse对象是通过execute方法进行处理的。

Struts2的Action和容器的连接并不紧密。

通常servlet上下文被描绘成简单的Map映射,允许Action被单独测试。

当然,如果需要的话Struts2的Action也可以通过访问初始的request和response来完成一些功能。

然而,其他的一些架构元素导致降低或者删除了直接访问request和response的需求。

易测试性测试Struts1的Action有一个大障碍就是execute方法是直接暴露于servlet API的。

ssh 2013年最新的面试题

ssh 2013年最新的面试题

ssh 2013年最新的面试题Struts1.struts1和struts2的区别在Action实现类方面的对比:Struts1要求Action类继承一个抽象基类;Struts1的一个具体问题是使用抽象类编程而不是接口。

Struts2 Action类可以实现一个Action接口,也可以实现其他接口,使可选和定制的服务成为可能。

Struts2提供一个ActionSupport 基类去实现常用的接口。

即使Action接口不是必须实现的,只有一个包含execute方法的POJO类都可以用作Struts2的Action。

线程模式方面的对比:Struts1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。

单例策略限制了Struts1 Action能做的事,并且要在开发时特别小心。

Action资源必须是线程安全的或同步的;Struts2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。

Servlet依赖方面的对比:Struts1 Action依赖于Servlet API,因为Struts1 Action的execute方法中有HttpServletRequest和HttpServletResponse方法。

Struts2 Action不再依赖于Servlet API,从而允许Action脱离Web容器运行,从而降低了测试Action 的难度。

当然,如果Action需要直接访问HttpServletRequest和HttpServletResponse参数,Struts2 Action仍然可以访问它们。

但是,大部分时候,Action都无需直接访问HttpServetRequest和HttpServletResponse,从而给开发者更多灵活的选择。

可测性方面的对比:测试Struts1 Action的一个主要问题是execute方法依赖于Servlet API,这使得Action的测试要依赖于Web容器。

strusts2课堂总结

strusts2课堂总结

一、1、struts2struts2是mvc设计思想的一个实现,可以将项目低耦合,提高扩展性2、struts2和struts1的区别struts2不是struts1的升级,而是继承的下xwork的血统,它吸收了struts1和webwork 的优势。

struts2的action是原型,安全的,struts2的action是单例,非安全3、步骤:1、导入包2、在web.xml文件中,加入struts2的核心拦截器3、在src下放入struts2的xml struts.xml4、urlhttp://localhost:8080/Struts2_01_HelloWorld/demo/hello.action二、1、默认值2、转发和重定向的区别转发:url显示的依然是上一个的url,共享上一次的请求重定向:url显示的是下一个的url,不共享3、urlhttp://localhost:8080/Struts2_02_Default/demo/hello.action4、路径http://localhost:8080/Struts2_02_Default/demo/a/b/c/hello.action1、原路径找不到,http://localhost:8080/Struts2_02_Default/demo/a/b/hello.action2、如果1找不到,http://localhost:8080/Struts2_02_Default/demo/a/hello.action3、如果2找不到,http://localhost:8080/Struts2_02_Default/demo/hello.action3、如果3找不到,http://localhost:8080/Struts2_02_Default/hello.action三、11、自定义action继承ActionSupport2、功能方法必须满足格式public String 名字()throws Exception{....};3、urlhttp://localhost:8080/Struts2_03_Action/demo/a.action四、1、如何给action传入参数注意:赋值的必须有封装的set方法,通过el表达式获取的时候,必须有封装的get 方法1、直接给单个参数赋值,在action里建立一个变量,名字与参数的名字一样2、为对象的某个属性赋值,在action里建立一个对象,将参数改为对象名.属性的格式五、1、转发和重定向的区别转发到下一次的时候,url依然是上一次的url,共享上一次的request重定向到下一次的时候,url是下一次的url,不共享上一次的request2、struts2的result的type转发:共享上一次action重定向:不共享上一次action1、转发到下一个jsp,html:dispatcher2、重定向到下一个jsp,html:redirect3、转发到下一个action:chain转到同一个包下的action转发到不同包下的action4、重定向到下一个action:redirectAction转到同一个包下的action转发到不同包下的action六、1、为了分模块开发,可以设置多个xmL文件。

struts1和strtus2的区别

struts1和strtus2的区别

struts1和strtus2的区别1、Action类Struts 1的Action类扩展一个抽象基类。

在Struts 1是一个常见的问题抽象类而不是接口编程。

Struts 2的行动可能实现一个Action接口,连同其他接口,使可选和定制的服务。

Struts 2中提供了一个基础ActionSupport类实现常用的接口。

虽然,Action接口不是必需的。

任何的POJO对象与一个执行签名可以用作Struts 2的Action对象。

2、线程模型Struts 1的动作是单身,必须是线程安全的,因为只会有一个类的一个实例来处理所有的请求,该行动。

的单身战略名额限制什么可以做Struts 1的操作和发展,需要格外小心。

Action 资源必须是线程安全的或同步的。

在Struts 2 Action对象为每一个请求实例化,因此没有线程安全问题。

(在实践中,servlet 容器会产生许多被丢弃的对象,每个请求,以及一个新的对象并没有对性能上的损失或影响垃圾收集)。

3、Servlet的依赖Struts 1的操作的servlet API的依赖,因为HttpServletRequest和HttpServletResponse被传递给execute方法的调用时采取行动。

Struts 2的动作没有连接到容器中。

最经常使用的servlet上下文被表示为简单的地图,让行动单独测试。

Struts 2的动作仍然可以访问原始的请求和响应,如果需要的话。

然而,其他建筑元素减少或消除的,需要访问HttpServetRequest直接或HttpServletResponse的。

4、可测性测试Struts 1行动的主要障碍是execute方法暴露了Servlet API。

一个第三方扩展中,Struts TestCase中,提供了一组Struts 1的模拟对象。

Struts 2的动作可以测试通过实例的操作,设置属性和调用方法。

依赖注入的支持也使测试更简单。

web面试题三答案

web面试题三答案

一、Struts1和struts2的区别?①struts1要求Action类继承一个抽象基类,而不是接口。

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

②sturts1action是单例模式,线程是安全的。

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

③sturts1过去依赖servlet API,不容易测试。

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

④Struts1使用ActionForm对象捕获输入。

所有的ActionForm必须继承一个基类。

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

⑤Struts1整合了JSTL,因此使用JSTL EL。

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

Struts2可以使用JSTL,但是也支持一个更强大和灵活的表达式语言--"Object Graph Notation Language" (OGNL).⑥Struts1使用标准JSP机制把对象绑定到页面中来访问。

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

⑦Struts1ActionForm属性通常都是String类型。

Struts1使用Commons-Beanutils进行类型转换。

Struts2使用OGNL进行类型转换。

提供基本和常用对象的转换器。

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

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

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

struts2总结

struts2总结

struts2总结Struts 2是在WebWork2基础发展而来的。

注意:struts 2和struts 1在代码风格上几乎不一样。

Struts 2 相比Struts 1的优点:1、在软件设计上Struts 2 没有像Struts 1那样跟Servlet API 和struts API 有着紧密的耦合。

Struts 2的应用可以不依赖于Servlet API和Struts API 。

2、Struts 2 提供了拦截器,利用拦截器可以进行AOP编程。

3、Struts 2 提供了类型转换器。

4、Struts 2 提供支持多种表现层技术,如:JSP 、freeMarker等。

5、Struts 2 的输入校验可以指定方法进行校验。

6、Struts 2 提供了全局范围、包范围和Action范围的国际化资源文件管理实现。

Struts 2 体系结构:1、Web浏览器请求一个资源。

2、过滤器Dispatcher查找方法,确定适当的Action。

3、拦截器自动对请求应用通用功能,如验证和文件上传操作。

4、Action的execute方法通常用来存储和重新获得信息。

5、结果被返回到浏览器。

搭建Struts 2 开发环境1、找到开发Struts 2的应用需要用到的jar包。

2、编写Struts 2的配置文件。

3、在web.xml中加入Struts 2 MVC启动框架配置。

开发Struts 2 最少用到的jar文件:Struts-core-2.x.x.jar : Struts 2 框架的核心类库xwork-2.x.x.jar : XWork类库,Struts 2 在其上构建ognl-2.6.x.jar : Object Graph Navigation Language ,Struts 2 框架通过其读写对象的属性。

freemarker-2.3.x.jar : Struts 2 的UI标签的模版使用Freemarker编写。

Struts1和Struts2的比较

Struts1和Struts2的比较
綫程模型
Struts 1 Action類是單例類,因爲只有一個示例麳控制所有的請求。單例類策略造成了一定的限制幷且給開發帶來了額外的煩惱。Action資源必須是綫程安全或者同步的。
Struts 2 Action對象爲每一個請求都實例化對象,所以沒有綫程安全的問題。(踐中,servlet容器産生許多丟弃的對象對于每一個請求,多于一個的對象并不影響垃圾收集)
Servlet依賴
Struts 1的Action類依賴于servlet API以爲HttpServletRequest和HttpServletResponse作爲參數傳給execute方法當Action被調用時。
Struts 2的Action不和容器有關。Servlet上下文被表現爲簡單的Maps,允許Action被獨立的測試。Struts 2的Action可以訪問最初的請求和相應,如果需要的話。然而,其他的架構元素减少或者排除直接訪問HttpServletRequest或者HttpServletResponse的需要。
Struts 2使用“ValueStack”技術爲了標簽庫可以不用鏈接你的視圖到對象的表現類型麳訪問值。ValueStack策略允許重用視圖。
類型轉換
Struts 1的ActionForm屬性經常都是String的。Struts 1使用Commons-Beanutils麳類型轉換。轉換每一個類,幷不是爲每一個實例配置。
表達式語言
Struts 1整和JSTL,所以它使用JSTL的表達式語言。表達式語言有基本的圖形對象移動,但是相對很弱的集合和被索引的屬性支持。
Struts 2使用JSTL,但是框架也支持更强大和更靈活的表達式,叫做“對象圖形符號語言”(OGNL)。
將值綁定要視圖上

Struts2面试题

Struts2面试题

###1.Struts2与Struts1的联系与区别?为什么要用Struts2?struts1与struts2都是mvc框架的经典实现模式。

Struts2不是从Struts1升级而来,而是有WebWork改名而来,而WebWork只是Xwork加了很多WEB拦截器而已区别:1.核心控制器改成了过滤器(过滤器比Servlet的级别要高,因为程序运行时是先进入过滤器再进入Servlet)2.struts1严重依赖于Servlet(因为太过于依赖于api的HttpServletRequest与HttpServletResponse的两个参数),struts2就则脱离了Servlet的API。

3.管理Action时struts1是单例模式,struts2是每个请求产生一个实例。

4.在表达式的支持上struts2不仅有jstl,还有功能更加强大的ognl表达式。

5.struts1的类型转换是单向的(页面到ActionForm),struts2是双向的(页面到Action 再到页面回显)6.校验,struts1没有针对具体方法的校验,struts2提供了指定某个方法进行效验,还有框架校验。

7.struts2提供了拦截器,利用拦截器可以在访问Action之前或之后增加如权限拦截等功能。

8.struts2提供了全局范围,包范围,Action范围的国际化资源文件管理实现。

9.struts2支持多种视图类型###2.Struts2的核心是什么,体现了什么思想?Struts2的核心是拦截器,基本上核心功能都是由拦截器完成,拦截器的实现体现了AOP(面向切面编程)思想###3.为何继承ActionSupport因为ActionSupport实现了Action接口,提供了国际化,校验的功能。

ActionSupport实现了国际化功能:因为它提供了一个getText(String key)方法实现国际化,该方法从资源文件上获取国际化信息。

struts1与struts2的区别

struts1与struts2的区别

struts1与struts2的区别Struts作为MVC 2的Web框架,自推出以来不断受到开发者的追捧,得到广泛的应用。

作为最成功的Web框架,Struts自然拥有众多的优点:MVC 2模型的使用、功能齐全的标签库(Tag Library)、开放源代码。

但是,正所谓“没有最好,只有更好”,Struts1.x自身也有不少的缺点:需要编写的代码过多,容易引起“类爆炸”、单元测试困难。

这些缺点随着Web的发展越来越明显。

这就促生了Struts 2,它的诞生能很好的解决上述问题。

在本文中,笔者将对Struts2和Struts1.x这两种框架进行详细的比较。

比较将涉及到这两种框架的Action、验证、类型转换及如何开发等方面的内容。

希望通过这样的比较,让读者了解这两种框架各自的特点,以便于在自己的项目中,根据实际情况,尽快的过渡到Struts2的时代。

本文的内容基于Struts2.0.6。

一、引言Struts的第一个版本是在2001年5月份发布的。

它的最初设想是通过结合JSP和Servlet,使Web应用的视图和业务/应用逻辑得以清晰地分离开来。

在Struts之前,最常见的做法是在JSP中加入业务和应用逻辑,或者在Servlet中通过println()来生成视图。

自从第一版发布以来,Struts实际上已成为业界公认的Web应用标准。

它的炙手可热也为自己带来了改进和变更,所以不但要跟上对Web应用框架不断变化的需求,而且要与日渐增多竞争激烈的众多框架的特性相融合。

到最后,产生了几个下一代Struts的解决方案。

其中两个最受瞩目的方案是Shale和Struts Ti。

Shale是一个基于构件的框架,并在最近成为Apache的顶级项目。

而Struts Ti则是在Struts的成功经验基础上继续坚持对前端控制器(Front Controller)和MVC(model-view-controller)模式进行改进。

struts2、struts1的执行流程、工作原理

struts2、struts1的执行流程、工作原理

Struts2框架本身大致可以分为3个部分:核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件。

核心控制器FilterDispatcher是Struts 2框架的基础,包含了框架内部的控制流程和处理机制。

业务控制器Action 和业务逻辑组件是需要用户来自己实现的。

用户在开发Action 和业务逻辑组件的同时,还需要编写相关的配置文件,供核心控制器FilterDispatcher来使用。

Struts2的工作流程相对于Struts1要简单,与WebWork框架基本相同,所以说Struts2是WebWork的升级版本。

基本扼要流程如下:1、客户端浏览器发出HTTP请求。

2、根据web.xml配置,该请求被FilterDispatcher接收。

3、根据struts.xml配置,找到需要调用的Action类和方法,并通过IoC方式,将值注入给Aciton。

4、Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证。

5、Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页面。

6、返回HTTP响应到客户端浏览器。

Struts工作机制?为什么要使用Struts?工作机制:Struts的工作流程:在web应用启动时就会加载初始化ActionServlet,ActionServlet从struts-config.xml文件中读取配置信息,把它们存放到各种配置对象当ActionServlet接收到一个客户请求时,将执行如下流程.-(1)检索和用户请求匹配的ActionMapping实例,如果不存在,就返回请求路径失效信息;-(2)如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中;-(3)根据配置信息决定是否需要表单验证.如果需要验证,就调用ActionForm 的validate()方法;-(4)如果ActionForm的validate()方法返回null或返回一个不包含ActionMessage的ActuibErrors对象,就表示表单验证胜利;-(5)ActionServlet根据ActionMapping所包含的映射信息决定将请求转发给哪个Action,如果相应的Action实例不存在,就先创建这个实例,然后调用Action 的execute()方法;-(6)Action的execute()方法返回一个ActionForward对象,ActionServlet在把客户请求转发给ActionForward对象指向的JSP组件;-(7)ActionForward对象指向JSP组件生成动态网页,返回给客户;为什么要用:JSP、Servlet、JavaBean技术的出现给我们构建强健的企业应用系统提供了可能。

struts1与struts2的区别Java进阶必备知识点

struts1与struts2的区别Java进阶必备知识点

Struts1与struts2的对比一.Action类·Struts1要求Action类继承一个抽象类。

Struts1的一个普遍问题是使用抽象类编程儿不是接口。

·Struts2中Action类可以实现一个Action接口,也可是实现其他接口,试可选和定制的服务成为可能。

Struts2提供一个Action-Support基类去实现常用的接口。

Action接口不是必须的,任何execute标识的POJO对象都可以用作Struts2的Action对象。

二.线程模式·struts1中Action是单例模式并且是线程安全的,因为仅有Action的一个实力来处理所有的请求。

单例策略限制了struts1 Action能做的事,并且要在开发时特别小心Action资源必须是线程安全的或同步的。

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

(实际上,servlet容器给每个请求产生许多可丢弃的对象,并且不会导致性能和垃圾回收问题)三.Servlet依赖·struts1中Action依赖于servletAPI,因此当一个Action被调用时HttpServetRequest和HttpServletResponse被传递给execute 方法。

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

如果需要,struts2 Action仍然可以访问初始的request和response。

但是,其他元素减少或者消除了直接访问HttpServetRequest和HttpServletResponse的必要性。

四.可测性·测试struts1中Action的一个主要问题是execute方法暴露了servletAPI(这使得测试要依赖于容器)。

一个第三方扩展—Struts TestCase—提供了一套Struts1的模拟对象(来进行测试)。

总结了一下Struts1和Struts2的区别随便散分解决方案

总结了一下Struts1和Struts2的区别随便散分解决方案

总结了一下Struts1和Struts2的区别随便散分解决方案总结了一下Struts1和Struts2的区别,随便散分大家都知道Struts1是一个老的成熟的Java Web开发框架,Struts2其实是一个老的成熟的框架(2006产生,近6年了)。

说区别之前先说一下struts1的缺点,也就是为什么要开发struts2来代替1呢,一 Struts1的缺点(1) 鸡肋的AactionForm;(2) 耦合性太强,导致单元测试困难;1:在现代企业软件开发中,分层和解耦是两个必须考虑的要素,经典的软件分层结构如图:表现层业务逻辑层数据访问层其中,数据访问层实现对数据库操作的封装,以隔离具体业务和数据库之间的联系;而业务逻辑层实现对业务逻辑的封装,隔离用户操作的界面和具体业务逻辑;表现层即用户界面层,提供用户操作接口。

这种分层封装的好处是分化了复杂的系统,同时也提高了系统的可维护性,使得开发过程中的分工协作更加方便快捷,采用这种层次结构,上层应该只依赖于它的下层结构,而不应该跨层依赖;同时,下层不应该依赖于它的上层结构,也就是说,业务逻辑层和数据访问层绝对不要依赖于表现层。

也业务逻辑层和数据库访问层的代码中,不要出现调用表现层的代码的情况。

遵循这个原则将简化在相同的基础上替换表现层的代价,也使得表现层的修改所带来的连锁反应尽可能小。

Struts 是属于表现层的技术,在Struts中,为了接受表单的数据,我们必须编写一个从Struts 的ActionForm类继承的类,否则你就只能从HttpServletRequest中提取数据了,然而,不使用ActionForm,意味着你需要自己对表单数据做初始化,以及自己编写代码对表单数据进行验证。

使用从ActionForm继承的类,如果更换了Web框架,这个类也将会被废弃。

ActionForm 中的数据往往需要传递给业务逻辑层和数据访问层进行处理,为了避免业务逻辑层和数据访问层依赖于Struts,通常我们会编写一个和ActionForm类具有相同属性的普通JavaBean类,考虑到程序中还会存在着PO(持久化对象)和JavaBean对象之间的数据复制,将使我们不厌其烦的来回复制大量的表单数据。

Struts2各分类流程、与Struts1区别

Struts2各分类流程、与Struts1区别

Struts2各分类流程、与Struts1区别1、类型转换下面就类型转换的一些基本内容和相关的流程进行分析1。

构建项目这个也不用多说,大家都知道,我学习STRUTS2相关的项目文件都放在一个工作区下(workspace),这样便于管理,同时我觉得很好的一点就是能够创建一个公用的用户库,这样创建一个项目时可以导入这个用户库即可(目前需要用到的几个JAR包分别是struts-core.jar,ognl.jar,xwork.jar,freemarker.jar,common-logging.jar,创建一个用户库,将他们加入即可,以后每次项目中导入该用户库即可,这样比较方便2。

编写web.xml文件<?xml version="1.0" encoding="UTF-8"?><web-app version="2.4" xmlns="/xml/ns/j2ee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/j2ee/xml/ns/j2ee/web-app_2_4.xsd"><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping></web-app>3,编写JSP页面input.jsp<s:form action="PointConverter" method="post"><s:textfield name="point" label="point"/><s:textfield name="age" label="age" /><s:textfield name="username" label="username" /><s:textfield name="date" label="birthday" /><s:submit label="submit" /></s:form>这里使用了STRUTS2的标签库,故需要在JSP页面中指定<%@ taglib prefix="s" uri="/struts-tags" %>页面中主要是提示用户输入各个值,其中Point点需要用户用逗号隔开两个坐标值3。

Struts2_01 Struts2简介_使用Struts2_参数传递_资费列表

Struts2_01 Struts2简介_使用Struts2_参数传递_资费列表

1. Struts2简介1.1. 什么是Struts21.1.1. Struts2的概念Struts2是轻量级的MVC框架,它主要解决了请求分发的问题,重心在于控制层和表现层。

轻量级,指的是Struts2具有较低的侵入性,就是它对我们业务代码的依赖程度很低,简单来说,在使用Struts2框架时,我们的业务代码中基本上不需要import 它的包。

Struts2实现了MVC,满足了MVC设计思想。

在我们使用Struts2做开发的时候,就相当于使用了MVC,这是Struts2自动帮助我们实现的,是默认的、隐含的,我们不需要再写特别的代码来实现MVC了。

作为一个框架,Struts2提供了一系列的API,我们可以使用它们来简化代码的编写,从而提升开发效率。

这些API复用程度很高,对业务代码的依赖性也很小,甚至很多是Struts2自动调用的,因此在很大程度上,我们的开发变得可以复用。

Struts2解决请求分发的问题,我们会在后面为什么使用Struts2中讲解。

重心在控制层和表现层,是纵观整个Struts2理论课程来看的,从中我们会体会到这一点,随着大家对Struts2的逐步了解,届时我们再回顾这一点。

1.1.2. 什么是MVCMVC是代码的分层思想,是软件设计领域经典的设计模式。

它根据代码功能的不同,将一个软件的代码分为3部分,即模型、视图、控制器,这3部分代码的含义和功能如下。

1、M-Model 模型模型(Model)的职责是负责业务逻辑。

包含两层:业务数据和业务处理逻辑。

比如实体类、DAO、Service都属于模型层。

2、V-View 视图视图(View)的职责是负责显示界面和用户交互(收集用户信息)。

属于视图的组件是不包含业务逻辑和控制逻辑的JSP。

3、C-Controller 控制器控制器是模型层M和视图层V之间的桥梁,用于控制流程。

比如:在Servlet 项目中的单一控制器ActionServlet。

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

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

Struts1和Struts2的区别和对比(完整版)Struts2其实并不是一个陌生的Web框架,Struts2是以Webwork的设计思想为核心,吸收了Struts1的优点,因此,可以认为Struts2是Struts1和Webwork结合的产物。

简单来说二者的区别是:一个是Stuts1 ,一个是Stuts2,这是最大的区别,技术方面,Stuts1有个核心控制器,但是只提供了一个接口,也就是execute,还要配置actionform之类的,很麻烦,所以依赖性比较强;而Stuts2是针对拦截器开发的,也就是所谓的AOP思想,可以配置多个action,用起来比较方便,但是因为请求之前的拦截器有一些注入的操作,速度相对Stuts1来说慢一点。

一、MVC简介Struts2是一个兼容Struts1和WebWork的MVC框架,既然,提到了MVC框架,就不得不对MVC框架做一个简单介绍,仅限于简单介绍,如果,想了解更多的MVC的知识可以查看相关的文档,或者找一本Struts1的书籍,相信上面关于MVC的篇幅不会很少。

言归正传,其实,Java目前出现的这些框架而言,其最终目的都是为了接触耦合,不论是Spring、Hibernate或MVC框架,目的都是为了接触耦合增加复用。

MVC接触的是View和Model间的耦合。

MVC包含三个基础部分:Model、View和Controller,这三个部分以最小的耦合协同工作,以增加程序的可扩展性和可维护性。

各个部分的实现技术可以总结如下:1)Model:JavaBean、EJB的EntityBean2)View:JSP、Struts的TagLib3)Controller:Struts的ActionServlet、Action概括起来MVC的优点主要有一下方面:1)多个视图可以对应一个模型。

按MVC设计模式,一个模型对应多个视图,可以减少代码的复制及代码的维护量,一旦模型发生改变,也易于维护2)模型返回的数据与显示逻辑分离。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
如果开发者依然怀念Struts 1 ActionForm的模式,Struts 2提供了ModelDriven模式,可以让开发者使用单独的Model对象来封装用户请求参数,
但该Model对象无需继承任何Struts 2基类,是一个POJO,从而降低了代码污染。
6 表达式语言方面的对比:Struts 1整合了JSTL,因此可以使用JSTL表达式语言。这种表达式语言有基本对象图遍历,但在对集合和索引属性的支持上则功能不强;
1 在Action实现类方面的对比:Struts 1要求Action类继承一个抽象基类;Struts 1的一个具体问题是使用抽象类编程而不是接口。
Struts 2 Action类可以实现一个Action接口,也可以实现其他接口,使可选和定制的服务成为可能。
Struts 2提供一个ActionSupport基类去实现常用的接口。即使Action接口不是必须实现的,只有一个包含execute方法的POJO类都可以用作Struts 2的Action。
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)为每一个Action创建不同的生命周期。开发者可以根据需要创建相应堆栈,从而和不同的Action一起使用。
从而可以脱离Web容器测试Struts 1的Action类。Struts 2 Action可以通过初始化、设置属性、调用方法来测试。
5 封装请求参数的对比:Struts 1使用ActionForm对象封装用户的请求参数,所有的ActionForm必须继承一个基类:ActionForm。
普通的JavaBean不能用作ActionForm,因此,开发者必须创建大量的ActionForm类封装用户请求参数。
简化:
1.Struts1要求Actio类继承一个抽象基类
Struts2可以实现一个Action接口,也可以实现其它接口
2.struts1是单例模式并且必须是线程安全的
Struts没有线程安全问题
3.Struts1依赖Servlet API (Struts1运用拦截器机制Struts2运用机制是控制其机制)
Struts 2可以使用JSTL,但它整合了一种更强大和灵活的表达式语言:OGNL(Object Graph Notation Language),因此,Struts 2下的表达式语言功能更加强大。
7 绑定值到视图的对比:Struts 1使用标准JSP机制把对象绑定到视图页面;Struts 2使用“ValueStack”技术,使标签库能够访问值,而不需要把对象和视图页面绑定在一起。
当然,如果Action需要直接访问HttpServletRequest和HttpServletResponse参数,Struts 2 Action仍然可以访问它们。
但是,大部分时候,Action都无需直接访问HttpServetRequest和HttpServletResponse,从而给开发者更多灵活的选择。
Struts2不再依赖Servlet API 用户请求参数
Struts2使用Action属性封装用户请求属性
5.Struts1整合了JSTL标签
Struts2整合OGNL标签
2 线程模式方面的对比:Struts 1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。
单例策略限制了Struts 1 Action能做的事,并且要在开发时特别小心。Action资源必须是线程安全的或同步的;
Struts 2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。
4 可测性方面的对比:测试Struts 1 Action的一个主要问题是execute方法依赖于Servlet API,这使得Action的测试要依赖于Web容器。
为了脱离Web容器测试Struts 1的Action,必须借助于第三方扩展:Struts TestCase,
该扩展下包含了系列的Mock对象(模拟了HttpServetRequest和HttpServletResponse对象),
3 Servlet依赖方面的对比:Struts 1 Action依赖于Servlet API,因为Struts 1 Action的execute方法中有HttpServletRequest和HttpServletResponse方法。
Struts 2 Action不再依赖于Servlet API,从而允许Action脱离Web容器运行,从而降低了测试Action的难度。
虽然Struts 1提供了动态ActionForm来简化ActionForm的开发,但依然需要在配置文件中定义ActionForm;
Struts 2直接使用Action属性来封装用户请求属性,避免了开发者需要大量开发ActionForm类的烦琐,实际上,这些属性还可以是包含子属性的Rich对象类型。
相关文档
最新文档