Struts2和Spring MVC的区别

概述:

Struts2框架中,Action类是其核心类,XxxAction被称作业务逻辑控制器,实现了对用户请求信息的处理。Struts2框架的引入,使用XxxAction作为控制层,将视图层和模型层相分离,真正实现了MVC开发模式,使得整个工程分成Model(持久层/业务层)、View、Controller三层,使得软件耦合度被降低。

SpringMVC和Struts2框架的功能相似,也是实现视图层和控制层的分离,使得软件耦合度降低。并且,SpringMVC 是Spring内置的Spring web框架,开发者可以在自己的项目中自由选择自己想要整合的Spring web框架,可以在Spring中整合Spring内置Spring web框架Spring MVC,也可以在Spring中整合第三方web框架如Struts2.

小结:Struts2和Spring MVC都是web框架,工程中引入它们的目的都是将视图层和控制层分离,使得代码进一步解耦。只不过这两个开源项目的开发者不同,所以工作机制上也会有稍许差别。Spring MVC是Spring项目的内置web框架,而Struts2则和Spring组织没有直接的关联,至于开发者自己做项目时应该选择Spring MVC还是应该选择Struts2,这就要依据开发者所负责的实际项目去选择了。(Spring不仅支持其内置web框架Spring MVC,它还支持三方web框架如Struts2,这就使得开发者的选择更加灵活)

区别:

1)Struts2和SpringMVC都是方法级别的拦截,一个方法对应一个request上下文。但是二者的实现方式不同:

SpringMVC使用注解@RequestMapping()来实现方法级别的拦截,一个方法对应一个request上下文。

  但是默认情况下Struts2是类级别的拦截,一个XxxAction类对应一个request 上下文,当一个request到来时,默认执行对应XxxAction类的execute()方法。如果 想要Struts2变成方法级别的拦截,即不同的请求对应于类中的不同方法,就需要在 struts2的配置文件struts.xml中使用<action>元素的method属性进行配置才可以实 现一个request对应于类中的一个方法,从而实现方法级别的拦截。

2)Struts2和springMVC的数据共享方式不同

struts2框架是类级别的拦截,每次来了请求就创建一个Action,然后调用setter getter方法把request中的数据注入。struts2实际上是通过setter getter方法与request打交道的。其类属性被所有方法共享,虽然方法之间也是独立的,但其所有Action变量是共享的,这不会影响程序运行,却给我们编码 读程序时带来麻烦。

spring3 mvc不同,spring3mvc是方法级别的拦截,拦截到方法后根据参数上的注解,把request数据注入进去。spring3mvc的方法之间基本上独立的,独享request response数据请求数据通过参数获取,处理结果通过ModelMap交回给框架。方法之间不共享变量。

3)Struts2和springMVC的拦截机制不同

Struts2中可以通过配置文件为XxxAction配置若干拦截器,通过这些拦截器实现权限 控制、request预处理(如检查request/修正request头或request参数数据)、response 修正(如修改response头和response数据)等操作。

struts有以自己的interceptor机制,spring mvc 用的是独立的AOP方式。

4)Struts2和springMVC的实现机制不同

spring mvc 的入口是servlet, 而struts是filter(这里要指出,filter和servlet是不同 的。可以认为filter是servlet的一种特殊,是一个servlet链)

5)使用Struts+Spring的方式进行开发时编写配置文件很麻烦,但是使用Spring MVC+Spring的方式进行开发就不用这么麻烦,直接使用Spring MVC中的注解可以省去编写配置文件的麻烦

我们用struts2时采用的传统的配置文件的方式,并没有使用传说中的0配置。spring3  mvc可以认为已经100%零配置了(除了配置spring mvc-servlet.xml外)。

6)由于Struts2需要针对每个request进行封装,把request,session等servlet生命周期的变量封装成一个一个Map,供给每个Action使用,并保证线程安全,所以在原则上,是比较耗费内存的。

7)SpringMVC集成了Ajax,使用非常方便,只需一个注解@ResponseBody就可以实现,然后直接返回响应文本即可,而Struts2拦截器集成了Ajax,在Action中处理时一般必须安装插件或者自己写代码集成进去,使用起来也相对不方便。

8)SpringMVC验证支持JSR303,处理起来相对更加灵活方便,而Struts2验证比较繁琐,感觉太烦乱。

9)Spring MVC和Spring是无缝的。从这个项目的管理和安全上也比Struts2高(当然Struts2也可以通过不同的目录结构和相关配置做到SpringMVC一样的效果,但是需要xml配置的地方不少)。

