标签:
现在javaWeb开发流行用的模式是 mvc , 关于controller层, 有两个主流: 一是springMVC ,一是 Struts2
springmvc:
1.机制: springmvc 入口是servlet
2.性能: springmvc是基于方法设计的,是方法级别的拦截,拦截到方法后根据参数上的注解,把request数据注入进去;
粒度更细,所以小心把握像在servlet控制数据一样;springmvc中一个方法就对应一个request上下文
3.参数共享: 由于springmvc中一个方法对应一个request上下文, 所以参数不具有共享性
4.设计思想: spring比较谨慎,在servlet上扩展
struts2:
1.机制: struts2 入口是 filter
<filter>
<filter-name>action</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter
<filter-mapping>
<filter-name>action</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2.性能: struts2 是基于类的设计, 是类级别的拦截,每次请求就创建一个Action,然后调用setter getter方法把request中的数据注入;
struts2实际上是通过setter getter方法与request打交道的;struts2中,一个Action对象对应一个request上下文。
3.参数共享: 由于Struts中一个action对应一个request上下文, 所以参数在类中的各个方法中是可以共享的
4.设计思想: struts基于oop的编程思想
ps:关于servlet与filter区别,请看下一章,关于这里的上下文request,这个如若不明白,那就要去了解http,oop编程思想
总结: springmvc 与 struts2 的区别
主要体现在intercepter(拦截器)的实现机制:
struts有以自己的interceptor机制,spring mvc用的是独立的AOP方式。
这样导致struts的配置文件量比spring mvc大,虽然struts的配置能继承,
论使用上来讲,spring mvc使用更加简洁,开发效率Spring MVC确实比struts2高。
spring mvc是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上spring3 mvc就容易实现restful url。
struts2是类级别的拦截,一个类对应一个request上下文;实现restful url要费劲,因为struts2 action的一个方法可以对应一个url;而其类属性却被所有方法共享,
这也就无法用注解或其他方式标识其所属方法了。
spring3 mvc的方法之间基本上独立的,独享request response数据,请求数据通过参数获取,处理结果通过ModelMap交回给框架方法之间不共享变量,
而struts2搞的就比较乱,虽然方法之间 也是独立的,但其所有Action变量是共享的,这不会影响程序运行,却给我们编码,读程序时带来麻烦。
标签:
原文地址:http://www.cnblogs.com/yiyongyao/p/4500704.html