同是流行MVC框架,比较Strtus2和SpringMVC的区别

保姆级教程:在Davinci Configurator里配置BswM的ECU状态机(附状态切换流程图) 本文提供了一份详细的AUTOSAR BswM模块配置指南,通过Davinci Configurator工具实现ECU状态机的构建与管理。内容涵盖从模式请求端口创建到状态切换规则定义的全流程,特别针对Ecu State Handling进行了深入解析,并附有状态切换流程图,帮助汽车电子工程师高效完成ECU状态管理配置。 阅读详情

一、SpringMVC的工作流程描述

      1. 用户向服务器发送请求,请求被Spring前端控制Servelt DispatcherServlet捕获;

      2. DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回;

      3. DispatcherServlet根据获得的Handler,选择一个合适的HandlerAdapter。( 附注 :如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(...)方法、

   4.  提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。在填充Handler的入参过程中,根据你的配置,Spring将帮你做一些额外的工作:

      HttpMessageConveter:将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息

      数据转换:对请求消息进行数据转换。如String转换成Integer、Double等

      数据根式化:对请求消息进行数据格式化。如将字符串转换成格式化数字或格式化日期等

      数据验证:验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中

      5.  Handler执行完成后,向DispatcherServlet 返回一个ModelAndView对象;

      6.  根据返回的ModelAndView,选择一个适合的ViewResolver(必须是已经注册到Spring容器中的ViewResolver)返回给DispatcherServlet ;

      7. ViewResolver结合Model和View,来渲染视图

      8.将渲染结果返回给客户端。

Strut2的体系结构如图所示:



从图可以看出,一个请求在Struts2框架中的处理大概分为以下几个步骤:

1、客户端初始化一个指向Servlet容器(例如Tomcat)的请求;

2、这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMeshPlugin);

3、接着StrutsPrepareAndExecuteFilter被调用,StrutsPrepareAndExecuteFilter询问ActionMapper来决定这个请求是否需要调用某个Action;

4、如果ActionMapper决定需要调用某个Action,StrutsPrepareAndExecuteFilter把请求的处理交给ActionProxy;

5、ActionProxy通过ConfigurationManager询问框架的配置文件,找到需要调用的Action类;

6、ActionProxy创建一个ActionInvocation的实例。

7、ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。

8、一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2框架中继承的标签。在这个过程中需要涉及到ActionMapper。


以上是从宏观上对比下二者的工作流程,下面针对细节对比二者的不同。

SpringMVC和Struts2的区别:

1. 机制:

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

  1. spr ing mvc是基于方法的设计 , 而sturts是基于类 ,导致:

性能:

spring会稍微比struts快。 spring mvc是基于方法的设计 , 而sturts是基于类 ,每次发一次请求都会实例一个action,每个action都会被注入属性,而spring基于方法,粒度更细,但要小心把握像在servlet控制数据一样。spring3mvc是方法级别的拦截,拦截到方法后根据参数上的注解,把request数据注入进去,在spring3mvc中,一个方法对应一个request上下文。而struts2框架是类级别的拦截,每次来了请求就创建一个Action,然后调用settergetter方法把request中的数据注入; struts2实际上是通过setter getter方法与request打交道的 ,而 springmvc 不用 setter getter 方法 ;struts2中,一个Action对象对应一个request上下文。

实现restful:

springmvc是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上 spring3 mvc就容易实现restful url 。 struts2 是类级别的拦截,一个类对应一个 request上下文;实现 restfulurl 要费劲,因为 struts2 action 的一个方法可以对应一个 url ;而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了。

数据共享:

struts是在接受参数的时候,可以用属性来接受参数,这就说明参数是让多个方法共享的。

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

  1. 处理ajax的请求

spring3 mvc的验证也是一个亮点,支持JSR303, 处理ajax的请求更是方便 ,只需一个注解 @ResponseBody   ,然后直接返回响应文本即可。送上一段代码:  

