springMVC:
Spring 框架是高度可配置的,而且包含多种视图技术,例如 JavaServer Pages(JSP)技术、Velocity、Tiles、iText 和POI。Spring MVC 框架并不知道使用的视图,所以你可以自主的选择视图。Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。
struts+spring+hiberante:
SSH 框架的系统从职责上分为四层:表示层、业务逻辑层、数据持久层和域模块层,以帮助开发人员在短期内搭建结构清晰、可复用性好、维护方便的Web应用程序。 其中使用Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,控制业务跳转,利用Hibernate框架对持久层提供 支持,Spring做管理,管理struts和hibernate。具体做法是:用面向对象的分析方法根据需求提出一些模型,将这些模型实现为基本的 Java对象,然后编写基本的DAO(Data Access Objects)接口,并给出Hibernate的DAO实现,采用Hibernate架构实现的DAO类来实现Java类与数据库之间的转换和访问,最 后由Spring做管理,管理struts和hibernate。
优缺点总结:
1,基于注解,stuts2虽然也有注解但是比较慢,没人用更多的时候是用xml的形式
2,能与spring其它技术整合比如说webflow等,
3,获取request及session对象比较简单,直接当参数值传入就行了,而struts2还需要通过ServletActionContext 对象获取
4,验证也比较简单,通过jsr-303就能实现,而不必写其它的代码,而struts2是通过写 actionName-validation.xml实现的
在说struts2的优点:
1,不必关注客户端是get提交还是set提交,springMvc的地址映射注解method是必须要被关注的
2,自动封装对象,springMvc,是封装在model里的只能在,所以会看到input框的数字类型有0或是0.0的选项
3,自定义结果类型,如xml什么的而springmvc确只能返回modelandView,或是不返回
4,将视图与结果解耦,因为struts2返回的是字符串,只有通过struts.xml才知道具体的是哪一个jsp,或是html,而springMvc只能明确的返回modelAndview
5,struts2 不需要专门的中文过滤器,而springMvc3需要配置
针对标签来说它们大同小异,但是当需要自动装配时 springMnc的form表单是必须使用的,而struts2则不用,其它功能上差不多,但效率上,springMvc的标签比struts2快因 为,struts2通过request建立了堆和栈,所以效率上有所下降,我推荐还是用jsp自带标签不仅易于扩展而且,效率也不错
再说应用场景:如果都是成功之后跳一个页面的那两者都可以,而如果是其它的类型,那么struts2是一个不错的选择,举个例子来说 Extjs4.0 增加对象自动装配struts2能实现,但springMvc就不行,除非你喜欢大量的request.getParamter()
6,性能:
spring会稍微比struts快。 spring mvc是基于方法的设计 , 而sturts是基于类 , 每次发一次请求都会实例一个action,每个action都会被注入属性,而spring基于方法,粒度更细,但要小心把握像在servlet控制数据 一样。spring3mvc是方法级别的拦截,拦截到方法后根据参数上的注解,把request数据注入进去,在spring3mvc中,一个方法对应一 个request上下文。而struts2框架是类级别的拦截,每次来了请求就创建一个Action,然后调用settergetter方法把 request中的数据注入; struts2实际上是通过setter getter方法与request打交道的 ,而 springmvc 不用 setter getter 方法 ;struts2中,一个Action对象对应一个request上下文。
实现restful:
springmvc是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上 spring3 mvc就容易实现restful url 。 struts2 是类级别的拦截,一个类对应一个 request 上下文;实现 restfulurl 要费劲,因为 struts2 action 的一个方法可以对应一个 url ;而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了。
数据共享:
struts是在接受参数的时候,可以用属性来接受参数,这就说明参数是让多个方法共享的。
spring3 mvc的方法之间基本上独立的,独享request response数据,请求数据通过参数获取,处理结果通过ModelMap交回给框架方法之间不共享变量
小结:
其实用什么技术,这一点真的没有硬性的要求,有人觉得struts好用,有人就觉得springMVC先进。总的来说,实现的功能都是大体一致的。有时候 架构师一直使用struts,为了项目的稳定,就一直沿用;而一些先进分子总是喜欢在项目中常识新的技术,也促进了这项技术的发展。单就struts和 springMVC来说,都是controller层的框架,作用都是接收request请求,中间调用业务逻辑代码,最后返回reponse响应,不用 刻意远离SSH,也不用一味追求Spring MVC。总之,合适的就是最好的。
其它后续补充。。。。。。。