论坛首页 Java企业应用论坛

Struts与Spring MVC的比较

浏览 17113 次
该帖已经被评为新手帖
作者 正文
   发表时间:2011-01-14  
finallygo 写道
chrisx 写道
关于线程安全问题,不管是哪种MVC框架,与Spring集成之后,都得配置成非单例模式加载,即scope="prototype",这样即可保证线程安全,每次必实例化

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


spring里面的prototype模式,不也是一样。。。
0 请登录后投票
   发表时间:2011-01-16  
Struts2的零配置也是Struts2的一大亮点,只是用Struts2零配置的人不太多而已.
0 请登录后投票
   发表时间:2011-01-18  
z276356445t 写道
Struts2的零配置也是Struts2的一大亮点,只是用Struts2零配置的人不太多而已.

springmvc也可以达到

关键springmvc的性能比struts2的好
0 请登录后投票
   发表时间:2011-01-18  
STRUTS2 用的比较多 的确很方便 性能方面没有考量太多
最近想尝试下SPRING3 的 MVC~~
0 请登录后投票
   发表时间:2011-01-18   最后修改: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,它是没有什么优势的。

0 请登录后投票
   发表时间:2011-01-18   最后修改: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
这样的习惯改掉


0 请登录后投票
   发表时间:2011-01-18   最后修改: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....
0 请登录后投票
   发表时间:2011-01-18   最后修改: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几乎都是嗤之以鼻,
这样的话,除非你自己对自己编程要求极其苛刻,否则很容易出现错误,并且在编程阶段也发现不了。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics