- 浏览: 1276989 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
最后的攻城狮:
这也太乱了
mybatis与spring事物处理日志 -
leo_soul:
现在不能跨1级域名了吧?比如www.aaa.com,www.b ...
Cookie跨域操作 -
zy976133:
怎么解决的
jaxws不支持SOAPBinding.Use.ENCODED -
cuiyaoqiang:
你好 开发一个http接口给fs调用 ,这个http接口是自己 ...
freeswitch 动态加载号码 -
Jackromer:
请问楼主知道如何通过主控方来删除与其有关的中间表记录? 谢谢, ...
hibernate 多对多只删除中间表数据
项目刚刚换了web层框架,放弃了struts2改用spring3mvc
当初还框架的时候目的比较单纯---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 ,然后直接返回响应文本即可
附上一段代码
由于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和内存都很便宜
犯不着牺牲开发效率和可维护性吧
这个,既然你都rest了 服务器只是提供资源,也就是所谓ROA(面向资源架构)
你何苦还要跳转呢?跳转根据返回信息 在页面控制
再不行 你可以分开两个工程 服务器端是服务器端(rest提供资源) 客户端是客户端(你的jsp)
简单的处理是写个url拦截器重定向*.jsp
但是就像oakeye说的 都rest了在搞出些jsp会很难看
有时间深入探讨下 我当时是用的stringconvert
还有里面的resttemplete你试过没 也需要convert
这些都用过. 在做客户端时, 必用.
还有我们的服务是用java来写的, 而客户端可以有很多种, 当然就包括.net和javascript来直接调用.
而我上面提的文档文档, 是因为restful websevice 里没有一个类型于传统的soap那样的wsdl ,所以在没有文档的情况下,客户端程序员写代码调你的服务时, 会抓狂的, 目前差不多就是这种情况吧.
有种东西叫约定大于配置。。。
可以订个标准 然后特殊的再写文档
那只是开发风格的问题.
问题是你暴露出来的web service是包含业务含义在里面的时候,你怎么来表示.
举个例子
在这里 我的url是 /stockBaseInfo/{stockCode}
{stockCode} 是用股票代码来替换的
而我的查询参数是 isResport 这不是必需的.
以上信息我怎么传达给我的客户,当然你会说可以用文档.
当我们提供的服务达到上千的时候, 那我们的客户是不是要哭了.
当我们更改了我们的参数时, 那客户是不是要爆了你的头了. 在你的文档不及时更新的情况下. 在现实中我们经常发现文档和代码不同步的情况. 而用javadoc就好多了.
有时间深入探讨下 我当时是用的stringconvert
还有里面的resttemplete你试过没 也需要convert
由于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的方式来上. 这样简单, 且不容易出错. 同时性能也好.
这个,既然你都rest了 服务器只是提供资源,也就是所谓ROA(面向资源架构)
你何苦还要跳转呢?跳转根据返回信息 在页面控制
再不行 你可以分开两个工程 服务器端是服务器端(rest提供资源) 客户端是客户端(你的jsp)
不好意思, 不会用javaeye的这些BBCode, 所以回复的内容不好看. 哪位大哥能给我个bbcode的教程, 要简单的, 最好的图文并茂的那种. 谢谢在先啊.
最开始我也是跟你这么想的. 现在我不这么想了, 如果我就是想把它们放在一起, 一方面我的程序通过rest向第三方提供接口, 另一方面同时我自己也有自己的应用, 而这应用的服务就来自于自己. 特别是我想临时增加一个jsp作为我的网站的应用的时候, 那就特别有用了. 在现实的情况下, 我不想有那么多的部署, 如果我把你说的客户端和服务器只做为一份部署, 那不更加的简单啊. 部署方式简单, 出错的环节就少了, 这样就可以按时下班, 放心休息, 而不必担心程序的问题了, 且定位问题也简单了.
同时还有一个问题困扰我的, 如果我们通过spring3来发布大量的restful web service 那文档怎么做啊, 别人怎么知道我们提供了这么多的web service, 且要传的参数及xml的格式呢. 当然你会说我们会写好文档. 那问题又来了, 如果我的业务逻辑变化了, 带来我的web service的参数也变化了, 而文档却没有及时跟新上. 那怎么办.
现在是否有这么一种东西, 把我们的文档和代码写在一起, 这样在改代码的过程中, 把文档也改了, 因为他们放在一个文件里, 且就放在一块,在一屏幕的范围内. 就像是javaDoc一样.
这点也是一直困扰我的. 望大家提个方法来解决一下.
由于Struts2需要针对每个Request进行封装,把Request,Session等Servlet生命周期的变量封装成一个一个Map,供给每个Action使用,并保证线程安全。所以在原则上,是比较耗费内存的。但是这个和高并发无关。主要是你的系统架构,让Struts2承担了过多的功能。Struts2只应处理那些需要被应用服务器处理的请求。
至于导向到JSP,应经过Action中转,这个是基本编程原则。
这个,既然你都rest了 服务器只是提供资源,也就是所谓ROA(面向资源架构)
你何苦还要跳转呢?跳转根据返回信息 在页面控制
再不行 你可以分开两个工程 服务器端是服务器端(rest提供资源) 客户端是客户端(你的jsp)
你确定是在spring3的mvc上弄的,貌似3的mvc的编码是上面那个converter
可能我搞错了
当初还框架的时候目的比较单纯---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" ; }
评论
26 楼
hujg1987
2010-04-18
很好的一个比较~
对我的项目有帮助,谢谢
对我的项目有帮助,谢谢
25 楼
herowzz
2010-04-18
@ResponseBody 不光可以返回字符串,还可以直接返回对象
见:http://blog.springsource.com/2010/01/25/ajax-simplifications-in-spring-3-0/
见:http://blog.springsource.com/2010/01/25/ajax-simplifications-in-spring-3-0/
24 楼
oakeye
2010-04-18
还有就是spring自带的那种jdbc式的orm工具 不是很好 不能象hibernate做表关系
现在struts是可以替代了
本身springmvc2.5之前的哪个思想有点象webwork那种 就是现在的srtrus2
只不过不流行而已
到3之后不知道会不会流行起来
现在struts是可以替代了
本身springmvc2.5之前的哪个思想有点象webwork那种 就是现在的srtrus2
只不过不流行而已
到3之后不知道会不会流行起来
23 楼
oakeye
2010-04-18
看来用spring3mvc的还不少,你说的那种的确头痛 我也是只做小应用 而且服务器端和客户端都是我在写 不用沟通 不用文档。。。
22 楼
icanfly
2010-04-18
我们公司现在这套架构用的就是springMVC 3.0,非常high
21 楼
xly_971223
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和内存都很便宜
犯不着牺牲开发效率和可维护性吧
20 楼
xly_971223
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¶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是很简单的, 没有业务逻辑在里面), 且内存可以正常回收.
而在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会很难看
19 楼
wen66
2010-04-18
引用
有时间深入探讨下 我当时是用的stringconvert
还有里面的resttemplete你试过没 也需要convert
这些都用过. 在做客户端时, 必用.
还有我们的服务是用java来写的, 而客户端可以有很多种, 当然就包括.net和javascript来直接调用.
而我上面提的文档文档, 是因为restful websevice 里没有一个类型于传统的soap那样的wsdl ,所以在没有文档的情况下,客户端程序员写代码调你的服务时, 会抓狂的, 目前差不多就是这种情况吧.
18 楼
wen66
2010-04-18
引用
有种东西叫约定大于配置。。。
可以订个标准 然后特殊的再写文档
那只是开发风格的问题.
问题是你暴露出来的web service是包含业务含义在里面的时候,你怎么来表示.
举个例子
@RequestMapping('/stockBaseInfo') public string stockBaseInfo(@PathVarivale('stockCode') String stockCode, @RequestPara(value='isResport', required=false) boolean isReport){ }
在这里 我的url是 /stockBaseInfo/{stockCode}
{stockCode} 是用股票代码来替换的
而我的查询参数是 isResport 这不是必需的.
以上信息我怎么传达给我的客户,当然你会说可以用文档.
当我们提供的服务达到上千的时候, 那我们的客户是不是要哭了.
当我们更改了我们的参数时, 那客户是不是要爆了你的头了. 在你的文档不及时更新的情况下. 在现实中我们经常发现文档和代码不同步的情况. 而用javadoc就好多了.
17 楼
oakeye
2010-04-18
wen66 写道
相对于用@responseBody来直接返回ajax内容, 在返回简单内容时, 我更加喜欢直接用response输出内容. 其它也就是在方法参数里加上个response, spring3会自动注入httpservletResponse. 如果返回是对象或对象列表. 那用@responseBody来返回, 在底层spring3会调用jsonMessageConvert来进行转化, 然后通过httpservletResponse来进行输出.前提是你的应用里已加载了jsonMessageConvert.至于怎么才会加载jsonMessageConvert, 请大家去看spring 的 reference . 其实spring3的jsonMessageConvert用的是jtson这个库, 那里已做得很好了. 还支持范型哦.
其实直接返回string作为ajax内容输出(用@ResponseBody)的情况下, 说到底,它还是调用StringMessageConvert来做的.
其实直接返回string作为ajax内容输出(用@ResponseBody)的情况下, 说到底,它还是调用StringMessageConvert来做的.
有时间深入探讨下 我当时是用的stringconvert
还有里面的resttemplete你试过没 也需要convert
16 楼
wen66
2010-04-18
引用
由于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的方式来上. 这样简单, 且不容易出错. 同时性能也好.
15 楼
oakeye
2010-04-18
有种东西叫约定大于配置。。。
可以订个标准 然后特殊的再写文档
可以订个标准 然后特殊的再写文档
14 楼
wen66
2010-04-18
引用
这个,既然你都rest了 服务器只是提供资源,也就是所谓ROA(面向资源架构)
你何苦还要跳转呢?跳转根据返回信息 在页面控制
再不行 你可以分开两个工程 服务器端是服务器端(rest提供资源) 客户端是客户端(你的jsp)
不好意思, 不会用javaeye的这些BBCode, 所以回复的内容不好看. 哪位大哥能给我个bbcode的教程, 要简单的, 最好的图文并茂的那种. 谢谢在先啊.
最开始我也是跟你这么想的. 现在我不这么想了, 如果我就是想把它们放在一起, 一方面我的程序通过rest向第三方提供接口, 另一方面同时我自己也有自己的应用, 而这应用的服务就来自于自己. 特别是我想临时增加一个jsp作为我的网站的应用的时候, 那就特别有用了. 在现实的情况下, 我不想有那么多的部署, 如果我把你说的客户端和服务器只做为一份部署, 那不更加的简单啊. 部署方式简单, 出错的环节就少了, 这样就可以按时下班, 放心休息, 而不必担心程序的问题了, 且定位问题也简单了.
同时还有一个问题困扰我的, 如果我们通过spring3来发布大量的restful web service 那文档怎么做啊, 别人怎么知道我们提供了这么多的web service, 且要传的参数及xml的格式呢. 当然你会说我们会写好文档. 那问题又来了, 如果我的业务逻辑变化了, 带来我的web service的参数也变化了, 而文档却没有及时跟新上. 那怎么办.
现在是否有这么一种东西, 把我们的文档和代码写在一起, 这样在改代码的过程中, 把文档也改了, 因为他们放在一个文件里, 且就放在一块,在一屏幕的范围内. 就像是javaDoc一样.
这点也是一直困扰我的. 望大家提个方法来解决一下.
13 楼
downpour
2010-04-18
wen66 写道
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是很简单的, 没有业务逻辑在里面), 且内存可以正常回收.
而在spring3的mvc下(restful), 会存在一个问题就是, 如果我要直接转向我的 http://localhost/myapp/model1/my.jsp 时如果我不在mvc配制文件下配制下配制, 那它怎么进行转向, 这也是一个问题. 也就是说我增加一个jsp, 还要改配制文件, 这很烦啊. 或者说是我没有发现有别的方法可做, 请大家指教.
总共来说: 在高并发的情况下, strut2慎用, spring3可以大胆使用. spring3在性能和内存使用上都不会存在问题(这点我们是经过压力测试的). spring3 mvc可以达到每秒3000的并发点击. (当然经过的controller是很简单的, 没有业务逻辑在里面), 且内存可以正常回收.
由于Struts2需要针对每个Request进行封装,把Request,Session等Servlet生命周期的变量封装成一个一个Map,供给每个Action使用,并保证线程安全。所以在原则上,是比较耗费内存的。但是这个和高并发无关。主要是你的系统架构,让Struts2承担了过多的功能。Struts2只应处理那些需要被应用服务器处理的请求。
至于导向到JSP,应经过Action中转,这个是基本编程原则。
12 楼
76052186
2010-04-18
看看 tapestry 5 就知道区别了
11 楼
wen66
2010-04-18
相对于用@responseBody来直接返回ajax内容, 在返回简单内容时, 我更加喜欢直接用response输出内容. 其它也就是在方法参数里加上个response, spring3会自动注入httpservletResponse. 如果返回是对象或对象列表. 那用@responseBody来返回, 在底层spring3会调用jsonMessageConvert来进行转化, 然后通过httpservletResponse来进行输出.前提是你的应用里已加载了jsonMessageConvert.至于怎么才会加载jsonMessageConvert, 请大家去看spring 的 reference . 其实spring3的jsonMessageConvert用的是jtson这个库, 那里已做得很好了. 还支持范型哦.
其实直接返回string作为ajax内容输出(用@ResponseBody)的情况下, 说到底,它还是调用StringMessageConvert来做的.
其实直接返回string作为ajax内容输出(用@ResponseBody)的情况下, 说到底,它还是调用StringMessageConvert来做的.
10 楼
oakeye
2010-04-18
wen66 写道
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是很简单的, 没有业务逻辑在里面), 且内存可以正常回收.
而在spring3的mvc下(restful), 会存在一个问题就是, 如果我要直接转向我的 http://localhost/myapp/model1/my.jsp 时如果我不在mvc配制文件下配制下配制, 那它怎么进行转向, 这也是一个问题. 也就是说我增加一个jsp, 还要改配制文件, 这很烦啊. 或者说是我没有发现有别的方法可做, 请大家指教.
总共来说: 在高并发的情况下, strut2慎用, spring3可以大胆使用. spring3在性能和内存使用上都不会存在问题(这点我们是经过压力测试的). spring3 mvc可以达到每秒3000的并发点击. (当然经过的controller是很简单的, 没有业务逻辑在里面), 且内存可以正常回收.
这个,既然你都rest了 服务器只是提供资源,也就是所谓ROA(面向资源架构)
你何苦还要跳转呢?跳转根据返回信息 在页面控制
再不行 你可以分开两个工程 服务器端是服务器端(rest提供资源) 客户端是客户端(你的jsp)
9 楼
wen66
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是很简单的, 没有业务逻辑在里面), 且内存可以正常回收.
而在spring3的mvc下(restful), 会存在一个问题就是, 如果我要直接转向我的 http://localhost/myapp/model1/my.jsp 时如果我不在mvc配制文件下配制下配制, 那它怎么进行转向, 这也是一个问题. 也就是说我增加一个jsp, 还要改配制文件, 这很烦啊. 或者说是我没有发现有别的方法可做, 请大家指教.
总共来说: 在高并发的情况下, strut2慎用, spring3可以大胆使用. spring3在性能和内存使用上都不会存在问题(这点我们是经过压力测试的). spring3 mvc可以达到每秒3000的并发点击. (当然经过的controller是很简单的, 没有业务逻辑在里面), 且内存可以正常回收.
8 楼
oakeye
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,没碰到什么中文的问题。
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
可能我搞错了
7 楼
huanglei7211
2010-04-18
我还没接触呢?楼主可以提供点资料吗?比如做好的简单项目啊!还有些关于这方面的资料!
发表评论
-
利用last modified头节省服务器资源和网络带宽
2011-09-19 17:27 1477last-modified 和 if-modified-sin ... -
系统架构中数据库的设计
2010-11-08 16:27 1821架构师往往是有前瞻性的 这个前瞻性是在很多项目经验的基础上总结 ... -
用telnet操作memcached
2010-07-16 14:14 1872telnet localhost 11211 流量统计 st ... -
spring的@Transactional为什么不能指定TransactionManager?
2010-06-10 16:44 7138用过spring的人应该都使用过@Transactional注 ... -
(转)Memcached的stats命令
2010-04-18 11:57 1849命令行查看Memcached运行状态 很多时候需要监控服务器 ... -
tomcat io 与 nio性能比较
2010-04-10 21:30 10786tomcat连接器(conncector)可以配置成NIO方式 ... -
nginx+tomcat配置
2010-04-07 15:16 4149一直听说nginx很厉害 今天装了一个 没有做任何配置直接ab ... -
浏览器缓存总结
2010-03-27 10:20 3085浏览器缓存主要有两类 ... -
理解linux下sendfile()系统调用
2010-03-21 11:29 3078服务器响应一个http静态资源请求的步骤如下: 1 把磁盘文件 ... -
freemarker生成静态jsp碎片乱码
2010-03-19 14:56 3145用freemarker定时生成jsp文件 然后通过jsp:i ... -
用apache ab做压力测试
2010-03-14 16:04 1881测试静态html资源 文件大小44byte,总请求数10000 ... -
apache ab命令详解(转)
2010-03-14 11:58 2637原文地址:http://blog.csdn.net/zhong ... -
压力测试关心的几个指标
2010-03-13 20:58 4752并发用户数 这个不是多说了,可简单理解为并发线程数 总请求次数 ... -
利用squid refresh_pattern缓存图片
2010-03-03 15:22 2964用浏览器请求一张图片1.gif的过程如下 1 发送http到s ... -
如何理解Squid refresh_pattern
2010-03-03 14:25 1649refresh_pattern的作用: 用于确定一个页面进入c ... -
关于Cache-Contro缓存
2010-03-03 10:01 1884浏览器缓存一直是web开发人员比较重视的优化点 这要有这个几个 ...
相关推荐
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.jar对Struts和Spring整合时需要用到的包
**Struts2与Spring MVC比较:** 1. **灵活性**:Spring MVC允许更多的自定义,如自定义拦截器、视图解析器,而Struts2的扩展性相对弱些。 2. **依赖注入**:Spring MVC是Spring框架的一部分,天然支持DI,而Struts2...
下面我们将详细探讨Spring MVC的核心组件、工作流程以及与Struts2.x的比较。 1. **Spring MVC 核心组件** - **DispatcherServlet**:Spring MVC 的核心是DispatcherServlet,它作为一个前端控制器,负责接收请求...
2. Struts与Spring的整合,包括Action的配置、Service注入到Action、以及结果的处理。 3. 使用AspectJ的注解来定义切面,如`@Aspect`、`@Pointcut`、`@Before`、`@After`等。 4. 切面的织入策略,包括编译时织入和...
3. **Interceptor**:类似于Spring MVC的HandlerInterceptor,Struts2的拦截器用于在Action执行前后执行特定任务。 4. **Result**:处理Action执行后的结果,决定如何展示给用户。 5. **ValueStack**:Struts2的...
"spring-webmvc-struts"可能指的是Spring与Struts的集成包,Struts是另一个流行的Java Web MVC框架。这个库可能包含了一些桥接代码,帮助开发者将Spring的IoC(Inversion of Control,控制反转)和AOP功能与Struts的...
spring-webmvc-struts-2.5.6-sources
《构建摄影平台:Spring+Spring MVC+Struts+Hibernate整合详解》 在现代Web开发领域,Spring框架以其灵活性和强大的企业级应用支持而备受青睐。本项目“Spring+Spring MVC+Struts+Hibernate开发摄影平台完整版系统...
综上所述,"DWR与SPRING,DWR与STRUTS2的整合"主题涵盖了现代Java Web开发中重要的三个方面:DWR的实时通信能力、Spring的全面后端支持和Struts2的MVC架构。通过整合这三者,开发者可以构建出具有高效交互、灵活管理...
在IT行业中,MVC(Model-...理解并熟练运用MVC模式、Struts2框架、Spring框架以及Hibernate ORM,对于提升Java Web开发能力大有裨益。通过解答相关选择题,可以检验和巩固这些知识点的理解程度,进一步提升个人技能。
`struts2-spring-plugin-2.5.16.jar`是Struts2与Spring集成的插件,它使得Struts2可以利用Spring的依赖注入(DI)和面向切面编程(AOP)能力。通过这个插件,我们可以将Action类的实例化和管理交给Spring容器,从而...
Spring3、Struts2和Ibatis的整合,构建了一个完整的MVC+持久层架构。Spring作为整个应用的调度中心,管理所有对象的生命周期,包括Struts2的Action和Ibatis的SqlSession。Struts2负责接收HTTP请求,调用Action执行...
本项目“MVC注解Spring-Struts2Spring2hibernate3”结合了Spring、Struts2和Hibernate3这三大框架,以注解的方式实现了一个完整的MVC解决方案。下面将详细介绍这三个框架以及它们之间的协作。 首先,Spring框架是...
Spring MVC作为其Web层的一部分,与Struts相比,更加轻量级和灵活。Spring MVC通过DispatcherServlet作为入口点,处理HTTP请求,并通过配置或注解定义控制器(@Controller)。模型数据通常通过模型对象(Model或...