- 浏览: 1277005 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
最后的攻城狮:
这也太乱了
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 ,然后直接返回响应文本即可
附上一段代码
我赞成okayeye的意见,在富客户端的情况下,springMVC和struts2的流转控制可以放到客户端来做,比如Flex,服务器端尽量只做数据读写和服务集成,这样可以获取更高的并发流量
帅哥,咱不再做框架之争了好么?SpringMVC与Struts2都是优秀的Web层框架。框架的优劣,是程序员自身的哲学选择。有些东西,我说是缺点,你却说是优点,这是永远也争不清楚的。
在这里我需要给那些使用SpringMVC的同学提个醒。Annotation进行UrlMapping在大型的web应用中的可维护性是值得质疑的。在团队开发中,这一问题显得格外严重。所以,请不要神化SpringMVC的某些功能。谢谢。
顶,支持。
这点我深有体会,Spring MVC 3.0.5 留给开发者的自由度太大了,让开发者可以在一个controller 里,在class上和method上自由定义url,这样的话,会造成同一个包路径下的controller 映射到任何层次级别的url上去,也会造成不同的包路径下的controller 映射到相同层次的url上去,甚至会出现多个controller 映射到同一个url,一句话概括就是:【杂乱无章】,这样的自由度泛滥,在大的项目中必定造成维护上的混乱,不要指望每个程序员都是命名规范,自觉遵循项目约定的“顺草”,基本上每个项目组都是“杂草丛生”。
这一点其实我在最早的讨论中就指出来了。SpringMVC的Annotation来指定URL Mapping的可维护性为0。
这里的本质问题在于Annotation和XML到底谁更加适合来做某种类型的配置。
当我们引入一个Annotation,实际上获得的好处在于我们可以在Java Code级别解决配置问题,但同时,我们也引入了其他的问题:
1) 引入了Annotation,就引入了对框架的强依赖,一个原本可以单独测试的东西,却必须放在容器中做集成测试。
2) 引入了Annotation,就将这个Annotation所代表的配置类型,分散到了不同的Java Code中。就像在一个沙地里面,我们要寻找散落在各处的黄豆,实际上是非常困难的。
当我们引入XML的时候,虽然我们引入的是一个额外的配置文件和额外的配置,但是我们却获得的统一的查找路径,可维护性得到了保证。
XML也不推荐大量使用,最好是使用约定,不按照约定来命名类和方法,根本就无法访问url,这样即减少了配置文件,又能很方便地找到URL所对应的控制器类,而且还能强迫那些“胡乱写类名、方法名”的“懒汉”把命名规范起来。
帅哥,咱不再做框架之争了好么?SpringMVC与Struts2都是优秀的Web层框架。框架的优劣,是程序员自身的哲学选择。有些东西,我说是缺点,你却说是优点,这是永远也争不清楚的。
在这里我需要给那些使用SpringMVC的同学提个醒。Annotation进行UrlMapping在大型的web应用中的可维护性是值得质疑的。在团队开发中,这一问题显得格外严重。所以,请不要神化SpringMVC的某些功能。谢谢。
顶,支持。
这点我深有体会,Spring MVC 3.0.5 留给开发者的自由度太大了,让开发者可以在一个controller 里,在class上和method上自由定义url,这样的话,会造成同一个包路径下的controller 映射到任何层次级别的url上去,也会造成不同的包路径下的controller 映射到相同层次的url上去,甚至会出现多个controller 映射到同一个url,一句话概括就是:【杂乱无章】,这样的自由度泛滥,在大的项目中必定造成维护上的混乱,不要指望每个程序员都是命名规范,自觉遵循项目约定的“顺草”,基本上每个项目组都是“杂草丛生”。
这一点其实我在最早的讨论中就指出来了。SpringMVC的Annotation来指定URL Mapping的可维护性为0。
这里的本质问题在于Annotation和XML到底谁更加适合来做某种类型的配置。
当我们引入一个Annotation,实际上获得的好处在于我们可以在Java Code级别解决配置问题,但同时,我们也引入了其他的问题:
1) 引入了Annotation,就引入了对框架的强依赖,一个原本可以单独测试的东西,却必须放在容器中做集成测试。
2) 引入了Annotation,就将这个Annotation所代表的配置类型,分散到了不同的Java Code中。就像在一个沙地里面,我们要寻找散落在各处的黄豆,实际上是非常困难的。
当我们引入XML的时候,虽然我们引入的是一个额外的配置文件和额外的配置,但是我们却获得的统一的查找路径,可维护性得到了保证。
帅哥,咱不再做框架之争了好么?SpringMVC与Struts2都是优秀的Web层框架。框架的优劣,是程序员自身的哲学选择。有些东西,我说是缺点,你却说是优点,这是永远也争不清楚的。
在这里我需要给那些使用SpringMVC的同学提个醒。Annotation进行UrlMapping在大型的web应用中的可维护性是值得质疑的。在团队开发中,这一问题显得格外严重。所以,请不要神化SpringMVC的某些功能。谢谢。
顶,支持。
这点我深有体会,Spring MVC 3.0.5 留给开发者的自由度太大了,让开发者可以在一个controller 里,在class上和method上自由定义url,这样的话,会造成同一个包路径下的controller 映射到任何层次级别的url上去,也会造成不同的包路径下的controller 映射到相同层次的url上去,甚至会出现多个controller 映射到同一个url,一句话概括就是:【杂乱无章】,这样的自由度泛滥,在大的项目中必定造成维护上的混乱,不要指望每个程序员都是命名规范,自觉遵循项目约定的“顺草”,基本上每个项目组都是“杂草丛生”。
帅哥,咱不再做框架之争了好么?SpringMVC与Struts2都是优秀的Web层框架。框架的优劣,是程序员自身的哲学选择。有些东西,我说是缺点,你却说是优点,这是永远也争不清楚的。
在这里我需要给那些使用SpringMVC的同学提个醒。Annotation进行UrlMapping在大型的web应用中的可维护性是值得质疑的。在团队开发中,这一问题显得格外严重。所以,请不要神化SpringMVC的某些功能。谢谢。
是的,如果没有源码,这个维护确实是问题,但是咱不可否认,Springmvc 开发起来快!struts2和SpringMVC都用过!
我一般是自定义一个ajax试图处理器,分别用来返回纯文本,xml和json类型!
我在项目里使用的是 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,否则响应时间会很慢的。
我在项目里使用的是 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,另外考虑加上缓存架构,一台是很难扛下来的
我在项目里使用的是 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个并发请求,就有点问题了,要么上缓存架构,要么数据库这一层做扩展。
当初还框架的时候目的比较单纯---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" ; }
评论
206 楼
guojigjkill
2014-05-05
111
205 楼
victorming
2011-03-26
chrislee1982 写道
struts同样可以做方法上的拦截,这样配置就可以了
<action name="login" class="xx.LoginAction" method="login">
<interceptor....../><!-- interceptor A -->
<result...../>
</action>
<action name="logout" class="xx.LoginAction" method="logout">
<interceptor....../> ><!-- interceptor B -->
<result...../>
</action>
<action name="login" class="xx.LoginAction" method="login">
<interceptor....../><!-- interceptor A -->
<result...../>
</action>
<action name="logout" class="xx.LoginAction" method="logout">
<interceptor....../> ><!-- interceptor B -->
<result...../>
</action>
我赞成okayeye的意见,在富客户端的情况下,springMVC和struts2的流转控制可以放到客户端来做,比如Flex,服务器端尽量只做数据读写和服务集成,这样可以获取更高的并发流量
204 楼
chrislee1982
2011-03-18
struts同样可以做方法上的拦截,这样配置就可以了
<action name="login" class="xx.LoginAction" method="login">
<interceptor....../><!-- interceptor A -->
<result...../>
</action>
<action name="logout" class="xx.LoginAction" method="logout">
<interceptor....../> ><!-- interceptor B -->
<result...../>
</action>
<action name="login" class="xx.LoginAction" method="login">
<interceptor....../><!-- interceptor A -->
<result...../>
</action>
<action name="logout" class="xx.LoginAction" method="logout">
<interceptor....../> ><!-- interceptor B -->
<result...../>
</action>
203 楼
george
2011-02-17
downpour 写道
george 写道
downpour 写道
shiren1118 写道
你觉得这有啥可炫耀的吗?spring的多view解析实现这个跟玩一样
看看这兄弟的帖子吧http://www.iteye.com/topic/748006
看看这兄弟的帖子吧http://www.iteye.com/topic/748006
帅哥,咱不再做框架之争了好么?SpringMVC与Struts2都是优秀的Web层框架。框架的优劣,是程序员自身的哲学选择。有些东西,我说是缺点,你却说是优点,这是永远也争不清楚的。
在这里我需要给那些使用SpringMVC的同学提个醒。Annotation进行UrlMapping在大型的web应用中的可维护性是值得质疑的。在团队开发中,这一问题显得格外严重。所以,请不要神化SpringMVC的某些功能。谢谢。
顶,支持。
这点我深有体会,Spring MVC 3.0.5 留给开发者的自由度太大了,让开发者可以在一个controller 里,在class上和method上自由定义url,这样的话,会造成同一个包路径下的controller 映射到任何层次级别的url上去,也会造成不同的包路径下的controller 映射到相同层次的url上去,甚至会出现多个controller 映射到同一个url,一句话概括就是:【杂乱无章】,这样的自由度泛滥,在大的项目中必定造成维护上的混乱,不要指望每个程序员都是命名规范,自觉遵循项目约定的“顺草”,基本上每个项目组都是“杂草丛生”。
这一点其实我在最早的讨论中就指出来了。SpringMVC的Annotation来指定URL Mapping的可维护性为0。
这里的本质问题在于Annotation和XML到底谁更加适合来做某种类型的配置。
当我们引入一个Annotation,实际上获得的好处在于我们可以在Java Code级别解决配置问题,但同时,我们也引入了其他的问题:
1) 引入了Annotation,就引入了对框架的强依赖,一个原本可以单独测试的东西,却必须放在容器中做集成测试。
2) 引入了Annotation,就将这个Annotation所代表的配置类型,分散到了不同的Java Code中。就像在一个沙地里面,我们要寻找散落在各处的黄豆,实际上是非常困难的。
当我们引入XML的时候,虽然我们引入的是一个额外的配置文件和额外的配置,但是我们却获得的统一的查找路径,可维护性得到了保证。
XML也不推荐大量使用,最好是使用约定,不按照约定来命名类和方法,根本就无法访问url,这样即减少了配置文件,又能很方便地找到URL所对应的控制器类,而且还能强迫那些“胡乱写类名、方法名”的“懒汉”把命名规范起来。
202 楼
downpour
2011-02-17
george 写道
downpour 写道
shiren1118 写道
你觉得这有啥可炫耀的吗?spring的多view解析实现这个跟玩一样
看看这兄弟的帖子吧http://www.iteye.com/topic/748006
看看这兄弟的帖子吧http://www.iteye.com/topic/748006
帅哥,咱不再做框架之争了好么?SpringMVC与Struts2都是优秀的Web层框架。框架的优劣,是程序员自身的哲学选择。有些东西,我说是缺点,你却说是优点,这是永远也争不清楚的。
在这里我需要给那些使用SpringMVC的同学提个醒。Annotation进行UrlMapping在大型的web应用中的可维护性是值得质疑的。在团队开发中,这一问题显得格外严重。所以,请不要神化SpringMVC的某些功能。谢谢。
顶,支持。
这点我深有体会,Spring MVC 3.0.5 留给开发者的自由度太大了,让开发者可以在一个controller 里,在class上和method上自由定义url,这样的话,会造成同一个包路径下的controller 映射到任何层次级别的url上去,也会造成不同的包路径下的controller 映射到相同层次的url上去,甚至会出现多个controller 映射到同一个url,一句话概括就是:【杂乱无章】,这样的自由度泛滥,在大的项目中必定造成维护上的混乱,不要指望每个程序员都是命名规范,自觉遵循项目约定的“顺草”,基本上每个项目组都是“杂草丛生”。
这一点其实我在最早的讨论中就指出来了。SpringMVC的Annotation来指定URL Mapping的可维护性为0。
这里的本质问题在于Annotation和XML到底谁更加适合来做某种类型的配置。
当我们引入一个Annotation,实际上获得的好处在于我们可以在Java Code级别解决配置问题,但同时,我们也引入了其他的问题:
1) 引入了Annotation,就引入了对框架的强依赖,一个原本可以单独测试的东西,却必须放在容器中做集成测试。
2) 引入了Annotation,就将这个Annotation所代表的配置类型,分散到了不同的Java Code中。就像在一个沙地里面,我们要寻找散落在各处的黄豆,实际上是非常困难的。
当我们引入XML的时候,虽然我们引入的是一个额外的配置文件和额外的配置,但是我们却获得的统一的查找路径,可维护性得到了保证。
201 楼
george
2011-02-16
downpour 写道
shiren1118 写道
你觉得这有啥可炫耀的吗?spring的多view解析实现这个跟玩一样
看看这兄弟的帖子吧http://www.iteye.com/topic/748006
看看这兄弟的帖子吧http://www.iteye.com/topic/748006
帅哥,咱不再做框架之争了好么?SpringMVC与Struts2都是优秀的Web层框架。框架的优劣,是程序员自身的哲学选择。有些东西,我说是缺点,你却说是优点,这是永远也争不清楚的。
在这里我需要给那些使用SpringMVC的同学提个醒。Annotation进行UrlMapping在大型的web应用中的可维护性是值得质疑的。在团队开发中,这一问题显得格外严重。所以,请不要神化SpringMVC的某些功能。谢谢。
顶,支持。
这点我深有体会,Spring MVC 3.0.5 留给开发者的自由度太大了,让开发者可以在一个controller 里,在class上和method上自由定义url,这样的话,会造成同一个包路径下的controller 映射到任何层次级别的url上去,也会造成不同的包路径下的controller 映射到相同层次的url上去,甚至会出现多个controller 映射到同一个url,一句话概括就是:【杂乱无章】,这样的自由度泛滥,在大的项目中必定造成维护上的混乱,不要指望每个程序员都是命名规范,自觉遵循项目约定的“顺草”,基本上每个项目组都是“杂草丛生”。
200 楼
yangfuchao418
2011-02-12
一个破框架吵啥。俺都是手写
199 楼
xiaoyu
2011-01-25
REST URL 不一定就搜索引擎友好, 这个要看哪个搜索引擎了。 如果是百度。。。。。 哎, 这个百度的新闻收录。就
198 楼
jarorwar
2011-01-25
不知道在谈论什么,大家都吵起来了!
197 楼
jarorwar
2011-01-25
downpour 写道
shiren1118 写道
你觉得这有啥可炫耀的吗?spring的多view解析实现这个跟玩一样
看看这兄弟的帖子吧http://www.iteye.com/topic/748006
看看这兄弟的帖子吧http://www.iteye.com/topic/748006
帅哥,咱不再做框架之争了好么?SpringMVC与Struts2都是优秀的Web层框架。框架的优劣,是程序员自身的哲学选择。有些东西,我说是缺点,你却说是优点,这是永远也争不清楚的。
在这里我需要给那些使用SpringMVC的同学提个醒。Annotation进行UrlMapping在大型的web应用中的可维护性是值得质疑的。在团队开发中,这一问题显得格外严重。所以,请不要神化SpringMVC的某些功能。谢谢。
是的,如果没有源码,这个维护确实是问题,但是咱不可否认,Springmvc 开发起来快!struts2和SpringMVC都用过!
196 楼
jarorwar
2011-01-25
oakeye 写道
还有就是中文问题 我只能复写那个StringHttpMessageConverter,然后把编码方式写成utf-8
我一般是自定义一个ajax试图处理器,分别用来返回纯文本,xml和json类型!
195 楼
george
2011-01-17
一直在使用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,它是没有什么优势的。
这个帖子从第一页看到最后,也没有看到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,它是没有什么优势的。
194 楼
skyHuang
2010-12-23
<p>使用中,, 确实比struts方便很多 lz分析的很到位<img src="http://dl.iteye.com/upload/attachment/374351/523ce437-572d-32e8-9d26-458299af6de3.jpg" alt="" width="741" height="330"></p>
193 楼
pengjj2
2010-12-23
我就想问一下,springMVC3有没有解决嵌套对象的问题。。
让我可以这么写<input id="user.id" type="text"/>
model为role,role中嵌套user
让我可以这么写<input id="user.id" type="text"/>
model为role,role中嵌套user
192 楼
helloworldwyn
2010-12-09
选择springmvc,感觉比struts开发效率高
191 楼
wenxiang_tune
2010-11-29
我只能说,这个帖子真的很棒。。目前用struts2.2.1谢谢。。
190 楼
icewubin
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,否则响应时间会很慢的。
189 楼
里克尔奇
2010-11-04
不错,拜读一下。
188 楼
glovebx
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,另外考虑加上缓存架构,一台是很难扛下来的
187 楼
icewubin
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个并发请求,就有点问题了,要么上缓存架构,要么数据库这一层做扩展。
发表评论
-
利用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 10787tomcat连接器(conncector)可以配置成NIO方式 ... -
nginx+tomcat配置
2010-04-07 15:16 4151一直听说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或...