详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt236
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的注解非常灵活方便,但是不利于维护, |
看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中的字段值进行验证。