`
xly_971223
  • 浏览: 1276988 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

spring3mvc与struts2比较

阅读更多
项目刚刚换了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 ,然后直接返回响应文本即可

附上一段代码
	@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" ;
	}

分享到:
评论
166 楼 k_scott 2010-10-05  
都是工具而已,能赚钱就好!O(∩_∩)O~
165 楼 icewubin 2010-10-05  
slaser 写道
icewubin 写道
slaser 写道
池中物 写道
去掉mvc框架,用servlet和jsp吧。。

没觉得mvc框架有什么用

其实servlet也没什么用,为什么不直接用jsp做controller?

JSP运行时会先被编译成Servlet。

这不妨碍jsp做controller.比asp强大多了。

你为什么要和asp比呢?

而且MVC框架就是controller么?
164 楼 slaser 2010-10-05  
icewubin 写道
slaser 写道
池中物 写道
去掉mvc框架,用servlet和jsp吧。。

没觉得mvc框架有什么用

其实servlet也没什么用,为什么不直接用jsp做controller?

JSP运行时会先被编译成Servlet。

这不妨碍jsp做controller.比asp强大多了。
163 楼 icewubin 2010-10-03  
slaser 写道
池中物 写道
去掉mvc框架,用servlet和jsp吧。。

没觉得mvc框架有什么用

其实servlet也没什么用,为什么不直接用jsp做controller?

JSP运行时会先被编译成Servlet。
162 楼 slaser 2010-10-03  
很多技术人员认死理。
拿散打技术来说,用直拳和摆拳是根据具体情况定的。
如果一个拳手一直出直拳或者一直出摆拳,肯定直接被KO了。
你能说直拳比摆拳好,或者摆拳比直拳好?
这个就是springMVC和struts2面临的情况。
161 楼 weir2009 2010-10-03  
大家都说真理只有一个,可这里是人类最高文明讨论的地方,所以说这里没有真理,科技只要在进步就没有真理,只有接近真理,对与错,好与坏,那就更是是口舌之争了,只要你是项目经理,说用什么就用什么,你不用滚蛋,这有什么好说的,对于程序员来说,能力是生存之道而不是技术。
从这样的题目就能看出,这就是来做口舌之争的,而对自己的反思又是什么?是多了点固执己见,还是多了点怀疑,还是多了点务实实践,等等吧,我想好处是有的,但至少让我看清楚了一点,锻炼自己的技术能力比技术本身要重要,这是我在这里总结的真理。
160 楼 slaser 2010-10-03  
池中物 写道
去掉mvc框架,用servlet和jsp吧。。

没觉得mvc框架有什么用

其实servlet也没什么用,为什么不直接用jsp做controller?
159 楼 ricoyu 2010-10-02  
引用
在struts2 中能通过 @ResultPath 设置多个 templateLoaderPath
在spring mvc中不能,但是这个在分为前台后台的系统中 比较有用因为 前台和后台再用不同的目录,

在struts2中能通过
Java代码
1.@Namespace("/admin/") 
@Namespace("/admin/")来设置 而且这个属性能继承,对方法也有效这样能有利于,对url进行统一拦截,在springmvc中只能通过在方法上设置
Java代码
1.@RequestMapping(value="/admin/login") 
@RequestMapping(value="/admin/login"),比较繁琐,当然可以采取其他办法,必须放到admin 包下


Spring MVC中可以在type level打注解@RequestMapping(value="/admin")  然后在method level
@RequestMapping(value="/login") ,这样跟在方法上打注解@RequestMapping(value="/admin/login")效果是一样的,我想这样能达到你想要的
158 楼 池中物 2010-09-30  
去掉mvc框架,用servlet和jsp吧。。

没觉得mvc框架有什么用
157 楼 icewubin 2010-09-30  
pior 写道
为什么分清输入输出这么重要?```

接受请求就是输入``返回请求就是输出```

这不很明白的吗:

这算什么话,举个反例:

引用
关系数据库不就是输入sql返回结果集么?这不很明白么?
156 楼 pior 2010-09-29  
为什么分清输入输出这么重要?```

