拦截器和过滤器区别,Struts2与SpringMVC的区别

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zh854663752/article/details/80833503

拦截器和过滤器

1.拦截器是基于java反射机制的,而过滤器是基于函数回调的;

2.拦截器不依赖于servlet容器,而过滤器依赖于servlet容器

3.拦截器只能对Action请求起作用,而过滤器则可以对几乎所有请求起作用;

4.拦截器可以访问Action上下文、值栈里的对象,而过滤器不能;

5.Action的生命周期中,拦截器可以多次调用,而过滤器只能在容器初始化时被调用一次。


有多个拦截器和过滤器时,执行顺序跟他们在xml中的配置文件顺序有关


Struts2与SpringMVC的区别

springMVC默认是单例的,Struts2默认是多例的;

Springmvc的入口是一个servlet即前端控制器,而Struts2入口是一个filter过虑器;

Springmvc是基于方法开发(一个url对应一个方法),请求参数传递到方法的形参,可以设计为单例或多例(建议单例)struts2是基于类开发,传递参数是通过类的属性,只能设计为多例;

Struts2采用值栈存储请求和响应的数据,通过OGNL存取数据,Springmvc通过参数解析器是将request请求内容解析,并给方法形参赋值,将数据和视图封装成ModelAndView对象,最后又将ModelAndView中的模型数据通过reques域传输到页面,Jsp视图解析器默认使用JSTL


尽量不要在controller里面去定义属性,如果在特殊情况需要定义属性的时候,那么就在类上面加上注解@Scope("prototype")改为多例的模式,以前struts是基于类的属性进行发的,定义属性可以整个类通用,所以默认是多例,不然多线程访问肯定是共用类里面的属性值的,肯定是不安全的,但是springmvc是基于方法的开发,都是用形参接收值,一个方法结束参数就销毁了,多线程访问都会有一块内存空间产生,里面的参数也是不会共用的,所有springmvc默认使用了单例,所以controller里面不适合在类里面定义属性,只要controller中不定义属性,那么单例完全是安全的。springmvc这样设计主要的原因也是为了提高程序的性能和以后程序的维护只针对业务的维护就行,要是struts的属性定义多了,都不知道哪个方法用了这个属性,对以后程序的维护还是很麻烦的。

猜你喜欢

转载自blog.csdn.net/zh854663752/article/details/80833503