全方位对比Strut2和SpringMVC

一,本质对比

分析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应用程序本身的耦合性。

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

时间: 2024-10-09 06:54:59

全方位对比Strut2和SpringMVC的相关文章

数据库管理哪家强?Devart VS Navicat 360°全方位对比解析

今天小编向大家推荐的是两个开发环节的主流数据库管理品牌,那么你知道这两款数据库管理软件品牌与数据库引擎配套的管理软件有什么区别吗?小编这就360°全方位为您解答: ★ 品牌介绍 Devart:拥有超过20年的经验,利用最新的技术创造创新的软件产品,专注于创建数据库工具.ALM解决方案.数据提供商.数据集成和备份解决方案以及Web和云服务.Devart是Microsoft银牌应用程序开发合作伙伴和Oracle合作伙伴网络(OPN)专业计划的银牌合作伙伴. Navicat( PremiumSoft)

MongoDB与CouchDB 全方位对比

http://blog.nosqlfan.com/html/1519.html 本文见于MongoDB官方网站,MongoDB与CouchDB 很相似,他们都是文档型存储,数据存储格式都是JSON型的,都使用JavaScript进行操作,都支持Map/Reduce.但是其实二者有着很多本质的区别,本文透过现象追寻本质,让你更好的理解mongodb 与CouchDB.nosqlfan 翻译如下: 原文链接:Comparing Mongo DB and Couch DB 1.MVCC(Multive

MongoDB与CouchDB全方位对比(转)

出处:http://www.csdn.net/article/2011-03-21/294226 本文见于MongoDB官方网站,MongoDB与CouchDB很相似,他们都是文档型存储,数据存储格式都是JSON型的,都使用Javascript进行操作,都支持Map/Reduce.但是其实二者有着很多本质的区别,本文透过现象追寻本质,让你更好的理解MongoDB与CouchDB. 1.MVCC(Multiversion concurrency control) MongoDB与CouchDB的一

玩转 SSH(六):SpringMVC + MyBatis 架构搭建(注解版)

一.创建 SSMVCAnnoDemo 项目 点击菜单,选择“File -> New Project” 创建新项目.选择使用 archetype 中的 maven-webapp 模版创建. 输入对应的项目坐标GroupId 和 ArtifactId 之后在项目名称中填入项目名称,这里我填的 ProjectName 和上文的 ArtifactId 相同,都是 SSMVCAnnoDemo. 点击确定后,等待 Maven 帮我们构建好项目的目录结构.当控制台显示 BUILD SUCCESS 就表示初始化

apm监控分析及pinpoint和skywalking对比

一. 什么是APM? APM (Application Performance Management) 即应用性能管理,属于IT运维管理(ITOM)范畴.主要是针对企业 关键业务的IT应用性能和用户体验的监测.优化,提高企业IT应用的可靠性和质量,保证用户得到良好的服务,降 低IT总拥有成本(TCO). 二. 介绍 (1)追踪一切 无论是业务服务还是微服务,要做到收取流失的数据,还有所有组件健康检查,还要做到数据的分析. 服务关联元数据 监控是分层的,只知道一个服务有问题,并不能定位这个服务的根

PlayJava SpringMVC与Struts2杂谈

一 先做一个简单对比: 1. SpringMVC的入口是Servlet,核心是DispatcherServlet,Struts2是Filter,核心是FilterDispatcher 2. SpringMVC应当会比Struts2稍微快些.SpringMVC是基于方法设计,Struts2是基于类,即每发一次请求都会实例一个Action 3. SpringMVC使用相对简洁一些,支持JSR303,处理ajax请求更加方便,开发效率应当会比Struts2要高些 4. Struts2的OGNL表达式使

MongoDB---前世今生

MongoDB的官方文档基本是how to do的介绍,而关于how it worked却少之又少,本人也刚买了<MongoDB TheDefinitive Guide>的影印版,还没来得及看,本文原作者将其书中一些关于MongoDB内部现实方面的一些知识介绍如下,值得一看. 今天下载了<MongoDB The Definitive Guide>电子版,浏览了里面的内容,还是挺丰富的.是官网文档实际应用方面的一个补充.和官方文档类似,介绍MongoDB的内部原理是少之又少,只有在附

MongoDB资料汇总(转)

原文:MongoDB资料汇总 上一篇Redis资料汇总专题很受大家欢迎,这里将MongoDB的系列资料也进行了简单整理.希望能对大家有用. 最后更新时间:2013-04-22 1.MongoDB是什么 MongoDB介绍PPT分享 MongoDB GridFS介绍PPT两则 初识 MongoDB GridFS MongoDB GridFS 介绍 一个NoSQL与MongoDB的介绍PPT MongoDB:下一代MySQL? 写给Python程序员的MongoDB介绍 又一篇给Python程序员的

【2014,羽翼渐丰振翅飞】

时间飞逝,过完了一年又一年,过着过着发现自己真长大了,大年初二的日子里便嗅到了北漂的味道. 从上半年的转变到下半年的投入,我品尝到了学习的甘甜,是一种满足感. 8月,复习了J2SE,常用类,容器,IO,线程等,容器往小了说,可以是VB中的Frame控件,在java中可以是一个List,在web上,它便是应用服务器中位于组件和平台之间的接口集合,我们可以理解它为有很多属性和方法,能提供很多种服务,将对象扔到容器中,它便享有了容器提供的各种服务.而线程和进程,却是一个很基础的概念,属于操作系统的范畴