10) 设计思想上,Struts2更加符合OOP的编程思想, SpringMVC就比较谨慎,在servlet上扩展。

11)SpringMVC开发效率和性能高于Struts2。

12)Struts2和springMVC的更多不同之处,可以参见如下材料

http://blog.csdn.net/gstormspire/article/details/8239182

http://www.tuicool.com/articles/AneA3yr

时间: 2024-10-24 12:27:07

Struts2和Spring MVC的区别的相关文章

Struts2和Spring MVC 区别 今天面试被问到了

虽然说没有系统的学习过Spring MVC框架, 但是工作这么长时间, 基本上在WEB层使用的都是Spring MVC, 自己觉得Struts2也是一个不错的WEB层框架, 这两种框架至今自己还未有比较, 今天闲着没事干, 从网上找了一些资料, 再加上平时使用Spring MVC的感触来总结一下. Spring MVC PK Struts2 我们用struts2时采用的传统的配置文件的方式,并没有使用传说中的0配置.spring3 mvc可以认为已经100%零配置了(除了配置spring mvc

struts2和spring mvc,孰优孰劣?

最近我在将APDPlat升级到Java8,发现最新版本的struts2不支持Java8,同时由于之前有很多的同学希望我把APDPlat的struts2替换为spring mvc,所以我就决定试试看.本文我们看两个转换前后的例子: 1.下拉列表服务,此类比较简单,只涉及一个方法store: 使用struts2: @Scope("prototype") @Controller @Namespace("/dictionary") public class DicActio

struts2与spring mvc 的比较

1.传值: struts2通过set get来传值,而spring mvc 可以直接在方法里传值(String username,Model model)model也可以换成map来传值但不建义 model.addAttrubute("username",username),当然也可以直接写model.addAttribute(username),默认key是传值的值类string. model.addAttribute(new User()):key 就是User. 2.struts

Struts2 与 Spring MVC

1. Web MVC Web MVC简介 2. Struts2的工作原理 Struts2的工作原理 3. Spring MVC的工作原理 spring MVC原理 4. Spring MVC 与 Struts2 SpringMVC与Struts2的对比 Spring MVC和Struts2的比较 推荐使用 Spring MVC.

Spring、Spring Boot、Spring Frame、Spring MVC的区别

Spring框架就像一个厂商,其下有很多产品,如Spring Boot.Spring Frame.Spring Cloud等等. Spring Boot用于快速.方便.简单的搭建一个Spring项目.之所以说它快速.方便.简单,是因为Spring Boot融合看来很多第三方库,提供了配置这些库及本身的一些简单的方式,从而进行了简化,避免了我们自己对包的导入和繁琐的XML文件配置.我们来看下官方文档. 我们可以看到Spring内嵌了一些serverse等容器,通过Spring Boot的配置,可以

Struts2 和 spring mvc的 迭代标签常用属性对比

<s:iterator value="#users" var="u" status="st"> <c:forEach  items="${users}"  var="u" varStatus="st">

[学习笔记]spring mvc 与struts2比较

Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解实例详解(二) 在上一篇文章中我详细的介绍了如何搭建maven环境以及生成一个maven骨架的web项目,那么这章中我将讲述Spring MVC的流程结构,Spring MVC与Struts2的区别,以及例子中的一些配置文件的分析. 一.Spring MVC 3.0介绍 Spring MVC是一个典型的MVC框架,是Spring内置的Web框架,可以作为应用项目的展示层,继Spring 2.0对Spring

Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解实例详解(二)

在上一篇文章中我详细的介绍了如何搭建maven环境以及生成一个maven骨架的web项目,那么这章中我将讲述Spring MVC的流程结构,Spring MVC与Struts2的区别,以及例子中的一些配置文件的分析. 一.Spring MVC 3.0介绍 Spring MVC是一个典型的MVC框架,是Spring内置的Web框架,可以作为应用项目的展示层,继Spring 2.0对Spring MVC进行重大升级后,Spring 2.5又为Spring MVC引入了注解驱动功能,再到3.0时代,全

Spring MVC入门

1.选型 选型范围:Struts2.Spring MVC,其他的没精力研究. Spring MVC特点: 1.师出名门,受众广,与Spring兼容性好. 2.轻量,简单,易于使用,可以让开发人员将精力放到业务逻辑开发上. 3.高效,性能优秀. 4.功能强大:RESTful.数据验证.格式化.绑定机制.本地化.主题等 5.清晰的角色划分:控制器(controller).验证器(validator). 命令对象(command object).表单对象(form object).模型对象(model