的区别有哪些 spring 和 struts2 MVC (人造鸡蛋和真鸡蛋的区别有哪些)

的区别有哪些 spring 和 struts2 MVC (人造鸡蛋和真鸡蛋的区别有哪些)

本文目录导航:

spring MVC 和 struts2 的区别有哪些?

Spring MVC 和 Struts2 都是 Java Web 框架,它们之间的区别在于:1. 加载机制不同:Spring MVC 的入口是 Servlet,而 Struts2 是 Filter。

2. 阻拦机制不同:Struts2 是类级别的阻拦,一个类对应一个 request 高低文,而 Spring MVC 是方法级别的阻拦,一个方法对应一个 request 高低文,同时跟一个 url 对应。

3. 设计理念不同:Struts2 愈加合乎 OOP 的编程思维,而 Spring MVC 则比拟审慎,在 Servlet 上裁减。

4. 开发效率和性能不同:Spring MVC 开发效率和性能高于 Struts2。

struts1 和 struts2的区别

struts1和struts2 是2个完全不同的框架,其实struts2外围就是 webwork框架struts1以ActionServlet作为外围管理器,由ActionServlet担任阻拦用户的一切恳求。

Struts 1框架有3个关键组成局部:Action、ActionForm和ActionForward对象。

ActionForm必定成功ActionForm的基类,设计上并不是真正的POJO。

struts2外围管理器是FilterDispatcher,Struts 2用于处置用户恳求的Action实例,并不是用户成功的业务管理器,而是Action代理——由于用户成功的业务管理器并没有与Servlet API耦合,显然无法处置用户恳求。

而Struts 2框架提供了系列阻拦器,该系列阻拦器担任将HttpServletRequest恳求中的恳求参数解析进去,传入到Action中,并回调Action的execute方法来处置用户恳求。

显然,上方的处置环节是典型的AOP(面向切面编程)处置方式。

框架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)形式启动改良。

WebWork名目是在2002年3月颁布的,它对Struts式框架启动了反派性改良,引进了不少新的思维、概念和性能,但和原Struts代码并不兼容。

WebWork是一个成熟的框架,经过了好几次严重的改良与颁布。

在2005年12月,WebWork与Struts Ti发表兼并。

与此同时,Struts Ti改名为Struts Action Framework 2.0,成为Struts真正的承袭者。

最后要留意的是,并不是说Struts或WebWork名目曾经中止开发了。

由于人们对这两个名目标兴味依然很高,而且也有很多开发者依然情愿经常使用它们,因此这两个名目还在继续开发中,继续修复Bug,改良性能和继续减少新性能。

二、 Action的区别关于有着丰盛的Struts1.x开发阅历的好友来说,都十分的清楚Action是整个Struts框架的外围内容,当然Struts2也不例外。

不过,Struts1.x与Struts2的Action模型很大的区别。

Struts2和Struts1.x的差异,最显著的 就是Struts2是一个pull-MVC架构。

这是什么意思呢?从开发者角度看,就是说须要显示给用户的数据可以间接从Action中失掉,而不像 Struts1.x那样,必定把相应的Bean存到Page、Request或许Session中才干失掉。

Struts1.x 必定承袭或许其子类,表复数据封装在FormBean中。

Struts 2毋庸承袭任何类型或成功任何接口,表复数据蕴含在Action中,经过Getter和Setter失掉(如上方的ActionForStruts2的代码示例)。

只管,无实践上Struts2的Action毋庸成功任何接口或许是承袭任何的类,但是,在实践编程环节中,为了愈加繁难的成功Action,大少数状况下都会承袭类,并且重载(Override)此类里的String execute()方法。

首先,从ActionForStruts2可以看出,前往的对象不是ActionForward,而是String。

假设你不青睐以字符串的方式出如今你的代码中,有个Helper接口Action可以以常量方式提供经常出现结果,如“success”、“none”、“error”、“input”和“login”。

另外,依照惯例,在Struts1.x中只要“execute”方法能调用Action, 但在Struts2中并非必要,任何申明为public String methodName() 方法,都能经过性能来调用Action。

最后,和Struts1.x最大的反派性的不同是,Struts2处置Action环节中调用的方法(“execute”方法)是不带参数的。

那如何失掉所须要的对象呢?答案是经常使用IoC(反转管理,Inversion of Control),也叫“依赖注入(Dependency Injection)”的形式(想更多地了解这方面消息请看Martin Fowler的文章)。

Spring框架使得这个形式盛行起来,但是Struts2的前身(WebWork)也同时运行上了这个形式。

三、 IoCIoC(Inversion of Control,以下译为管理反转),随着Java社区中轻量级容器(Lightweight Contianer)的推行而越来越为大家耳熟能详。

在此,无需再多费唇舌来解释“什么是管理反转”和“为什么须要管理反转”。

由于互联网上曾经有十分多的文章对诸如此类的疑问作了精彩而准确的回答。

