论坛首页 Java企业应用论坛

spring3mvc与struts2比较

浏览 161994 次
该帖已经被评为良好帖
作者 正文
   发表时间:2010-04-18  
oakeye 写道
wen66 写道
spring3与struts2有很大的区别, 最近我们在struts2.1及spring3.0.2上做过压力测试, 发现struts2.1在默认的配制下存在严重的性能问题. 每秒的点击数不会超过200, 而如果用struts2的dispatchServlet去拦截带有参数的jsp如(http://localhost/myapp/my.jsp?para1=1&para2=2) 这样的url时, 在大并发时, 存在很严重的内存泄漏的问题. 用jprofile可以发现java.util.concurrent.concurrenthashmap占用了大量的内存, 同时java.util.concurrent.locks也占用了大量的内存. 原因估计为struts2里面的参数转化拦截器出了问题(没有得到求证).

而在spring3的mvc下(restful), 会存在一个问题就是, 如果我要直接转向我的 http://localhost/myapp/model1/my.jsp 时如果我不在mvc配制文件下配制下配制, 那它怎么进行转向, 这也是一个问题. 也就是说我增加一个jsp, 还要改配制文件, 这很烦啊. 或者说是我没有发现有别的方法可做, 请大家指教.

总共来说: 在高并发的情况下, strut2慎用, spring3可以大胆使用. spring3在性能和内存使用上都不会存在问题(这点我们是经过压力测试的). spring3 mvc可以达到每秒3000的并发点击. (当然经过的controller是很简单的, 没有业务逻辑在里面), 且内存可以正常回收. 

这个,既然你都rest了  服务器只是提供资源,也就是所谓ROA(面向资源架构)
你何苦还要跳转呢?跳转根据返回信息 在页面控制
再不行  你可以分开两个工程  服务器端是服务器端(rest提供资源)  客户端是客户端(你的jsp)

简单的处理是写个url拦截器重定向*.jsp
但是就像oakeye说的 都rest了在搞出些jsp会很难看
0 请登录后投票
   发表时间:2010-04-18  
wen66 写道
引用

由于Struts2需要针对每个Request进行封装,把Request,Session等Servlet生命周期的变量封装成一个一个Map,供给每个Action使用,并保证线程安全。所以在原则上,是比较耗费内存的。但是这个和高并发无关。主要是你的系统架构,让Struts2承担了过多的功能。 Struts2只应处理那些需要被应用服务器处理的请求。

至于导向到JSP,应经过Action中转,这个是基本编程原则。


不是的, 这和高并发有关系, 且是存在内存泄漏的情况, 因为在请求完成后, 我们用手动去gc它, 它的内存都不回收, 且发现大量占用老年堆的内存.

在我们的系统里没有让strut2承担过多的功能, 就只是让它进行请求的转发和参数的组装. 业务逻辑都放在spring管理的bean里面了. 如果经过action然后转向jsp, 这样你的并发性就上不去了. 因为了struts2的原因. 所以我们会在有些要求高并发的页面上,直接在jsp里调用spring管理的bean, 然后用jstl输出. 如果在性能有最高的要求的下, 我们会连jstl都不用. 直接用java代码来输出.

经过这个项目, 发现如果要应对高并发, 那还是回到jsp +javaBean的方式来上. 这样简单, 且不容易出错. 同时性能也好.

不知道wen66项目的瓶颈在哪儿?
把strtus2换成jsp+servlet性能上能够提高多少我不太确定,感觉上应该不会提高太多
而且strtus2换成jsp+servlet只是节省了写cpu时间和内存,你们项目的瓶颈难道在这儿?
如果真是这样那反而好办了, cpu和内存都很便宜
犯不着牺牲开发效率和可维护性吧
0 请登录后投票
   发表时间:2010-04-18  
我们公司现在这套架构用的就是springMVC 3.0,非常high
0 请登录后投票
   发表时间:2010-04-18  
看来用spring3mvc的还不少,你说的那种的确头痛  我也是只做小应用  而且服务器端和客户端都是我在写  不用沟通  不用文档。。。
0 请登录后投票
   发表时间:2010-04-18  
还有就是spring自带的那种jdbc式的orm工具 不是很好  不能象hibernate做表关系

现在struts是可以替代了
本身springmvc2.5之前的哪个思想有点象webwork那种  就是现在的srtrus2
只不过不流行而已

到3之后不知道会不会流行起来
0 请登录后投票
   发表时间:2010-04-18  
@ResponseBody 不光可以返回字符串,还可以直接返回对象


见:http://blog.springsource.com/2010/01/25/ajax-simplifications-in-spring-3-0/
0 请登录后投票
   发表时间:2010-04-18  
很好的一个比较~
对我的项目有帮助,谢谢
0 请登录后投票
   发表时间:2010-04-18  
spyker 写道
哦 基于注解的
注解算不算配置?

  不知道怎么形容你的疑问。
0 请登录后投票
   发表时间:2010-04-18  
strut2和spring3的性能问题, 大家可以写个简单的例子, 然后用loadruner跑一下, 就知道性能的差别的, 这个就是属于谁用谁知道的东西.
0 请登录后投票
   发表时间:2010-04-18  
主要就想看下 Spring MVC 3.0 里面的校验
用 Struts2 的时候, 我从来都是写了 validate 方法的
不知道 3.0 的校验是怎样的...
0 请登录后投票
论坛首页 Java企业应用版

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