论坛首页 Java企业应用论坛

spring3mvc与struts2比较

浏览 162621 次
该帖已经被评为良好帖
作者 正文
   发表时间:2010-11-02  
我最近也在看springMVC 学习下
0 请登录后投票
   发表时间:2010-11-03  
wen66 写道
strut2和spring3的性能问题, 大家可以写个简单的例子, 然后用loadruner跑一下, 就知道性能的差别的, 这个就是属于谁用谁知道的东西.


我在项目里使用的是 struts2,至少用 visualvm 发现性能瓶颈绝不在 struts2,一般都是在 数据库io和其他网络io上。

而且,我目前的测试结果是,两台机器(16G内存,双路四核cpu,15000转硬盘,两年前的dell服务器),5个tomcat节点,1个nginx负载均衡,带有业务的用例很轻松就可以跑到 1万 多的 tps (业务用例要经过struts2 自定义拦截器,访问redis,访问 memcached,访问数据库,并提供只读事务)

0 请登录后投票
   发表时间:2010-11-03  
rustlingwind 写道
wen66 写道
strut2和spring3的性能问题, 大家可以写个简单的例子, 然后用loadruner跑一下, 就知道性能的差别的, 这个就是属于谁用谁知道的东西.


我在项目里使用的是 struts2,至少用 visualvm 发现性能瓶颈绝不在 struts2,一般都是在 数据库io和其他网络io上。

而且,我目前的测试结果是,两台机器(16G内存,双路四核cpu,15000转硬盘,两年前的dell服务器),5个tomcat节点,1个nginx负载均衡,带有业务的用例很轻松就可以跑到 1万 多的 tps (业务用例要经过struts2 自定义拦截器,访问redis,访问 memcached,访问数据库,并提供只读事务)


struts2默认的拦截器不用的全部要去掉,经我们测试是影响性能的,当然我们的并发是超高的,能看出区别。
0 请登录后投票
   发表时间:2010-11-03  
downpour 写道
slaser 写道

第一,没看出来spring的aop拦截限制了什么应用了,我的输入输出都在参数和返回值上,为什么还需要其他拦截,你能拿出什么实际的例子让spring mvc做起来很难受的么?另外,说起spring aop天然支持aop有什么错,spring aop的后面是aspectj,对于领域对象的注入和拦截也是可以靠aspectJ搞定的。
第二,难道Spring MVC执行层次不多,定制化不强?可插入url的解析,多种view的支持,Spring Webflow,Security集成被你无视了。
第三,不认为Struts2在技术上完胜,struts2走了和Spring MVC不同的路,这个才是关键,而我觉得它现在是个半成品。论优雅,可以去学习JSF.



拦截器拦截的内容仅仅限制于参数和返回值是一件令人头疼的事情,这就意味着你的拦截器代码不可避免的要和这些内容去打交道。也就是说,一旦我要在里面加一些特殊的逻辑,比如根据参数或者返回值中的某个字段进行逻辑判断,就会使得你的拦截器依赖于特定的切面而变得毫无意义。

	@RequestMapping(value="/whitelists")
	public String index(ModelMap map){
		Account account = accountManager.getByDigitId(SecurityContextHolder.get().getDigitId()) ;
		List<Group> groupList = groupManager.findAllGroup(account.getId()) ;
		map.put("account", account);
		map.put("groupList", groupList);
		return "/group/group-index" ;
	}
        //@ResponseBody ajax响应  
	@RequestMapping(value="/whitelist/{whiteListId}/del")
	@ResponseBody  
	public String delete(@PathVariable Integer whiteListId){
		whiteListManager.deleteWhiteList(whiteListId) ;
		return "success" ;
	}


在这其中我们可以看到:

map.put("account", account);
map.put("groupList", groupList);


这两句话纯粹就是多余的。一共5行code,有2行在为返回输出做准备。你还能厚着脸皮说SpringMVC解放了你的生产力?

在Struts2中,代码就会变成这样:

        Account account;
        List<Group> groupList;

	public String index(){
		account = accountManager.getByDigitId(SecurityContextHolder.get().getDigitId()) ;
		groupList = groupManager.findAllGroup(account.getId()) ;
		return "/group/group-index" ;
	}



你所需要关注的,只是你的业务逻辑调用,而无需关心返回到底是什么名称,更不用提什么显示调用map.put这种恶心的代码了。