接受请求就是输入``返回请求就是输出```

这不很明白的吗:
155 楼 superyang 2010-08-30  
约定某种意义上说就是一种约束,也就根本谈不起灵活。让别人用固定的思维方式去维护前人的约束肯定是有问题的。。

spring mvc 让人维护起来应该困难比较大的。。。

struts2 已经够简单 清晰了。根本就不用维护。。。。

154 楼 icewubin 2010-08-29  
downpour 写道
楼上的同学,打靶子请看清对手。俺可是站在你这边的。

Annotation和约定大于配置都无法解决团队开发的维护问题,这应该成为一个共识而不是那些用户SpringMVC的同学拿出来炫耀的资本

你说的标红部分没错,但是论据不是很对头,有一事说一事。

是没什么好炫耀的,但是约定大于配置是有用的。
153 楼 shiren1118 2010-08-29  
downpour 写道
楼上的同学,打靶子请看清对手。俺可是站在你这边的。

Annotation和约定大于配置都无法解决团队开发的维护问题,这应该成为一个共识而不是那些用户SpringMVC的同学拿出来炫耀的资本。



嘿嘿,你就从了吧~~~~·现在咱是一党了

152 楼 downpour 2010-08-29  
楼上的同学,打靶子请看清对手。俺可是站在你这边的。

Annotation和约定大于配置都无法解决团队开发的维护问题,这应该成为一个共识而不是那些用户SpringMVC的同学拿出来炫耀的资本。
151 楼 icewubin 2010-08-29  
shiren1118 写道
downpour 写道
shiren1118 写道
你觉得这有啥可炫耀的吗?spring的多view解析实现这个跟玩一样

看看这兄弟的帖子吧http://www.iteye.com/topic/748006


帅哥,咱不再做框架之争了好么?SpringMVC与Struts2都是优秀的Web层框架。框架的优劣,是程序员自身的哲学选择。有些东西,我说是缺点,你却说是优点,这是永远也争不清楚的。

在这里我需要给那些使用SpringMVC的同学提个醒。Annotation进行UrlMapping在大型的web应用中的可维护性是值得质疑的。在团队开发中,这一问题显得格外严重。所以,请不要神化SpringMVC的某些功能。谢谢。



说实话,我是很赞同你的,能够把struts2源码通读很了不起

Annotation进行UrlMapping确实在大型的项目里面会有问题,约定很重要,约定不好肯定会非常难维护,主要开发速度快了,大家也就忍受这个了

先说明我也不想挑起口水战,不过你们两个人的说法都是有问题的。

1)约定与否和可维护性没有必然联系,例如java bean的定义约定本来就不是强制的,但是因为普及度很高(并不是所有人都认可,随着技术手段的多样化,很多人还认为java bean的get set就是多此一举),所以大家都知道,普及度高的好处,想想范式或者设计模式就知道了,绝大都数人都知道,或者很容易查到是怎么回事。

2)每个项目必然有自身约定的部分,无论是用什么技术或框架,关键是当项目中某位成员离职,顶替的人需要多长时间或者代价知道这些约定,约定本身没有好坏之分的。像ROR到处都是约定,难道ROR一定很难维护么?
150 楼 icewubin 2010-08-29  
shiren1118 写道
icewubin 写道
[quote="

你的回答非常的可笑,我只不过举了个例子,反驳某些人的某个不足以说明问题的论据,并不是在支持struts2。
在你眼里就变成了“炫耀”,你是被打了鸡血了么?
我再重复一次,本人没有说struts2更优秀。
在技术上谁更优秀本身也没有意义,优秀的技术被淘汰的多了去了。
如果两个技术差距不算太大的话,决定哪项技术更有前途绝对不是某个框架胜出个一点半点,只要这个框架基本满足需要,没有特别大的缺点,就足够了。
没有一个框架是没有缺点,关键还是看他相比其他框架的缺点到底有多少,是否可以接受。

而且框架对比不能只考虑技术优秀与否,学些成本、普及程度都必须考虑进去。



你的论据不充足,是因为你对struts2更了解,对spring mvc了解的少,建议您多看看spring mvc

在这种帖子里确实火药味比较浓,你败介意啊~~

有些人自以为了解Struts,我只是指出他的论据有问题而已。

我本来就不是想证明Struts2比spring mvc强,何来“论据”之说,火药味就是被你这种看帖不仔细的人挑起来的。
149 楼 shiren1118 2010-08-29  
icewubin 写道
[quote="

你的回答非常的可笑,我只不过举了个例子,反驳某些人的某个不足以说明问题的论据,并不是在支持struts2。
在你眼里就变成了“炫耀”,你是被打了鸡血了么?
我再重复一次,本人没有说struts2更优秀。
在技术上谁更优秀本身也没有意义,优秀的技术被淘汰的多了去了。
如果两个技术差距不算太大的话,决定哪项技术更有前途绝对不是某个框架胜出个一点半点,只要这个框架基本满足需要,没有特别大的缺点,就足够了。
没有一个框架是没有缺点,关键还是看他相比其他框架的缺点到底有多少,是否可以接受。

而且框架对比不能只考虑技术优秀与否,学些成本、普及程度都必须考虑进去。



你的论据不充足,是因为你对struts2更了解,对spring mvc了解的少,建议您多看看spring mvc

在这种帖子里确实火药味比较浓,你败介意啊~~
148 楼 shiren1118 2010-08-29  
downpour 写道
shiren1118 写道
你觉得这有啥可炫耀的吗?spring的多view解析实现这个跟玩一样

看看这兄弟的帖子吧http://www.iteye.com/topic/748006


帅哥,咱不再做框架之争了好么?SpringMVC与Struts2都是优秀的Web层框架。框架的优劣,是程序员自身的哲学选择。有些东西,我说是缺点,你却说是优点,这是永远也争不清楚的。

在这里我需要给那些使用SpringMVC的同学提个醒。Annotation进行UrlMapping在大型的web应用中的可维护性是值得质疑的。在团队开发中,这一问题显得格外严重。所以,请不要神化SpringMVC的某些功能。谢谢。



说实话,我是很赞同你的,能够把struts2源码通读很了不起

Annotation进行UrlMapping确实在大型的项目里面会有问题,约定很重要,约定不好肯定会非常难维护,主要开发速度快了,大家也就忍受这个了
147 楼 icewubin 2010-08-28  
shiren1118 写道
icewubin 写道
shiren1118 写道
superyang 写道
struts2 比 spring mvc 应该肯定比较好。

一个action 跟一个javabean 一样 ,简单、清晰。

url 跳转维护可以在多个struts-config.xml 上统一维护。如果换成spring ,要在每一个类上声明注释上一个个改。。
struts2 url 映射是相当灵活的。。。

strut2在web层开发效率肯定比srping mvc快。。。..


<action name="index">
<result name='to_index'>index.jsp</result>
<result name='to_regist'>regist.jsp</result>
<result name='to_login'>login.jsp</result>
。。。。
</action>



没用过spring mvc吧?spring2.5前都是在xml里写的,现在2种都支持,只不过注解用的比较方便,都不提xml了

示例:

<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="index.htm">indexController</prop>
            </props>
        </property>
</bean>

struts2早就可以通用配置:
    <package name="test" namespace="" extends="default">
        <action name="*-*" class="{1}Action" method="{2}">
            <result>/WEB-INF/tpl/{1}-{2}.vm</result>
        </action>
    </package>




你觉得这有啥可炫耀的吗?spring的多view解析实现这个跟玩一样

看看这兄弟的帖子吧http://www.iteye.com/topic/748006

你的回答非常的可笑,我只不过举了个例子,反驳某些人的某个不足以说明问题的论据,并不是在支持struts2。
在你眼里就变成了“炫耀”,你是被打了鸡血了么?
我再重复一次,本人没有说struts2更优秀。
在技术上谁更优秀本身也没有意义,优秀的技术被淘汰的多了去了。
如果两个技术差距不算太大的话,决定哪项技术更有前途绝对不是某个框架胜出个一点半点,只要这个框架基本满足需要,没有特别大的缺点,就足够了。
没有一个框架是没有缺点,关键还是看他相比其他框架的缺点到底有多少,是否可以接受。

而且框架对比不能只考虑技术优秀与否,学些成本、普及程度都必须考虑进去。

相关推荐

    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 2.5 ...

    spring-webmvc-struts.jar

    spring-webmvc-struts.jar对Struts和Spring整合时需要用到的包

    struts1原理,struts2原理,spring mvc原理,struts1和struts2,struts和spring mvc

    **Struts2与Spring MVC比较:** 1. **灵活性**:Spring MVC允许更多的自定义,如自定义拦截器、视图解析器,而Struts2的扩展性相对弱些。 2. **依赖注入**:Spring MVC是Spring框架的一部分,天然支持DI,而Struts2...

    Spring3-MVC与Struts2.x比较.pdf

    下面我们将详细探讨Spring MVC的核心组件、工作流程以及与Struts2.x的比较。 1. **Spring MVC 核心组件** - **DispatcherServlet**:Spring MVC 的核心是DispatcherServlet,它作为一个前端控制器,负责接收请求...

    spring-webmvc-struts.jar aspectjweaver.jar

    2. Struts与Spring的整合,包括Action的配置、Service注入到Action、以及结果的处理。 3. 使用AspectJ的注解来定义切面,如`@Aspect`、`@Pointcut`、`@Before`、`@After`等。 4. 切面的织入策略,包括编译时织入和...

    Spring3-MVC与Struts2.x比较.docx

    3. **Interceptor**:类似于Spring MVC的HandlerInterceptor,Struts2的拦截器用于在Action执行前后执行特定任务。 4. **Result**:处理Action执行后的结果,决定如何展示给用户。 5. **ValueStack**:Struts2的...

    spring.jar spring-webmvc-struts.jar spring-webmvc.jar

    "spring-webmvc-struts"可能指的是Spring与Struts的集成包,Struts是另一个流行的Java Web MVC框架。这个库可能包含了一些桥接代码,帮助开发者将Spring的IoC(Inversion of Control,控制反转)和AOP功能与Struts的...

    spring-webmvc-struts-2.5.6-sources.jar

    spring-webmvc-struts-2.5.6-sources

    Spring+Spring MVC+Struts+hibernate开发摄影平台完整版系统

    《构建摄影平台:Spring+Spring MVC+Struts+Hibernate整合详解》 在现代Web开发领域,Spring框架以其灵活性和强大的企业级应用支持而备受青睐。本项目“Spring+Spring MVC+Struts+Hibernate开发摄影平台完整版系统...

    DWR与SPRING,DWR与STRUTS2的整合

    综上所述,"DWR与SPRING,DWR与STRUTS2的整合"主题涵盖了现代Java Web开发中重要的三个方面:DWR的实时通信能力、Spring的全面后端支持和Struts2的MVC架构。通过整合这三者,开发者可以构建出具有高效交互、灵活管理...

    ACCP 5.0 Y2 MVC和Struts2本书的选择题答案

    在IT行业中,MVC(Model-...理解并熟练运用MVC模式、Struts2框架、Spring框架以及Hibernate ORM,对于提升Java Web开发能力大有裨益。通过解答相关选择题,可以检验和巩固这些知识点的理解程度,进一步提升个人技能。

    搭建SSH框架需要引入的Struts2包(log4j,spring-web,struts2-spring-plugin)

    `struts2-spring-plugin-2.5.16.jar`是Struts2与Spring集成的插件,它使得Struts2可以利用Spring的依赖注入(DI)和面向切面编程(AOP)能力。通过这个插件,我们可以将Action类的实例化和管理交给Spring容器,从而...

    spring3+struts2+ibatis

    Spring3、Struts2和Ibatis的整合,构建了一个完整的MVC+持久层架构。Spring作为整个应用的调度中心,管理所有对象的生命周期,包括Struts2的Action和Ibatis的SqlSession。Struts2负责接收HTTP请求,调用Action执行...

    MVC注解Spring-Struts2Spring2hibernate3

    本项目“MVC注解Spring-Struts2Spring2hibernate3”结合了Spring、Struts2和Hibernate3这三大框架,以注解的方式实现了一个完整的MVC解决方案。下面将详细介绍这三个框架以及它们之间的协作。 首先,Spring框架是...

    Struts和Spring两种MVC框架究竟有什么不同呢?

    Spring MVC作为其Web层的一部分,与Struts相比,更加轻量级和灵活。Spring MVC通过DispatcherServlet作为入口点,处理HTTP请求,并通过配置或注解定义控制器(@Controller)。模型数据通常通过模型对象(Model或...

Global site tag (gtag.js) - Google Analytics