<span style="font-family:SimSun;font-size:18px;">@ResponseBody@RequestMapping("/delUser")public String delUser(String id, HttpServletResponse response){String result ="{/"result/":/"error/"}";if (userManager.delUser(id)) {result ="{/"result/":/"success/"}";} return result; //spring3mvc的验证也是一个亮点,支持JSR303,处理ajax的请求更是方便,只需一个注解@ResponseBody//@ResponseBody代替了下面的代码 //PrintWriterout = null;//response.setContentType("application/json");////try{//out= response.getWriter();//out.write(result);//}catch (IOException e) {//e.printStackTrace();//}}</span>

  1. i ntercepter的实现机制:

struts有以自己的interceptor机制, springmvc用的是独立的AOP方式 。这样导致struts的配置文件量还是比springmvc大,虽然struts的配置能继承,所以我觉得论使用上来讲,spring mvc使用更加简洁,开发效率Spring MVC确实比struts2高。


小结

    其实用什么技术,这一点真的没有硬性的要求,有人觉得struts好用,有人就觉得springMVC先进。总的来说,实现的功能都是大体一致的。有时候架构师一直使用struts,为了项目的稳定,就一直沿用;而一些先进分子总是喜欢在项目中常识新的技术,也促进了这项技术的发展。单就struts和springMVC来说,都是controller层的框架,作用都是接收request请求,中间调用业务逻辑代码,最后返回reponse响应,不用刻意远离SSH,也不用一味追求Spring MVC。总之,合适的就是最好的。





Altium Designer 超详细入门教程 本文是一份Altium Designer新手入门教程,详细介绍了从软件基础到PCB制版的全流程。主要内容包括:软件界面介绍与工程创建方法;原理图设计中的元件放置、电气连线、标注添加等操作;PCB设计的布局布线、铺铜和DRC检查;Gerber和钻孔文件的导出方法。教程还提供了分类整理的实用快捷键表和新手避坑指南,强调原理图编译和DRC检查的重要性。通过本教程,新手可以快速掌握AD基本操作,完成简单电路板的设计与制版文件导出。 阅读详情

相关推荐

正确使用 SGLang 和 vLLM 中为 Qwen3 开启工具调用能力的完整指南

本文介绍了在vLLM和SGLang框架中部署Qwen3大模型并启用工具调用功能的方法。主要内容包括:vLLM中需配置--tool-call-parser hermes和--enable-auto-tool-choice参数,SGLang中使用--tool-call-parser qwen25参数;提供了完整的部署命令示例和测试工具调用的curl请求模板;对比了两个框架的关键参数差异;总结了常见问题解决方案和性能优化建议。正确配置后,Qwen3能够充分发挥其外部工具调用能力,为AI应用开发提供支持。

Ven%的博客 4447

SpringMVC 、Struts2之间的区别

一、Spring与SpringMVC的区别: spring是一个开源框架,是为了解决企业应用程序开发,功能如下: 功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能 范围:任何Java应用 Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。 1、轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是...

5578

Cisco Secure ACS 5.8.0.32 安装 + Crack 教程

在ESXi 6.7 上经历过无数次的安装尝试测试了各种兼容版本都没有安装成功,记最后一次安装成功的过程.

Junior's Blog 3536

struts2和springmvc浅谈

又是一年求职季,在这里,我为各位准备了一套Java程序员精选高频面试笔试真题,来帮助大家攻下BAT的offer,题目范围从初级的Java基础到高级的分布式架构等等一系列的面试题和答案,用于给大家作为参考以下是部分内容截图《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!准备了一套Java程序员精选高频面试笔试真题,来帮助大家攻下BAT的offer,题目范围从初级的Java基础到高级的分布式架构等等一系列的面试题和答案,用于给大家作为参考以下是部分内容截图。

2301_76238237的博客 1102

excel wind插件使用_Python和wind的交互—在债券中的应用

个人认为学会了怎么用python和wind交互以及怎么用python处理Excel数据,就基本能替换日常很多琐碎的债券工作,还不用担心Excel某个值改变了导致整个报表都毁了。事实上在python调用wind函数和在Excel中调用函数一样简单,只要会基本的操作就够了。下面详细的介绍如何用python和wind进行交互。首先安装好python+pycharm+wind。因为python...

weixin_39863918的博客 5328

墨水屏高效开发:架构、开源库与实战优化指南

嵌入式显示技术中,电子墨水屏以其类纸观感和超低功耗特性,在电子书阅读器、智能办公本及工业仪表等场景中占据独特地位。其工作原理基于微胶囊电泳技术,仅在画面刷新时消耗电能,静态显示时功耗近乎为零,这带来了极致的续航优势。为实现流畅的交互体验,开发者需构建分层渲染架构,通过硬件抽象层统一驱动接口,并引入帧缓冲与差异比较算法智能决策局部刷新区域,从而大幅降低刷新延迟与功耗。开源库如GxEPD2和LVGL为墨水屏适配提供了关键支持,结合波形文件管理与电源优化策略,能有效解决残影与卡顿问题。本文聚焦于eink墨水屏高效

weixin_42545636的博客 410

Spring MVC与Struts2区别?思维导图 代码示例(java 架构)

Spring MVC 和 Struts2 各有特点,适用于不同的应用场景。Spring MVC 更加现代化,强调松耦合和依赖注入,拥有更好的扩展性和灵活性;而 Struts2 则更适合那些已经采用其架构的老项目或者特定需求下对命令模式有偏好的开发者。选择哪个框架取决于项目的具体要求和技术栈的选择。

qq_33240556的博客 1554

ABAP调用启信宝API

方法参数定义如下 源代码如下 method qxb_http_get. data:lv_url type string. "===============初始化=============================================== "获取http实例 cl_http_client=>create_by_destination( exporting destination = space importing

u012232542的博客 1311

Strtus2和SpringMVC的区别

Struts2和SpringMVC是比较流行的MVC框架,二者的工作流程大体相似,从下面两张图就可以看出。 SpringMVC工作流程图 图二  SpringMVC的工作流程描述       1. 用户向服务器发送请求,请求被Spring前端控制Servelt DispatcherServlet捕获;       2. DispatcherServle

第27号专栏 566

MOSFET开关损耗全面讲解:从原理到优化策略

深入剖析MOSFET开关损耗的产生机制,结合实际应用场景,讲解如何通过驱动设计和电路优化降低损耗,提升系统效率。重点关注mosfet在高频开关下的表现与热管理。

weixin_29476595的博客 1058

YOLOv11【第一章:零基础入门篇·第10节】YOLOv11项目实战:从零搭建检测系统!

🏆 本文收录于专栏 《YOLOv11实战:从入门到深度优化》。本专栏围绕 YOLOv11 的改进、训练、部署与工程优化 展开,系统梳理并复现当前主流的 YOLOv11 实战案例与优化方案,内容目前已覆盖 分类、检测、分割、追踪、关键点、OBB 检测 等多个方向。

**My Coding Family** 5769

比较Strtus2和SpringMVC的区别

一、SpringMVC的工作流程描述       1. 用户向服务器发送请求,请求被spring前端控制Servelt DispatcherServlet捕获;       2. DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Ha

AinUser的博客 1043

个人量化系统的策略集合与赚钱之道:全栈深度解析 + 与主流开源框架对比

前三篇把系统的"骨架"拆完了——架构、工程化、部署。本篇回答最关键的问题:一句话:别人的系统是"程序员的系统"(写代码才能加策略),daily_stock_analysis 是"股民的 YAML"(写中文就能加策略)。这个差异决定了它能在多大程度上真的帮你赚钱。如果你用过 、、,加一个策略的流程是: 问题在哪?在 daily_stock_analysis 里,“策略” = 一个文件。每个 YAML 是一个自然语言描述的交易策略,包括: 看到没? ——整个策略就是一段中文,零代码。任何会写字的人都能加新策略

shiter编写程序的艺术 151

springmvc和strtus2的区别

1.拦截机制Struts2a、Struts2框架是类级别的拦截,每次请求就会创建一个Action,和Spring整合时Struts2的ActionBean注入作用域是原型模式prototype(否则会出现线程并发问题),然后通过setter,getter吧request数据注入到属性。(请求先经过strtus.xml文件,匹配和url对应的action类也就是进行类级别的拦截。再根...

diaopengchao7875的博客 139

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Excel 的导入导出 Spring MVC和 strtus2 区别

private String fileName; /**   * 订单的Excel导出   */  public InputStream getExportOrderList() throws ParsePropertyException,    InvalidFormatException, IOException {   if (data == null) {    data =

kunkun378263的专栏 1415

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

SpringMVC和Struts2区别比较

1、Struts2是类级别的拦截, 一个类对应一个request上下文,SpringMVC是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上SpringMVC就容易实现restful url,而struts2的架构实现起来要费劲,因为Struts2中Action的一个方法可以对应一个url,而其类属性却被所有方法共享,这也就无法用注解或其他

西八没天台 383

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Spring MVC和Struts2的区别

把这张图放在这里,我是想说SpringMVC和Struts2真的是不一样的,虽然在都有着核心分发器等相同的功能组件(这些由MVC模式本身决定的)。   为什么SpringMVC会赢得最后的胜利呢?谈几点我自己的看法:   第一、MVC框架的出现是为了将URL从HTTP的世界中映射到JAVA世界中,这是MVC框架的核心功能。而在URL这一点SpringMVC无疑更加优雅。   第二、从设

燃烧JAVA 2118

Strtus2与Spring-MVC的区别?

1、Struts2是类级别的拦截, 一个类对应一个request上下文,SpringMVC是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上SpringMVC就容易实现restful url,而struts2的架构实现起来要费劲,因为Struts2中Action的一个方法可以对应一个url,而其类属性却被所有方法共享,这也就无法用注解或其他

y2017的博客 288
上一篇: getSession()和getCurrentSession()的区别及常见问题
下一篇: restful
满地节操1
博客等级 码龄10年 12粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值