springmvc与struts2比较

springmvc与struts2比较
1、springmvc的入口是servlet,struts2是filter.
2、springmvc是方法级别的拦截,struts2是类级别的拦截。
3、struts2有自己的interceptor机制,springmvc用的是独立的AOP方式。
4、springmvc对ajax的支持上优于struts2.
5、springmvc性能略高于struts2.


1、springmvc的入口是servlet,struts2是filter

filter和servlet的区别
filter不是一个servlet,它不能产生response,它能够在一人request到达servlet之前预处理request,也可以在离开servlet时处理response。换种说法,filter其实是一个"serlvet chaining"(servlet链)。
一个filter包括:
(1)、在servlet被调用之前截获
(2)、在servlet被调用之前检查servlet request
(3)、根据需要修改request头和request数据
(4)、根据需要修改response头和response数据
(5)、在servlet被调用之后截获
而servlet为用户发送一个请求,通过servlet容器调用servlet的init()方法初始化servlet,并调用servlet的service()方法对请求进行处理,并将处理结果通过response返回给用户。

filter和拦截器的区别
(1)、拦截器是基于java反射机制的,而filter是基于函数回调的。
(2)、filter依赖于servlet容器,而拦截器不依赖与servlet容器。
(3)、拦截器只能对action请求起作用,而filter则可以对几乎所有请求起作用。
(4)、拦截器可以访问action上下文、值栈里的对象,而filter不能。
filter是在java web中,用户传入request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者action进行业务逻辑。
比如过滤一些特殊字符.
action执行前后执行拦截器本身提供的各种Web功能需求。


2、springmvc是方法级别的拦截,struts2是类级别的拦截。
springmvc是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,参数的传递是直接注入到方法听,是该方法独有的。
struts2是类级别的拦截,一个类对应一个request上下文,struts2是在接受参数的时候,可以用属性来接受参数,这就说明参数是让多个方法共享的,这也就是无法用注解或其他方式标识其他所属的方法了。


3、struts2有自己的interceptor机制,springmvc用的是独立的AOP方式。
struts2有以自己的interceptor机制,spring mvc 用的是独立的AOP方式。这样导致struts2的配置文件量还是比spring mvc大,虽然struts2的配置能继承,spring mvc使用更加简洁。


4、springmvc对ajax的支持上优于struts2.
引入下面两个jar包
jackson-core-asl-1.8.7.jar  
jackson-mapper-asl-1.8.7.jar

spring的配置文件中要有这一行,才能使用到spring内置支持的json转换。如果你手工把POJO转成json就可以不须要使用spring内置支持的json转换。
<mvc:annotation-driven /> 
  使用@ResponseBody注解 


你可能感兴趣的:(springmvc与struts2比较)