详见:
Struts2 | Springmvc | |
机制 | 基于filter机制 | 基于servlet机制 |
处理方式 | Struts2框架是类级别的拦截,每次来了请求就创建一个Action,然后调用setter getter方法把request中的数据注入 Struts2实际上是通过setter getter方法与request打交道的。 Struts2中,一个Action对象对应一个request上下文。
| Springmvc是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应。 所以说从架构本身上 Springmvc就容易实现restful url。
|
性能 | Sturts2是基于类,每次发一次请求都会实例一個 action ,每个action都会被注入属性。 | Springmvc会稍微比Struts2快,Springmvc 是基于方法的设计。 |
参数传递 | Struts2是在接受参数的时候,可以用属性来接受参数, 这就说明参数是让多个方法共享的。 | Springmvc在接受参数的时候是基于方法的,每个方法都可设置自己的参数。 |
设计思想 | Struts2更符合oop的编程思想。struts2脱离了servlet ,Struts2的action可以是一个普通的java类。 | Springmvc在servlet上做扩展 |
Interceptor的实现机制 | Struts2有以自己的interceptor机制。 | spring mvc 用的是独立的AOP方式。 |
优点 |
Struts2的 多层拦截器、多实例action性能都很好,并不是导致性能问题的原因。 | 除了spring-mvc.xml,基本上可以做到零配置。方法的访问支持resutful风格,参数的传递和配置都很灵活,Spring3 mvc的验证也是一个亮点,支 支持JSR303,处理ajax的请求更是方便,只需一个注解@ResponseBody ,然后直接返回响应文本即可
|
缺点 | Struts2由于采用了值栈,OGNL表达式等,会导致性能下降,很严重的下降。如果避免或减少使用这些,性能还是很好的。 | 基于springmvc的注解非常灵活方便,但是不利于维护, 配置文件可以看清所有的mvc架构,易于维护,可读性强。
|
看Servelt规范:
引用
A filter is a reusable piece of code that can transform the content of HTTP requests, responses, and header information. Filters do not generally create a response or respond to a request as servlets do, rather they modify or adapt the requests for a resource, and modify or adapt responses from a resource.
简要翻译下: filter是一个可以复用的代码片段,可以用来转换HTTP请求、响应和头信息。Filter不像Servlet,它不能产生一个请求或者响应,它只是修改对某一资源的请求,或者修改从某一的响应。JSR303是javaEE6中的一项子规范,叫做 Bean Validation,用于对Java Bean中的字段值进行验证。