【职坐标】SpringMVC和struts2的区别对比

来源:互联网 发布:盗图投诉淘宝复审 编辑:程序博客网 时间:2024/05/22 14:07

第一点:机制不同

springMVC的入口是servlet,而struts2是filter(这里要指出,filter和servlet是不同的。以前认为filter是servlet的一种特殊),这样就导致了二者的机制不同,这里就牵涉到servlet和filter的区别了。

  1. springMVC入口代码
  <!-- 配置springmvc前端控制器 -->  <servlet>      <servlet-name>springMVC</servlet-name>      <servlet-class> org.springframework.web.servlet.DispatcherServlet</servlet-class>      <init-param>          <param-name>contextConfigLocation</param-name>          <param-value>classpath:applicationContext.xml</param-value>      </init-param>      <!-- 容器启动时就初始化 -->      <load-on-startup>1</load-on-startup>  </servlet>  <!-- springMVC入口路径 -->  <servlet-mapping>      <servlet-name>springMVC</servlet-name>      <url-pattern>/</url-pattern>  </servlet-mapping>
  1. Struts2入口代码
  <!-- struts2入口过滤器 -->  <filter>      <filter-name>struts2</filter-name>      <filter-class>         org.apache.struts2.dispatcher.FilterDispatcher      </filter-class>   </filter>   <filter-mapping>      <filter-name>struts2</filter-name>      <url-pattern>/*</url-pattern>   </filter-mapping>

第二点:性能不同

spring会稍微比struts快。

  1. spring mvc:是基于方法的设计,,粒度更细,但要小心把握像在servlet控制数据一样。
  2. sturts是基于类。Struts中每次发一次请求都会实例一个action,每个action都会被注入属性

第三点:参数传递

此点请通过实例去领会。不做过多讲解


第四点:设计思想

  • struts更加符合oop的编程思想
  • spring在servlet上扩展。

第四点:intercepter的实现机制

  • struts有以自己的interceptor机制,spring mvc用的是独立的AOP方式 struts的配置文件量比springMVC大
  • 虽然struts的配置能继承,但是论使用上来讲,springMVC使用更加简洁,开发效率SpringMVC确实比struts2高。
  • springMVC是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上spring3mvc就容易实现restful url
  • struts2是类级别的拦截,一个类对应一个request上下文;实现restfulurl要费劲,因为struts2 action的一个方法可以对应一个url;而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了。
  • spring3 mvc的方法之间基本上独立的,独享request response数据,请求数据通过参数获取,处理结果通过ModelMap交回给框架方法之间不共享变量,而struts2搞的就比较乱,虽然方法之间也是独立的,但其所有Action变量是共享的,这不会影响程序运行,却给我们编码,读程序时带来麻烦。

第五点: Spring3 mvc的验证

支持JSR303,处理ajax的请求更是方便,只需一个注解@ResponseBody