再问,你能用你所谓Spring的AOP把map.put这两行code给省略了嘛?所有的返回的内容都是局部变量,你去拦截啊?无能为力了吧。

至于说到什么url解析,多view的支持,SpringMVC的支持也仅仅限于支持而已,这些所谓的支持,成熟的Web层框架全部都有。所谓的Annotation带来的配置简化,本身就是一个伪命题。@RequestMapping(value="/whitelist/{whiteListId}/del")这种看上去优雅的实现,其实带来的问题却是致命的。这一点我很早就已经指出过。你可以翻看我以前的帖子。

SpringMVC充其量也就是一个简单的Web层的Mapping工具,要谈到综合性的Web层解决方案,它还差得很远。Struts2本身的设计思想和实现是所有MVC框架中最先进的。它也有很多问题,但是至今为止我还没有找到足够的证据来说明它的问题。所以希望大家在抱怨的同时,仔细想想你的观点是否真的站得住脚。




看得出来您很喜欢 struts2了,可惜我就是不理解为啥 struts2 对 rest 的支持为啥总是这么差劲(struts2-rest-plugin),而且 struts2 的更新越来越慢,至少 rest-plugin 的 bug 一直没有修复,郁闷。
0 请登录后投票
   发表时间:2010-11-03  
icewubin 写道
rustlingwind 写道
wen66 写道
strut2和spring3的性能问题, 大家可以写个简单的例子, 然后用loadruner跑一下, 就知道性能的差别的, 这个就是属于谁用谁知道的东西.


我在项目里使用的是 struts2,至少用 visualvm 发现性能瓶颈绝不在 struts2,一般都是在 数据库io和其他网络io上。

而且,我目前的测试结果是,两台机器(16G内存,双路四核cpu,15000转硬盘,两年前的dell服务器),5个tomcat节点,1个nginx负载均衡,带有业务的用例很轻松就可以跑到 1万 多的 tps (业务用例要经过struts2 自定义拦截器,访问redis,访问 memcached,访问数据库,并提供只读事务)


struts2默认的拦截器不用的全部要去掉,经我们测试是影响性能的,当然我们的并发是超高的,能看出区别。


我想问一下,用ssh写的程序,1个应用服务器节点,每秒处理多少个请求才算是性能比较不错了?硬件上相对于目前大众化的服务器配置来说(16G内存,双路四核cpu,15000转硬盘),网络带宽不考虑。

我目前的项目要求 每秒要能够处理 24000 个并发请求(读取数据库的业务),我计划用1台server扛下来,但目前看来还差的远,唉。
0 请登录后投票
   发表时间:2010-11-04  
没创建Action把 ,是代理
0 请登录后投票
   发表时间:2010-11-04   最后修改:2010-11-04
rustlingwind 写道
icewubin 写道
rustlingwind 写道
wen66 写道
strut2和spring3的性能问题, 大家可以写个简单的例子, 然后用loadruner跑一下, 就知道性能的差别的, 这个就是属于谁用谁知道的东西.


我在项目里使用的是 struts2,至少用 visualvm 发现性能瓶颈绝不在 struts2,一般都是在 数据库io和其他网络io上。

而且,我目前的测试结果是,两台机器(16G内存,双路四核cpu,15000转硬盘,两年前的dell服务器),5个tomcat节点,1个nginx负载均衡,带有业务的用例很轻松就可以跑到 1万 多的 tps (业务用例要经过struts2 自定义拦截器,访问redis,访问 memcached,访问数据库,并提供只读事务)


struts2默认的拦截器不用的全部要去掉,经我们测试是影响性能的,当然我们的并发是超高的,能看出区别。


我想问一下,用ssh写的程序,1个应用服务器节点,每秒处理多少个请求才算是性能比较不错了?硬件上相对于目前大众化的服务器配置来说(16G内存,双路四核cpu,15000转硬盘),网络带宽不考虑。

我目前的项目要求 每秒要能够处理 24000 个并发请求(读取数据库的业务),我计划用1台server扛下来,但目前看来还差的远,唉。

你先不要考虑其他因素,你可以自己用纯servlet和struts2处理纯内存操作作性能对比,有点差距的。

一般认为Tomcat最高并发在300-400左右,综合经验。所以一台扛下24000个请求不可能的。

