`
wu_quanyin
  • 浏览: 208270 次
  • 性别: Icon_minigender_1
  • 来自: 福建省
社区版块
存档分类
最新评论

Struts与Spring MVC的比较

    博客分类:
  • MVC
阅读更多

前段时间与一名同事一起讨论起了spring mvc与struts,今天查看了相应的资料,,对其作了总结:

 

一,Struts2 

 1,每次请求(request)都会实例化一个控制类(Action),因为Model存在与Action中,即action是有状态的,所以每次请求都要实例化,而且struts2的设计者认为在强大的垃圾收集器下,用完就扔,并不会影响性能问题,而且还可以保证线程的安全问题.

 

2,自从struts2之后,里面的设计除了action之外,大部分功能都围绕着拦截器设计,如果称我们平常的逻辑为横性思维的话,拦截器提供了纵向思维扩展,在我们执行action时,可以任意提供其他的应用,有点像aop的味道....

 

3,至于struts2提供了很丰富的界面功能,,这点我觉的没必要比较,因为在大多数应用开发中,,大多数人在界面上都运用其他的第三方如jstl或者extjs等等...这个不作优势比较

 

4,稍微看了下源码,使用了代理(ActionProxy)以及反射机制进行(dispatch),有些人说这样的代理是最损耗性能,,,如上面的设计者所说每次都创建一个实例没事,更何况这个代理呢,,,在java企业应用时,大部分可以就架构而去性能..

 

二,spring mvc

 

1,也有提供拦截器,,但是提供的并没有sturts2完全以及强大

 

2,spring提供了annotation的注释,使我们更少的去配置xml,而且灵活度非常强,使开发起来更加便利

 

3,spring 提供的handleAdapter,可使servlet或者其他自己实现的接口替换进来,相当灵活

 

4,spring提供的mapping,action,view(jsp,velocity等),根据需要可以实现最大限度的灵活性

 

结:本人认为,综合了上述的内容,,

一个团队中决定使用哪种框架开发,应该取决于团队对某种框架的了解程度,,达到更高效的开发才最合适,,没有最好的框架,只有最适合的框架...

-----------------------------------------------------------------------------------------------------------

综上只是本人作的一些比较,,,如有错误可以提出指正.....

 

 

分享到:
评论
27 楼 george 2011-01-18  
我遇到的程序员,对Java注解根本就不熟悉,比如
@Results({@Result(name = "toInfoList", location = "info-list.action?viewType=Common", type = "redirectAction")})
这个注解,他会给你在
@Results({@Result(name = "toInfoList", location = "info-list.action?viewType=Common", type = "redirectAction"),})
最后加一个逗号,这样在MyEclipse里可以编译通过,但是在NetBeans里编译的时候,就会提示错误。

Spring 3 MVC大量使用注解(如:@RequestMapping(value="/account")/@RequestMapping(method=RequestMethod.GET)/@RequestMapping(method=RequestMethod.PUT) / @RequestMapping(value="{id}", method=RequestMethod.GET) ......)

稍有差错,在MyEclipse里根本就发现不了,只有在NetBeans里编译时才能被觉察到,最关键的是,中国的Java程序员,大部分人都使用Eclipse IDE,对NetBeans几乎都是嗤之以鼻,
这样的话,除非你自己对自己编程要求极其苛刻,否则很容易出现错误,并且在编程阶段也发现不了。
26 楼 wu_quanyin 2011-01-18  
george 写道
lzmhehe 写道
z276356445t 写道
Struts2的零配置也是Struts2的一大亮点,只是用Struts2零配置的人不太多而已.

springmvc也可以达到

关键springmvc的性能比struts2的好

我没发现Spring 3 MVC可以做到零配置,Spring 3 MVC中,每个控制器类的每个方法,都必须使用注解写上此控制器所对应的URL,并且需要在方法内指定本方法所对应的视图文件(jsp.....)的路径,这本身就是一种配置,而且这种注解配置,是分散在各个类里面的,并不集中,如果你想修改一个URL,你必须找到其所对应的控制器类,修改其注解,最关键的是,因为Spring 3 MVC没有使用“约定大于配置”的理念,控制器类和视图文件的路径是可以随便放的,如果一个里的开发人员,对包路径的命名不规范,对视图文件的存放也懒惰省事,随处堆放,这样你如果想找一个URL所对应的控制器类和视图文件,是极其困难的,比如:
URL是:http://www.renren.com/app/friends/fid/6986
那么,这个URL所对应的视图文件和控制器类在哪里,你能看出来么?

如果你使用Struts2约定大于配置(struts2-convention-plugin-2-2-1.jar插件)的开发模式,上面的URL是这样:http://www.renren.com/app/friends.action?fid=6986

你可以直接找到action类和jsp页面:
Action类路径:StrutsAction起始路径.app.FriendsAction.java
jsp页面路径:视图起始文件夹/app/friends.jsp

这样不是一目了然么?

如果你说Spring 3 MVC 对REST URL支持得天衣无缝,对搜索引擎友好,
那么,如果我的应用是局域网应用,根本就不发布到互联网上,所以无所谓搜索引擎优化不优化。

Spring 3 MVC的性能可能是一个优势。

我最不喜欢Spring 3 MVC的地方,是它不能做到“约定大于配置”,给开发人员的自由度太高,如果遇上一个懒惰的程序员,会把整个项目搞得乌七八糟,文件一个放在昆仑山,另一个放在海南岛,让整个项目根本就无法被维护,很难控制。




在我认为上,配置只是一件小事,特别是annotation的配置,,那种一点好处都没有,反璞归真的感觉,也像楼上说的很难查找,,,重点是其性能优些,而且在controller,handle mapping,还有view上,各个模块上的扩展都很强,,况且在ssh上,在已经使用spring的基础上,何必再引进struts....
25 楼 george 2011-01-18  
lzmhehe 写道
z276356445t 写道
Struts2的零配置也是Struts2的一大亮点,只是用Struts2零配置的人不太多而已.

springmvc也可以达到

关键springmvc的性能比struts2的好

我没发现Spring 3 MVC可以做到零配置,Spring 3 MVC中,每个控制器类的每个方法,都必须使用注解写上此控制器所对应的URL,并且需要在方法内指定本方法所对应的视图文件(jsp.....)的路径,这本身就是一种配置,而且这种注解配置,是分散在各个类里面的,并不集中,如果你想修改一个URL,你必须找到其所对应的控制器类,修改其注解,最关键的是,因为Spring 3 MVC没有使用“约定大于配置”的理念,控制器类和视图文件的路径是可以随便放的,如果一个懒惰的开发人员,对包路径的命名不规范,对视图文件的存放也懒惰省事,随处堆放,这样你如果想找一个URL所对应的控制器类和视图文件,是极其困难的,比如:
URL是:http://www.renren.com/app/friends/fid/6986
那么,这个URL所对应的视图文件和控制器类在哪里,你能看出来么?

如果你使用Struts2约定大于配置(struts2-convention-plugin-2-2-1.jar插件)的开发模式,上面的URL是这样:http://www.renren.com/app/friends.action?fid=6986

你可以直接找到action类和jsp页面:
Action类路径:StrutsAction起始路径.app.FriendsAction.java
jsp页面路径:视图起始文件夹/app/friends.jsp

这样不是一目了然么?

如果你说Spring 3 MVC 对REST URL支持得天衣无缝,对搜索引擎友好,
那么,如果我的应用是局域网应用,根本就不发布到互联网上,所以无所谓搜索引擎优化不优化。

Spring 3 MVC的性能可能是一个优势。

我最不喜欢Spring 3 MVC的地方,是它不能做到“约定大于配置”,给开发人员的自由度太高,如果遇上一个懒惰的程序员,会把整个项目搞得乌七八糟,文件一个放在昆仑山,另一个放在海南岛,让整个项目根本就无法被维护,很难控制,这是一个致命的弱点。

我遇到的程序员,99%都是写代码非常邋遢,文件存放位置和类命名,都是邋遢到一定程度,比如像Spring 3 MVC的一个控制器类,他能给你这样命名和存放:
shiyan.zheshishiyan.kongzhiqi.hi123.java

如果一个项目组中,99%的人是这种习惯,请问作为项目负责人,你如何在以后维护这个项目?
--------------------------------------------------------------------------
而如果使用Struts2的“约定大于配置”模式,起码项目架构师能够硬性规定Action类的起始包路径和jsp页的存放文件夹路径,如果你的命名不规范,存放路径不在指定的包下,不和视图文件对应,那么你做的模块根本就运行不起来,这样强制的硬性约束,逼得那些懒惰的程序员把 haha.okla.chenggong.java
这样的习惯改掉


24 楼 george 2011-01-18  
george 写道
一直在使用struts2。
这个帖子从第一页看到最后,也没有看到Spring 3 mvc有哪些决定性优势。
至于REST式的URL,我想问的是:它有什么优势?
如果你说“对搜索引擎友好”,那么,如果我的项目是内网使用,根本不会发布到互联网上,REST URL对搜索引擎友好的优点,还有什么意义?

spring mvc需要对每个方法,使用注解定义方法所对应的URL,也需要在方法中指定URL所绑定的视图文件路径,这些在struts2中都可以使用struts2-convention-plugin-2-2-1.jar插件,以“约定大于配置”的方式来绑定,不需要额外的xml配置,也不需要注解来“隐形配置”【当然,如果你有复杂的跳转需求,你也可以在action类中,使用@Results({@Result(name = "toInfoList", location = "info-list.action?viewType=Common", type = "redirectAction")})这样的注解,定义action的跳转url】,大大节省了时间,而且强制约束了视图文件和action类的路径,使得视图文件和action类的路径更加集中、命名更加规范规范。

但是Spring 3 MVC,除非你自己强力约束自己,否则视图文件可以存放在文件夹内的任何层次内,这样就会给开发者“杂乱无章地存放试图文件”提供温床。

而且,Spring 3 MVC 控制器的方法参数,既可以是和Url参数对应的参数,也可以是HttpServletRequest类的对象request,还可以是实体类的对象,还要考虑同一个URL,如果method=RequestMethod.GET会对应一个方法,如果method=RequestMethod.PUT,又对应另一个方法,还要考虑方法的@RequestMapping注解内,有没有使用类似“params = "viewType=showUri“这样的参数定义,URL有没有传递这个参数过来,如果传递了会映射到这个方法上,如果没有传递则不能映射到这个方法上,诸如此类,总体感觉就是:“Spring 3 MVC”杂乱无章,给开发者的自由度太大,容易让懒惰的程序员把程序搞得乌七八糟,当然,如果是一个写程序非常规范的程序员,严格约束自己的开发风格,命名规范上严格约束自己,这样的程序员来使用Spring 3 MVC,也能做到“井然有序”,但毕竟Spring 3 MVC给了开发者太多的自由度,为懒惰的程序员提供了创造“杂乱无章的程序”的温床。

批评了Spring 3 mvc之后,称赞一下它比较好的地方,对json和xml的支持比较好,这样,使用一些JavaScript树的时候,树的数据源就不用使用Servlet来提供了。


我觉得Spring 3 MVC如果不采用“约定大于配置”的方式,使用“类路径 + 方法名” 对应 “约定的URL” ,对应“约定路径的视图文件”这种方式的话,对于struts2,它是没有什么优势的。

23 楼 shijie_262 2011-01-18  
STRUTS2 用的比较多 的确很方便 性能方面没有考量太多
最近想尝试下SPRING3 的 MVC~~
22 楼 lzmhehe 2011-01-18  
z276356445t 写道
Struts2的零配置也是Struts2的一大亮点,只是用Struts2零配置的人不太多而已.

springmvc也可以达到

关键springmvc的性能比struts2的好
21 楼 z276356445t 2011-01-16  
Struts2的零配置也是Struts2的一大亮点,只是用Struts2零配置的人不太多而已.
20 楼 wu_quanyin 2011-01-14  
finallygo 写道
chrisx 写道
关于线程安全问题,不管是哪种MVC框架,与Spring集成之后,都得配置成非单例模式加载,即scope="prototype",这样即可保证线程安全,每次必实例化

struts1中的action是线程安全的,不必设置非单例模式,而且struts2不是支持通配符来配置文件吗?这样也可以启动减少配置文件的目的


spring里面的prototype模式,不也是一样。。。
19 楼 waitingmyself 2011-01-14  
finallygo 写道
chrisx 写道
关于线程安全问题,不管是哪种MVC框架,与Spring集成之后,都得配置成非单例模式加载,即scope="prototype",这样即可保证线程安全,每次必实例化

struts1中的action是线程安全的,不必设置非单例模式,而且struts2不是支持通配符来配置文件吗?这样也可以启动减少配置文件的目的

struts2的action是线程安全的 因为每个请求都会创建一个实例
18 楼 wu_quanyin 2011-01-14  
finallygo 写道
chrisx 写道
关于线程安全问题,不管是哪种MVC框架,与Spring集成之后,都得配置成非单例模式加载,即scope="prototype",这样即可保证线程安全,每次必实例化

struts1中的action是线程安全的,不必设置非单例模式,而且struts2不是支持通配符来配置文件吗?这样也可以启动减少配置文件的目的


最近好好研究了一下spring mvc,感觉spring更好一些,你所说的线程安全,或是通配符,,spring中都有,而且还提高了很强的扩展性,不管是mapping,或是controller还有view都很好用,,,,所以在以后的使用中,可能会去掉struts而改用spring,,,,,
17 楼 finallygo 2011-01-14  
chrisx 写道
关于线程安全问题,不管是哪种MVC框架,与Spring集成之后,都得配置成非单例模式加载,即scope="prototype",这样即可保证线程安全,每次必实例化

struts1中的action是线程安全的,不必设置非单例模式,而且struts2不是支持通配符来配置文件吗?这样也可以启动减少配置文件的目的
16 楼 wu_quanyin 2011-01-14  
kongruxi 写道
感觉上spring MVC比struts2更MVC

这个观点,不赞同,,,,
因为spring mvc依赖于ioc实现的,,struts2才是真正意义上的mvc
15 楼 kongruxi 2011-01-14  
感觉上spring MVC比struts2更MVC
14 楼 tiaccp 2011-01-07  
  基于注解的spring mvc我觉得很不错,用的很灵活,xml配置相对简单点,原理也是比较清晰的,呵呵.struts玩了段时间感觉还是比较好的,只是项目需要用到spring mvc,现在慢慢的struts2的东西快忘了。。。
13 楼 arong 2010-12-31  
有没有人在正式项目中用过这样的组合:EJB3+Struts2+[easyUI]?
12 楼 skzr.org 2010-12-26  
正准备全面使用Spring:
HTML+JSP+MVC+JDBC
看好spring mvc的速度+spring生态环境的欣欣向荣
Spring生态:从安全到各种服务集成具有天生的优势
MVC测试:
tomcat maxThread=10;使用ab -n 10000 -c 20 测试一个helloworld control!
spring3 mvc访问jsp速度高达5、6K/s
struts2(关闭log,关闭开发模式) mvc最高还达不到2K/s
11 楼 chrisx 2010-06-21  
关于线程安全问题,不管是哪种MVC框架,与Spring集成之后,都得配置成非单例模式加载,即scope="prototype",这样即可保证线程安全,每次必实例化
10 楼 chrisx 2010-06-21  
在公司或之前个人做开发一直用Struts2,之后学过一点SpringMVC。
总体感觉,Struts2就是框架帮你做了很多事情,你只需要简单的配置,配置和编码简洁明了,很喜欢。
SpringMVC了解不深不敢说,与Spring自身产品集成简便。更主要一点正如楼主所说,注解是一个亮点,繁琐的配置文件会加大开发量。
9 楼 s-s-h 2010-06-19  
Cindy_Lee 写道
一直用spring mvc 想学学struts2 不过一直没时间

我正好相反
8 楼 slaser 2010-06-19  
SpringMVC其实更像struts1的后继。

相关推荐

    struts1原理,struts2原理,spring mvc原理,struts1和struts2,struts和spring mvc

    **Struts2与Spring MVC比较:** 1. **灵活性**:Spring MVC允许更多的自定义,如自定义拦截器、视图解析器,而Struts2的扩展性相对弱些。 2. **依赖注入**:Spring MVC是Spring框架的一部分,天然支持DI,而Struts2...

    spring webmvc struts 2.5 很难找的依赖包

    spring webmvc struts 2.5 spring webmvc struts 2.5 spring webmvc struts 2.5 spring webmvc struts 2.5 spring webmvc struts 2.5 spring webmvc struts 2.5 spring webmvc struts 2.5 spring webmvc struts 2.5 ...

    struts VS spring mvc

    ### Struts 与 Spring MVC 的对比分析 #### Struts 概览 **Struts** 是一个基于 **MVC(Model-View-Controller)** 设计模式的开源框架,由 Apache 软件基金会维护,主要开发者为 Craig R. McClanahan。作为 Java ...

    Struts VS Spring两种MVC框架比较

    ### Struts与Spring:两种MVC框架的比较 在Java Web开发领域中,MVC(Model-View-Controller)架构模式被广泛应用于构建灵活、可维护的Web应用程序。本文将对比分析Struts与Spring这两种流行的MVC框架,帮助开发者...

    Struts和Spring两种MVC框架究竟有什么不同呢?

    Spring MVC作为其Web层的一部分,与Struts相比,更加轻量级和灵活。Spring MVC通过DispatcherServlet作为入口点,处理HTTP请求,并通过配置或注解定义控制器(@Controller)。模型数据通常通过模型对象(Model或...

    Spring MVC 教程快速入门 深入分析

    相较于Struts2,Spring MVC避免了一些可能导致性能下降的特性,如值栈、OGNL表达式等。 二、Spring MVC核心类与接口:Spring MVC架构中包含许多核心组件,如DispatcherServlet、HandlerMapping、Controller、...

    struts和spring的MVC模式的比较

    Struts和Spring都是Java开发中常用的MVC框架,它们各自有着独特的特性和优势。Struts作为早期的王者,被广泛应用于各种项目,而Spring则以其全面的特性集和灵活的扩展性逐渐崭露头角。 Struts框架的核心是...

    spring-webmvc-struts.jar

    spring-webmvc-struts.jar对Struts和Spring整合时需要用到的包

    精通Struts:基于MVC的JavaWeb设计与开发(孙卫琴)

    此外,还会讲解Struts与Spring、Hibernate等其他流行框架的整合,形成强大的企业级应用解决方案。 在实际开发中,书中可能提供了"helloapp.rar"这个示例项目,用于演示基本的Struts应用搭建和运行过程。...

    struts2、 spring4、 spring mvc、 hibernate4、 mybatis的三大框架(三套)

    例如,Spring MVC与Hibernate4的组合适合大型企业级应用,而Struts2和MyBatis则可能更适合中小企业或初学者,因为它们的学习曲线相对较平缓。总之,理解并掌握这些框架的原理和使用方法,对于提升Java Web开发能力至...

    spring mvc 的入门级资料

    1. 轻松学习:Spring MVC 的学习难度小于 Struts2 2. 高性能:Spring MVC 很容易就可以写出性能优秀的程序 3. 灵活性高:Spring MVC 的灵活性非常高,可以满足不同的需求 Spring MVC 是一个强大、灵活、Easy-to-use...

    spring.jar spring-webmvc-struts.jar spring-webmvc.jar

    "spring-webmvc-struts"可能指的是Spring与Struts的集成包,Struts是另一个流行的Java Web MVC框架。这个库可能包含了一些桥接代码,帮助开发者将Spring的IoC(Inversion of Control,控制反转)和AOP功能与Struts的...

    Struts,Spring登陆

    在Web开发中,Spring MVC作为Spring的一部分,提供了与Struts类似的MVC功能,但更加轻量级和灵活。 在"Struts,Spring登陆"的例子中,我们可能会看到以下几个关键知识点: 1. **整合配置**:首先,我们需要在Struts...

    对比分析Struts和Spring两种MVC框架参照.pdf

    与Struts相比,Spring MVC更注重解耦,允许开发者自由选择视图技术。模型组件通过Spring的IoC容器管理,而控制器则由DispatcherServlet负责调度。此外,Spring MVC还支持RESTful风格的URL映射,使得API设计更加直观...

    STRUTS+SPRING

    5. 整合Struts 2与Spring:通过Spring插件(struts2-spring-plugin)实现Struts 2 Action的依赖注入,或者在Struts 2中使用Spring的Action代理。 标签 "源码" 和 "工具" 暗示我们需要关注Struts和Spring的源代码...

    struts2 spring hibernate框架技术与项目实战 光盘源码上

    Spring还提供了Spring MVC模块,可以与Struts2一起使用,或者单独作为Web层的框架。此外,Spring的事务管理功能使得在多层架构中处理数据库操作变得简单。 Hibernate是Java领域的一款对象关系映射(ORM)工具,它将...

    struts和spring的三种整合方法

    这种方式最大的优势在于,Spring MVC与Spring框架无缝集成,无需额外的整合工作,同时提供了更丰富的特性,如数据绑定、视图解析等。 **具体步骤:** 1. **配置Spring MVC:** 在Spring配置文件中,配置...

    忘记struts2 & spring mvc,试用talent mvc

    - Talent MVC框架的介绍:包括其设计理念、目标用户群体、与Struts2和Spring MVC的对比。 - 框架安装和配置:指导如何将Talent MVC集成到现有项目中,包括Maven依赖的添加和基本的配置步骤。 - 控制器和路由:解释...

Global site tag (gtag.js) - Google Analytics