锁定老帖子 主题:spring3mvc与struts2比较
该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2010-04-17
最后修改:2010-04-17
当初还框架的时候目的比较单纯---springmvc支持rest,小生对restful url由衷的喜欢 不用不知道 一用就发现开发效率确实比struts2高 我们用struts2时采用的传统的配置文件的方式,并没有使用传说中的0配置 spring3 mvc可以认为已经100%零配置了(除了配置springmvc-servlet.xml外) 比较了一下strus2与spring3 mvc的差别 ============================================ struts2框架是类级别的拦截,每次来了请求就创建一个Action,然后调用setter getter方法把request中的数据注入 struts2实际上是通过setter getter方法与request打交道的 struts2中,一个Action对象对应一个request上下文 spring3 mvc不同,spring3mvc是方法级别的拦截,拦截到方法后根据参数上的注解,把request数据注入进去 在spring3mvc中,一个方法对应一个request上下文 好了 我们来整理一下 struts2是类级别的拦截, 一个类对应一个request上下文, springmvc是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应 所以说从架构本身上 spring3 mvc就容易实现restful url 而struts2的架构实现起来要费劲 因为struts2 action的一个方法可以对应一个url 而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了 =================================== spring3mvc的方法之间基本上独立的,独享request response数据 请求数据通过参数获取,处理结果通过ModelMap交回给框架 方法之间不共享变量 而struts2搞的就比较乱,虽然方法之间也是独立的,但其所有Action变量是共享的 这不会影响程序运行,却给我们编码 读程序时带来麻烦 ==================================== spring3 mvc的验证也是一个亮点,支持JSR303 处理ajax的请求更是方便 只需一个注解@ResponseBody ,然后直接返回响应文本即可 附上一段代码 @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" ; } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-04-17
我也用的是这种@ResponseBody方式来做ajax,不知道有没有更合适的方式?
|
|
返回顶楼 | |
发表时间:2010-04-17
我也用的是这种@ResponseBody方式来做ajax,不知道有没有更合适的方式?
|
|
返回顶楼 | |
发表时间:2010-04-17
还有就是中文问题 我只能复写那个StringHttpMessageConverter,然后把编码方式写成utf-8
|
|
返回顶楼 | |
发表时间:2010-04-18
有2个JsonView的,或者更适合Ajax,当然自己写一个JsonView都很简单
1 json-lib-ext-spring http://sourceforge.net/projects/json-lib/files/ 2 spring json view http://spring-json.sourceforge.net/download.html 一直用org.springframework.web.filter.CharacterEncodingFilter,没碰到什么中文的问题。 |
|
返回顶楼 | |
发表时间:2010-04-18
哦 基于注解的
注解算不算配置? |
|
返回顶楼 | |
发表时间:2010-04-18
不错,但是现在用struts2的多啊,想换spring-MVC,不容易!
|
|
返回顶楼 | |
发表时间:2010-04-18
我还没接触呢?楼主可以提供点资料吗?比如做好的简单项目啊!还有些关于这方面的资料!
|
|
返回顶楼 | |
发表时间:2010-04-18
elvea 写道 有2个JsonView的,或者更适合Ajax,当然自己写一个JsonView都很简单
1 json-lib-ext-spring http://sourceforge.net/projects/json-lib/files/ 2 spring json view http://spring-json.sourceforge.net/download.html 一直用org.springframework.web.filter.CharacterEncodingFilter,没碰到什么中文的问题。 你确定是在spring3的mvc上弄的,貌似3的mvc的编码是上面那个converter 可能我搞错了 |
|
返回顶楼 | |
发表时间:2010-04-18
spring3与struts2有很大的区别, 最近我们在struts2.1及spring3.0.2上做过压力测试, 发现struts2.1在默认的配制下存在严重的性能问题. 每秒的点击数不会超过200, 而如果用struts2的dispatchServlet去拦截带有参数的jsp如(http://localhost/myapp/my.jsp?para1=1¶2=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是很简单的, 没有业务逻辑在里面), 且内存可以正常回收. |
|
返回顶楼 | |