springMVC与struts2的区别

现在javaWeb开发流行用的模式是 mvc , 关于controller层, 有两个主流: 一是springMVC ,一是 Struts2

springmvc:

  1.机制: springmvc 入口是servlet

    1. <!-- Processes application requests -->  
    2. <servlet>  
    3.     <servlet-name>dispatcher</servlet-name>  
    4.     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
    5.     <load-on-startup>1</load-on-startup>  
    6. </servlet>  
    7.           
    8. <servlet-mapping>  
    9.     <servlet-name>dispatcher</servlet-name>  
    10.     <url-pattern>/*</url-pattern>  
    11. </servlet-mapping>

  2.性能: springmvc是基于方法设计的,是方法级别的拦截,拦截到方法后根据参数上的注解,把request数据注入进去;

             粒度更细,所以小心把握像在servlet控制数据一样;springmvc中一个方法就对应一个request上下文

  3.参数共享: 由于springmvc中一个方法对应一个request上下文, 所以参数不具有共享性

  4.设计思想: spring比较谨慎,在servlet上扩展

 

struts2:

 1.机制: struts2 入口是 filter

          <filter>
              <filter-name>action</filter-name>
              <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
          </filter

          <filter-mapping>
              <filter-name>action</filter-name>
              <url-pattern>/*</url-pattern>
          </filter-mapping>

 

 2.性能:  struts2 是基于的设计, 是类级别的拦截,每次请求就创建一个Action,然后调用setter getter方法把request中的数据注入;

            struts2实际上是通过setter getter方法与request打交道的;struts2中,一个Action对象对应一个request上下文。

 3.参数共享: 由于Struts中一个action对应一个request上下文, 所以参数在类中的各个方法中是可以共享的

 4.设计思想: struts基于oop的编程思想

ps:关于servlet与filter区别,请看下一章,关于这里的上下文request,这个如若不明白,那就要去了解http,oop编程思想

 

总结: springmvc 与 struts2 的区别

    主要体现在intercepter(拦截器)的实现机制:

    struts有以自己的interceptor机制,spring mvc用的是独立的AOP方式。

    这样导致struts的配置文件量比spring mvc大,虽然struts的配置能继承,

    论使用上来讲,spring mvc使用更加简洁,开发效率Spring MVC确实比struts2高。

    spring mvc是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上spring3 mvc就容易实现restful url。

    struts2是类级别的拦截,一个类对应一个request上下文;实现restful url要费劲,因为struts2 action的一个方法可以对应一个url;而其类属性却被所有方法共享,

    这也就无法用注解或其他方式标识其所属方法了。

    spring3 mvc的方法之间基本上独立的,独享request response数据,请求数据通过参数获取,处理结果通过ModelMap交回给框架方法之间不共享变量,

    而struts2搞的就比较乱,虽然方法之间 也是独立的,但其所有Action变量是共享的,这不会影响程序运行,却给我们编码,读程序时带来麻烦。

 

posted on 2015-05-13 15:57  丿易小易  阅读(184)  评论(0编辑  收藏  举报

导航