码迷,mamicode.com
首页 > 编程语言 > 详细

全方位对比Strut2和SpringMVC

时间:2018-03-12 01:12:01      阅读:245      评论:0      收藏:0      [点我收藏+]

标签:isp   cut   table   spring   mvc框架   本质   end   height   cli   

一,本质对比

    分析web.xml,我们可以发现,一个Web应用程序主要由context-param、listener、filter、servlet四部分组成。一个前台http请求发到后台服务器时,Tomcat 等Web容器首先把请求转化成ServletRequest和ServletResponse两个对象,然后依次调用Web应用程序在web.xml文件中定义的如上4个环节。

    Filter实现filter接口,对ServletRequest对象进行一定的加工处理,然后把处理结果写入到ServletResponse对象中。一个Web应用程序可以有多个Filter,不同Filter之间依次串行执行。Filter接口的方法说明如下:

Method Summary
 void destroy()            Called by the web container to indicate to a filter that it is being taken out of service.
 void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)            The doFilter method of the Filter is called by the container each time a request/response pair is passed through the chain due to a client request for a resource at the end of the chain.
 void init(FilterConfig filterConfig)            Called by the web container to indicate to a filter that it is being placed into service.

  

  Servlet实现servlet接口。一个Web应用程序只能有一个servlet。Servlet接口的方法说明如下:

Method Summary
 void destroy()            Called by the servlet container to indicate to a servlet that the servlet is being taken out of service.
 ServletConfig getServletConfig()            Returns a ServletConfig object, which contains initialization and startup parameters for this servlet.
 java.lang.String getServletInfo()            Returns information about the servlet, such as author, version, and copyright.
 void init(ServletConfig config)            Called by the servlet container to indicate to a servlet that the servlet is being placed into service.
 void service(ServletRequest req, ServletResponse res)            Called by the servlet container to allow the servlet to respond to a request.

    Strut2通过org.apache.struts2.dispatcher.ng.filter. StrutsPrepareAndExecuteFilter切入到web.xml中,其本质为一个Filter。

    SpringMVC通过org.springframework.web.servlet.DispatcherServlet切入到web,xml中,其本质为一个servlet。

二,入参绑定对比

    Struts2是基于类开发的,Struts2框架会自动把前台浏览器传入的参数自动绑定到类的成员变量中。考虑到多线程访问相同成员变量,Struts2默认为每个前台request创建一个独立的Action对象。

    Struts2+Spring模式,如果Action是通过spring定义的单例bean,在多线程场景下,不能直接使用类成员变量,需要实时从request对象中获取浏览器入参。

    SpringMVC是基于方法开发的,前台浏览器传入的参数会自动被SpringMVC框架绑定到controller中接收该请求的方法的形参上。

三,返回值绑定对比

    Struts2 Action没有返回值,需要开发人员手动把处理结果写入到ServletRequest或ServletResponse对象中    

    SpringMVC Controller中的方法定义支持ModelAndView, Model, ModelMap, Map,View, String, void等多种返回值类型。SpringMVC框架自动对这些类型的返回值进行后续处理。

总结:

    通过以上分析,我们可以发现SpringMVC比Struts2功能更强大,使用也更简单。尤其在Spring被业界广泛作为java开发首选框架的今天,其与Spring的强绑定不仅没有限制其灵活性,反而减少了很多兼容性问题。

    相反,Struts2对Spring没有依赖关系,没有spring的世界里,其依旧可以生存。而且Struts2对Web应用程序的切入面小于SpringMVC(一个Web应用程序可以有多个filter,但只能有一个servlet),降低了其与Web应用程序本身的耦合性。

   

 

   

全方位对比Strut2和SpringMVC

标签:isp   cut   table   spring   mvc框架   本质   end   height   cli   

原文地址:https://www.cnblogs.com/zhangshuai15114842302/p/8543459.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!