读者可以去读一下Rod Johnson和Juergen Hoeller合著的《Expert one-on-one J2EE Development without EJB》或Martin Fowler所写的《Inversion of Control Containers and the Dependency Injection pattern》。

妇孺皆知,Struts2是以Webwork 2作为基础开展进去。

而在Webwork 2.2之前的Webwork版本,其自身有一套管理反转的成功,Webwork 2.2在Spring 框架的热火朝天开展的背景下,选择丢弃管理反转性能的开发,转由Spring成功。

值得一提的是,Spring确实是一个值得学习的框架,由于有越来越多的开源组件(如iBATIS等)都丢弃与Spring堆叠的性能的开发。

因此,Struts2介绍大家经过Spring成功管理反转。

为了更好地了解反转管理,上方来看一个例子,如何应用IoC在Action处置环节中可以访问到以后恳求HttpServerRequest对象。

在例子中,经常使用的依赖注入机制是接口注入。

就如其称号一样,接口注入须要的是曾经被成功了的接口。

这个接口蕴含了相应属性的setter,为Action提供值。

例子中经常使用了ServletRequestAware接口,如下:public interface ServletRequestAware {public void setServletRequest(HttpServletRequest request);}当承袭这个接口后,原本繁难的Action看起来有点复杂了,但是这时可以失掉HttpServerRequest对象来经常使用了。

public class IoCForStruts2 implements ServletRequestAware { private HttpServletRequest request; public void setServletRequest(HttpServletRequest request) { = request; } public String execute() throws Exception {// 可以开局经常使用request对象启动上班了return ; }}看起来如今这些属性是类级别的,并不是线程安保的,会发生疑问。

其真实Struts2里并没有疑问,由于每个恳求上来的时刻都会发生一个新的Action对象实例,它并没有和其余恳求共享一个对象,所以不须要思考线程安保疑问。

阻拦器 Interceptor(以下译为阻拦器),在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,启动阻拦而后在之前或之后参与某些操作。

阻拦是AOP的一种成功战略。

在Webwork的中文文档的解释为——阻拦器是灵活阻拦Action调用的对象。

它提供了一种机制可以使开发者定义在一个action口头的前后口头的代码,也可以在一个action口头前阻止其口头。

同时也提供了一种可以提取action中可重用的局部的方式。

Struts1.x的规范框架中不提供任何方式的阻拦器,虽一个名为SAIF的附加名目则成功了这样的性能,但它的实用的范畴还很有限。

阻拦器是Struts2的一个强有力的工具,有许多性能(feature)都是构建于它之上,如国内化、转换器,校验等。

谈到阻拦器,还有一个盛行的词——阻拦器链(Interceptor Chain,在Struts2中称为阻拦器栈Interceptor Stack)。

阻拦器链就是将阻拦器按必定的顺序结分解一条链。

在访问被阻拦的方法或字段时,阻拦器链中的阻拦器就会按其之前定义的顺序被调用。

Struts 2的阻拦器成功相对比拟繁难。

当恳求抵达Struts2的ServletDispatcher时,Struts 2会查找性能文件,并依据其性能实例化相对的阻拦器对象,而后串成一个列表(list),最后逐一地调用列表中的阻拦器,Struts 2曾经提供丰盛多样性能完全的阻拦器成功。

读者可以到或包的检查关于自动的阻拦器与阻拦器链的性能。

作为“框架(framework)”,可裁减性是无法缺少的,由于世上没有放之四海而皆准的物品。

只管,Struts 2为咱们提供如此丰盛的阻拦器成功,但是这并不象征咱们失去创立自定义阻拦器的才干,恰好同样,在Struts 2自定义阻拦器是相当容易的一件事。

前面曾经简明引见了 Struts2的来源,并具体对比了Struts2和Struts1.x的差异,读者应该对Struts2的基础有所了解了——包括上层的框架概念和基础 的恳求流程,并了解Struts1.x和Struts2两者之间在Action方面的差异,Struts2增强了对阻拦器与IoC的允许,而在 Struts1.x中,这些个性是很难想象的。

同时,读者应该明确: Struts2是WebWork的更新,而不是Struts 1.x的更新。

只管Struts 2提供了与Struts1.x的兼容,但曾经不是Struts1.x的更新。

关于已有Struts1.x开发阅历的开发者而言,Struts1.x的开发 阅历关于Struts2并没有太大的协助;同样,关于曾经有WebWork开发阅历的开发者而言,WebWork的开发阅历对Struts2的开发将有很 好的自创意义。

你可能想看:
« 上一篇
下一篇 »

相关推荐

java中什么是冒泡,冒泡算法

2026年09月06日

27阅读

java中冒号,java双冒号

2026年09月06日

25阅读

java中的->,java中的是什么意思

2026年09月06日

24阅读

java中的super用法,Java中super的说明

2026年09月06日

27阅读

java中反射的应用,java中反射的应用场景

2026年09月06日

23阅读

java中开关的定义,Java关键字有哪些

2026年09月06日

25阅读