然后说数据库的问题,由于app这层可以很方便的扩展,而且app的机器往往可以很便宜,配置要求不高。数据库要支持24000个并发请求,就有点问题了,要么上缓存架构,要么数据库这一层做扩展。
0 请登录后投票
   发表时间:2010-11-04  
icewubin 写道
rustlingwind 写道
icewubin 写道
rustlingwind 写道
wen66 写道
strut2和spring3的性能问题, 大家可以写个简单的例子, 然后用loadruner跑一下, 就知道性能的差别的, 这个就是属于谁用谁知道的东西.


我在项目里使用的是 struts2,至少用 visualvm 发现性能瓶颈绝不在 struts2,一般都是在 数据库io和其他网络io上。

而且,我目前的测试结果是,两台机器(16G内存,双路四核cpu,15000转硬盘,两年前的dell服务器),5个tomcat节点,1个nginx负载均衡,带有业务的用例很轻松就可以跑到 1万 多的 tps (业务用例要经过struts2 自定义拦截器,访问redis,访问 memcached,访问数据库,并提供只读事务)


struts2默认的拦截器不用的全部要去掉,经我们测试是影响性能的,当然我们的并发是超高的,能看出区别。


我想问一下,用ssh写的程序,1个应用服务器节点,每秒处理多少个请求才算是性能比较不错了?硬件上相对于目前大众化的服务器配置来说(16G内存,双路四核cpu,15000转硬盘),网络带宽不考虑。

我目前的项目要求 每秒要能够处理 24000 个并发请求(读取数据库的业务),我计划用1台server扛下来,但目前看来还差的远,唉。

你先不要考虑其他因素,你可以自己用纯servlet和struts2处理纯内存操作作性能对比,有点差距的。

一般认为Tomcat最高并发在300-400左右,综合经验。所以一台扛下24000个请求不可能的。

然后说数据库的问题,由于app这层可以很方便的扩展,而且app的机器往往可以很便宜,配置要求不高。数据库要支持24000个并发请求,就有点问题了,要么上缓存架构,要么数据库这一层做扩展。

要考虑tomcat集群+ngnix,另外考虑加上缓存架构,一台是很难扛下来的
0 请登录后投票
   发表时间:2010-11-04  
glovebx 写道
icewubin 写道
rustlingwind 写道
icewubin 写道
rustlingwind 写道
wen66 写道
strut2和spring3的性能问题, 大家可以写个简单的例子, 然后用loadruner跑一下, 就知道性能的差别的, 这个就是属于谁用谁知道的东西.


我在项目里使用的是 struts2,至少用 visualvm 发现性能瓶颈绝不在 struts2,一般都是在 数据库io和其他网络io上。

而且,我目前的测试结果是,两台机器(16G内存,双路四核cpu,15000转硬盘,两年前的dell服务器),5个tomcat节点,1个nginx负载均衡,带有业务的用例很轻松就可以跑到 1万 多的 tps (业务用例要经过struts2 自定义拦截器,访问redis,访问 memcached,访问数据库,并提供只读事务)


struts2默认的拦截器不用的全部要去掉,经我们测试是影响性能的,当然我们的并发是超高的,能看出区别。


我想问一下,用ssh写的程序,1个应用服务器节点,每秒处理多少个请求才算是性能比较不错了?硬件上相对于目前大众化的服务器配置来说(16G内存,双路四核cpu,15000转硬盘),网络带宽不考虑。

我目前的项目要求 每秒要能够处理 24000 个并发请求(读取数据库的业务),我计划用1台server扛下来,但目前看来还差的远,唉。

你先不要考虑其他因素,你可以自己用纯servlet和struts2处理纯内存操作作性能对比,有点差距的。

一般认为Tomcat最高并发在300-400左右,综合经验。所以一台扛下24000个请求不可能的。

然后说数据库的问题,由于app这层可以很方便的扩展,而且app的机器往往可以很便宜,配置要求不高。数据库要支持24000个并发请求,就有点问题了,要么上缓存架构,要么数据库这一层做扩展。

要考虑tomcat集群+ngnix,另外考虑加上缓存架构,一台是很难扛下来的

一般来说,app之前的缓存(例如SQUID)稳定之后,没有命中的请求单台不能超过每秒300,否则响应时间会很慢的。
0 请登录后投票
   发表时间:2010-11-29  
我只能说,这个帖子真的很棒。。目前用struts2.2.1谢谢。。
0 请登录后投票
论坛首页 Java企业应用版

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