您的位置:首页 > 编程语言 > Java开发

struts2与springMVC深入对比(一)

2015-10-23 15:49 429 查看
struts2和springMVC 都是非常优秀的MVC框架,都可以与spring进行整合,对于二者的区别的探讨,网上有很多的文章,但是希望用自己的方式来总结一下,如果有不当的地方,欢迎共同探讨、交流!

 

一、核心控制器及执行原理:

       struts的核心控制器是StrutsPrepareAndExecuteFilter,当客户端发起一个httpservletRequest请求时,会被web.xml中配置的strutsFilter所拦截,web.xml配置如下:

      <filter>

           <filter-name>StrutsFilter</filter-name>

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

    </filter>

   <filter-mapping>

         <filter-name>StrutsFilter</filter-name>

        <url-pattern>/*</url-pattern>

</filter-mapping>

 

拦截后,进入StrutsPrepareAndExecuteFilter,这个核心的过滤器在初始化的时候会加载struts2的三个配置文件,包含struts-default.xml,struts-plugin.xml,   struts.xml。

执行原理:

1、请求先通过ActionContextCleanUp-->FilterDispatcher 

2、FilterDispatcher通过ActionMapper来决定这个Request需要调用哪个Action (ActionMapper其实是HttpServletRequest和Action调用请求的一个映射,它屏蔽了Action对于Request等javaServlet类的依赖。)

3、如果ActionMapper决定调用某个Action,FilterDispatcher把请求的处理交给ActionProxy,这儿已经转到它的Delegate--Dispatcher来执行 

4、ActionProxy根据ActionMapping和ConfigurationManager找到需要调用的Action类 

5、ActionProxy创建一个ActionInvocation的实例 

6、ActionInvocation调用真正的Action,当然这涉及到相关拦截器的调用 

7、Action执行完毕,ActionInvocation创建Result并返回,当然,如果要在返回之前做些什么,可以实现PreResultListener。添加PreResultListener可以在Interceptor中实现。

 

spring MVC是Spring内置的Web框架,可以作为应用项目的展示层,Spring MVC的核心是DispatcherServlet.

springMVC执行原理:

    

1、客户端发出一个http请求给web服务器,web服务器对http请求进行解析,如果匹配DispatcherServlet的请求映射路径(在web.xml中指定),web容器将请求转交给DispatcherServlet.

2、DipatcherServlet接收到这个请求之后将根据请求的信息(包括URL、Http方法、请求报文头和请求参数Cookie等)以及HandlerMapping的配置找到处理请求的处理器(Handler)。

3-4、DispatcherServlet根据HandlerMapping找到对应的Handler,将处理权交给Handler(Handler将具体的处理进行封装),再由具体的HandlerAdapter对Handler进行具体的调用。

5、Handler对数据处理完成以后将返回一个ModelAndView()对象给DispatcherServlet。

6、Handler返回的ModelAndView()只是一个逻辑视图并不是一个正式的视图,DispatcherSevlet通过ViewResolver将逻辑视图转化为真正的视图View。

7、Dispatcher通过model解析出ModelAndView()中的参数进行解析最终展现出完整的view并返回给客户端。

 

根据上面的说明,可以很很明显的看出,Spring MVC的核心是Servlet,DipatcherServlet根据请求中的url地址,找到controller中RequestMapping所配置的访问路径,而找到对应匹配的方法。

而struts2的核心是一个过滤器。FilterDispatcher通过ActionMapper来决定这个Request需要调用哪个Action,然后创建ActionProxy进行处理。所以说struts2是基于类的,而springmvc是基于方法的,从性能上说,springmvc优于struts2.

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java spring mvc struts2.0