struts2工作原理和mvc(SpringMVC 和Struts2的区别)

2024-06-05 05:28:33 76

struts2工作原理和mvc(SpringMVC 和Struts2的区别)

本文目录

SpringMVC 和Struts2的区别


1:spring3 mvc开发效率高于struts
2:
spring3 mvc可以认为已经100%零配置
3:
struts2是类级别的拦截, 一个类对应一个request上下文,
springmvc是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应
所以说从架构本身上 spring3 mvc就容易实现restful url
而struts2的架构实现起来要费劲
因为struts2 action的一个方法可以对应一个url
而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了
4:
spring3mvc的方法之间基本上独立的,独享request response数据
请求数据通过参数获取,处理结果通过ModelMap交回给框架
方法之间不共享变量
而struts2搞的就比较乱,虽然方法之间也是独立的,但其所有Action变量是共享的
这不会影响程序运行,却给我们编码 读程序时带来麻烦
5:
由于Struts2需要针对每个Request进行封装,把Request,Session等Servlet生命周期的变量封装成一个一个Map,供给每个Action使用,并保证线程安全。所以在原则上,是比较耗费内存的。

springmvc和struts2的区别


springmvc和struts都是对前台控制的功能,springmvc是用注解的方式进行控制的,struts2是通过配置配置文件里的action进行页面跳转传值,springmvc是线程不安全的,struts2是线程安全的,望采纳

关于SpringMVC和Struts2的区别


1、Struts2是类级别的拦截, 一个类对应一个request上下文,SpringMVC是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上SpringMVC就容易实现restful url,而struts2的架构实现起来要费劲,因为Struts2中Action的一个方法可以对应一个url,而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了。
2、由上边原因,SpringMVC的方法之间基本上独立的,独享request response数据,请求数据通过参数获取,处理结果通过ModelMap交回给框架,方法之间不共享变量,而Struts2搞的就比较乱,虽然方法之间也是独立的,但其所有Action变量是共享的,这不会影响程序运行,却给我们编码 读程序时带来麻烦,每次来了请求就创建一个Action,一个Action对象对应一个request上下文。
3、由于Struts2需要针对每个request进行封装,把request,session等servlet生命周期的变量封装成一个一个Map,供给每个Action使用,并保证线程安全,所以在原则上,是比较耗费内存的。
4、 拦截器实现机制上,Struts2有以自己的interceptor机制,SpringMVC用的是独立的AOP方式,这样导致Struts2的配置文件量还是比SpringMVC大。
5、SpringMVC的入口是servlet,而Struts2是filter(这里要指出,filter和servlet是不同的。以前认为filter是servlet的一种特殊),这就导致了二者的机制不同,这里就牵涉到servlet和filter的区别了。
6、SpringMVC集成了Ajax,使用非常方便,只需一个注解@ResponseBody就可以实现,然后直接返回响应文本即可,而Struts2拦截器集成了Ajax,在Action中处理时一般必须安装插件或者自己写代码集成进去,使用起来也相对不方便。
7、SpringMVC验证支持JSR303,处理起来相对更加灵活方便,而Struts2验证比较繁琐,感觉太烦乱。
8、Spring MVC和Spring是无缝的。从这个项目的管理和安全上也比Struts2高(当然Struts2也可以通过不同的目录结构和相关配置做到SpringMVC一样的效果,但是需要xml配置的地方不少)。
9、 设计思想上,Struts2更加符合OOP的编程思想, SpringMVC就比较谨慎,在servlet上扩展。
10、SpringMVC开发效率和性能高于Struts2。
11、SpringMVC可以认为已经100%零配置。

Spring MVC和Struts2有什么区别


1、Struts2是类级别的拦截, 一个类对应一个request上下文,SpringMVC是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,。

2、从架构本身上SpringMVC就容易实现restful url,而struts2的架构实现起来要费劲,因为Struts2中Action的一个方法可以对应一个url,而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了。

3、由于上述原因,SpringMVC的方法之间基本上独立的,独享request response数据,请求数据通过参数获取,处理结果通过ModelMap交回给框架,方法之间不共享变量,而Struts2搞的就比较乱。

4、虽然方法之间也是独立的,但其所有Action变量是共享的,这不会影响程序运行,却给我们编码 读程序时带来麻烦,每次来了请求就创建一个Action,一个Action对象对应一个request上下文。

5、由于Struts2需要针对每个request进行封装,把request,session等servlet生命周期的变量封装成一个一个Map,供给每个Action使用,并保证线程安全,所以在原则上,是比较耗费内存的。

6、 拦截器实现机制上,Struts2有以自己的interceptor机制,SpringMVC用的是独立的AOP方式,这样导致Struts2的配置文件量还是比SpringMVC大。


spring mvc和struts2的区别


1. 机制:
spring mvc的入口是servlet,而struts2是filter,这样就导致了二者的机制不同。
2. 性能:
spring会稍微比struts快。spring mvc是基于方法的设计,而sturts是基于类,每次发一次请求都会实例一个action,每个action都会被注入属性,而spring基于方法,粒度更细,但要小心把握像在servlet控制数据一样。spring3 mvc是方法级别的拦截,拦截到方法后根据参数上的注解,把request数据注入进去,在spring3 mvc中,一个方法对应一个request上下文。而struts2框架是类级别的拦截,每次来了请求就创建一个Action,然后调用setter getter方法把request中的数据注入;struts2实际上是通
setter getter方法与request打交道的;struts2中,一个Action对象对应一个request上下文。
3. 参数传递:
struts是在接受参数的时候,可以用属性来接受参数,这就说明参数是让多个方法共享的。
4. 设计思想上:
struts更加符合oop(面向对象编程)的编程思想, spring就比较谨慎,在servlet上扩展。
5. intercepter的实现机制:
struts有自己的interceptor机制,spring mvc用的是独立的AOP方式。

struts2的拦截器和springmvc的拦截器的区别


原理都是一样的,责任链设计模式。
区别就是用的地方不一样,拦截的位置不一样。
过滤器是web标准,一般配置在web.xml中,在遇到符合规则的请求时处理。
struts2拦截器,是struts提供的,配置在struts.xml中,拦截struts的Action请求并处理,如果你的请求不符合struts要求未被struts处理,则拦截器同样不会触发。
spring跟struts一样,只是由spring框架提供,未被spring管理的对象方法是不会被拦截的。

springmvc和struts2的机制各有什么利弊


把这张图放在这里,我是想说SpringMVC和Struts2真的是不一样的,虽然在都有着核心分发器等相同的功能组件(这些由MVC模式本身决定的)。

 

为什么SpringMVC会赢得最后的胜利呢?谈几点我自己的看法:

 

第一、MVC框架的出现是为了将URL从HTTP的世界中映射到JAVA世界中,这是MVC框架的核心功能。而在URL这一点SpringMVC无疑更加优雅。

 

第二、从设计实现角度来说,我觉得SpringMVC更加清晰。即使我们去对比Struts2的原理图和SpringMVC的类图,它依然很让人困惑,远没有SpringMVC更加直观:

SpringMVC设计思路:将整个处理流程规范化,并把每一个处理步骤分派到不同的组件中进行处理。

这个方案实际上涉及到两个方面:

l 处理流程规范化 —— 将处理流程划分为若干个步骤(任务),并使用一条明确的逻辑主线将所有的步骤串联起来

l 处理流程组件化 —— 将处理流程中的每一个步骤(任务)都定义为接口,并为每个接口赋予不同的实现模式

处理流程规范化是目的,对于处理过程的步骤划分和流程定义则是手段。因而处理流程规范化的首要内容就是考虑一个通用的Servlet响应程序大致应该包含的逻辑步骤:

l 步骤1—— 对Http请求进行初步处理,查找与之对应的Controller处理类(方法)   ——HandlerMapping

l 步骤2—— 调用相应的Controller处理类(方法)完成业务逻辑                    ——HandlerAdapter

l 步骤3—— 对Controller处理类(方法)调用时可能发生的异常进行处理            ——HandlerExceptionResolver

l 步骤4—— 根据Controller处理类(方法)的调用结果,进行Http响应处理       ——ViewResolver

正是这基于组件、接口的设计,支持了SpringMVC的另一个特性:行为的可扩展性。

 

第三、设计原则更加明朗。

    【Open for extension /closed for modification】

这条重要的设计原则被写在了Spring官方的reference中SpringMVC章节的起始段: A key design principle in SpringWeb MVC and in Spring in general is the “Open for extension, closed for modification” principle.

并且重点很好地体现在SpringMVC的实现当中,可以扩展,但却不能改变。我曾经扩展过Spring的IOC、AOP功能,这一点SpringMVC应该和Spring一脉相承。

 

第四、组件化的设计方案和特定的设计原则让SpringMVC形散神聚。

神 —— SpringMVC总是沿着一条固定的逻辑主线运行

形 —— SpringMVC却拥有多种不同的行为模式

SpringMVC是一个基于组件的开发框架,组件的不同实现体系构成了“形”;组件的逻辑串联构成了“神”。因此,“形散神不散”: SpringMVC的逻辑主线始终不变,而行为模式却可以多种多样。

第五、更加贴合Web发展的趋势,这个更加虚了,不再展开说这个 问题了。

 

第六、技术上的放缓导致了程序员对Struts2失去了热情,导致SpringMVC依靠自身的努力和Spring的口碑,逐渐显露了自身的优势和特点。

 

为什么SpringMVC会赢得最后的胜利呢?最后,我们不妨想一想Struts2是怎样流行起来的!

我自己是从Struts1用过来的,后来Struts1的问题很明显了,开源社区出现了很多的MVC框架,最为突出的是Webwork2。

Webwork2探索了一条与传统Servlet模型不同的解决方案,逐渐被大家熟识和理解,不断发展并得到了广大程序员的认可。它以优秀的设计思想和灵活的实现,吸引了大批的Web层开发人员投入它的 怀抱。

Apache社区与Opensymphony宣布未来的Struts项目将与Webwork2项目合并,并联合推出Struts2。

Struts2能够在一个相当长的时间段内占据开发市场主导地位的重要原因在于其技术上的领先优势。而这一技术上的领先优势,突出表现为对Controller的彻底改造:

public class UserController {
    private User user
    public String execute() {
        // 这里加入业务逻辑代码
       return “success“;
    }
}

从上面的代码中,我们可以看到Webwork2 /Struts2对于Controller最大的改造有两点:

在Controller中彻底杜绝引入HttpServletRequest或者HttpServletResponse这样的原生Servlet对象。

将请求参数和响应数据都从响应方法中剥离到了Controller中的属性变量。

这两大改造被看作是框架的神来之笔。因为通过这一改造,整个Controller类彻底与Web容器解耦,可以方便地进行单元测试。而摆脱了Servlet束缚的Controller,也为整个编程模型赋予了全新的定义。从引入新的编程元素的角度来说,Webwork2 / Struts2无疑也是成功的。因为在传统Servlet模式中的禁地Controller中的属性变量被合理利用了起来作为请求处理过程中的数据部分。这样的改造不仅使得表达式引擎能够得到最大限度的发挥,同时使得整个Controller看起来更像是一个POJO。因而,这种表现形态被笔者冠以的名称 是:POJO实现模式。POJO实现模式是一种具有革命性意义的模式,因为它能够把解耦合这样一个观点发挥到极致。从面向对象的角度来看,POJO模式无疑也是所有程序员所追求的一个目标。这也就是Webwork2 /Struts2那么多年来经久不衰的一个重要原因。

所以,我们看到第一条原因是Struts2依靠技术上的革新赢得了程序员的青睐。但是,这些年来Struts2在技术革新上的作为似乎步子就迈得比较小。我们可以看到,在JDK1.5普及之后,Annotation作为一种新兴的Java语法,逐渐 被大家熟知和应用。这一点上SpringMVC紧跟了时代的潮流,直接用于请求-响应的映射。而Struts2却迟迟无法在单一配置源的问题上形成突破。 当然,这只是技术革新上的一个简单的例子,其他的例子还有很多。

至少给人的感觉是这样的。在这一点上Struts并不是很沾光,因为Spring的口碑和影响力也客观程度上加深了大家对SpirngMVC是技术领导者的印象。


struts2工作原理和mvc(SpringMVC 和Struts2的区别)

本文编辑:admin

更多文章:


汇编语言中寄存器的英文全称?英文chuachua是什么意思

汇编语言中寄存器的英文全称?英文chuachua是什么意思

本文目录汇编语言中寄存器的英文全称英文chuachua是什么意思寄存器与暂存器的区别经常在单片机上用到寄存器,但是对寄存器不是很理解,请麻烦各位解释下汇编语言中寄存器的英文全称AH&AL=AX(accumulator):累加寄存器 BH&B

2023年11月6日 12:00

html转码(请问用jacob将html转word中文乱码怎么解决)

html转码(请问用jacob将html转word中文乱码怎么解决)

各位老铁们好,相信很多人对html转码都不是特别的了解,因此呢,今天就来为大家分享下关于html转码以及请问用jacob将html转word中文乱码怎么解决的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!本文目录请问用j

2024年10月14日 23:00

sql2005安装图解win7(我想请问,你是如何在win7家庭版中安装sql server 2005的)

sql2005安装图解win7(我想请问,你是如何在win7家庭版中安装sql server 2005的)

本文目录我想请问,你是如何在win7家庭版中安装sql server 2005的windows7 怎么装sql sever 2005不兼容如何win7如何安装aql2005win7怎么安装sql2005如何正确的安装SQL2005图解如何在

2024年5月25日 18:00

oracle对比两个表字段(oracle plsql 2个表字段对比更新问题)

oracle对比两个表字段(oracle plsql 2个表字段对比更新问题)

本文目录oracle plsql 2个表字段对比更新问题Oracle 建立触发器比较两张表相同字段的数据,再更新另一个字段oracle怎么核对两个表的数据是否一致oracle中现有A和B两个表,想用表B的字段与表A进行对比,如果表B无此记录

2024年7月23日 12:03

网站建设代理平台(北京有哪些不错靠谱的网站开发团队或工作室)

网站建设代理平台(北京有哪些不错靠谱的网站开发团队或工作室)

本文目录北京有哪些不错靠谱的网站开发团队或工作室网站建设公司选择哪家好有没有靠谱一点的网站建设公司网站平台建设我是网站建设公司,自助建站系统代理要选择哪一家好各位给推荐下呗北京有哪些不错靠谱的网站开发团队或工作室北京有哪些不错靠谱的网站开发

2024年7月1日 22:02

gradle 阿里云(如何用阿里云的API进行身份证识别)

gradle 阿里云(如何用阿里云的API进行身份证识别)

本文目录如何用阿里云的API进行身份证识别如何优化 Android Studio 启动,编译和运行速度阿里云android oss sdk怎么集成如何用阿里云的API进行身份证识别以下内容属于引用复制,但可以回复你的问题:准备工作:在lib

2024年7月16日 05:50

数据库管理系统和数据库系统分别侧重(数据库,数据库管理系统,数据库系统,这三个分别是什么意思并举个实例)

数据库管理系统和数据库系统分别侧重(数据库,数据库管理系统,数据库系统,这三个分别是什么意思并举个实例)

各位老铁们,大家好,今天由我来为大家分享数据库管理系统和数据库系统分别侧重,以及数据库,数据库管理系统,数据库系统,这三个分别是什么意思并举个实例的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大

2024年8月22日 07:35

随机抽取数字生成器(怎么在PPT里面插入一个随机数生成器)

随机抽取数字生成器(怎么在PPT里面插入一个随机数生成器)

本文目录怎么在PPT里面插入一个随机数生成器求一个“指定范围内随机数字生成器”怎么在PPT里面插入一个随机数生成器方法/步骤第一步:打开一个ppt文档,然后选择“开发工具”---》选择按钮控的件和文本框控件,并放在页面上第二步:右击按钮的控

2024年7月1日 23:05

discuz资源模板(discuz论坛模板问题)

discuz资源模板(discuz论坛模板问题)

本文目录discuz论坛模板问题谁能告诉我discuz首页的模板在哪个路径下吗discuz论坛模板问题diy文件不是来自于这个页面,不匹配用不了。diy区域要匹配,diy的id也要匹配。解决办法是复制示例站点代码重新diy。谁能告诉我dis

2024年7月14日 10:29

invalid oper是什么意思(invalid pointer operation什么意思)

invalid oper是什么意思(invalid pointer operation什么意思)

本文目录invalid pointer operation什么意思invalid是什么意思啊我的电脑总是提示一个错误InValidOpCode 是什么意思呀!!!~~~~~~~~~~~~~急 请高人给点意见中央空调锁死怎么办 墙面式遥控,写

2024年6月30日 13:31

js一共有几种数据类型(javascript的基本数据类型有哪些)

js一共有几种数据类型(javascript的基本数据类型有哪些)

大家好,js一共有几种数据类型相信很多的网友都不是很明白,包括javascript的基本数据类型有哪些也是一样,不过没有关系,接下来就来为大家分享关于js一共有几种数据类型和javascript的基本数据类型有哪些的一些知识点,大家可以关注

2024年10月23日 11:05

能力风暴机器人编程教程(如何控制能力风暴机器人走36边形和圆)

能力风暴机器人编程教程(如何控制能力风暴机器人走36边形和圆)

大家好,今天小编来为大家解答以下的问题,关于能力风暴机器人编程教程,如何控制能力风暴机器人走36边形和圆这个很多人还不知道,现在让我们一起来看看吧!本文目录如何控制能力风暴机器人走36边形和圆能力风暴机器人课程怎么样能力风暴课程特色能力风暴

2024年8月13日 04:45

twelve怎么读(十二英文怎么读音)

twelve怎么读(十二英文怎么读音)

本文目录十二英文怎么读音十二怎么读英语英语twelve怎么读twelve 怎么读twelve英语怎么读twelve这个英语单词怎么发音十二英文怎么读十二的英语单词是什么怎么读十二英文怎么读音十二英文是twelve,音标英 twelve英  

2024年7月9日 17:12

视频解析网站(今日头条上的视频qq浏览器下载不了啦,一些解析网站也都失败,怎么办)

视频解析网站(今日头条上的视频qq浏览器下载不了啦,一些解析网站也都失败,怎么办)

本文目录今日头条上的视频qq浏览器下载不了啦,一些解析网站也都失败,怎么办网上流传的各大视频网站vip视频解析是怎么做到的热门短视频数据分析平台哪个好微视视频去水印解析下载那里有免费的网易云视频解析下载小视频直看的解柝接口去哪里找如何将网站

2024年6月28日 00:15

求补码表示的二进制数真值(写出下列用补码表示的二进制数的真值(用十进制表示):)

求补码表示的二进制数真值(写出下列用补码表示的二进制数的真值(用十进制表示):)

这篇文章给大家聊聊关于求补码表示的二进制数真值,以及写出下列用补码表示的二进制数的真值(用十进制表示):对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录写出下列用补码表示的二进制数的真值(用十进制表示):二进制补码100100

2024年7月20日 04:54

bios怎么恢复出厂设置(BIOS怎么恢复出厂设置)

bios怎么恢复出厂设置(BIOS怎么恢复出厂设置)

本文目录BIOS怎么恢复出厂设置华硕主板bios怎么恢复出厂默认状态电脑主板bios恢复出厂默认设置方法华硕笔记本电脑BIOS怎么恢复出厂设置主板bios怎么恢复出厂设置电脑bios如何恢复出厂设置呢bios怎么恢复出厂设置电脑如何从bio

2024年7月17日 14:04

transfer怎么记忆(英语四六级词汇速记技巧之运用漫画轻松记忆)

transfer怎么记忆(英语四六级词汇速记技巧之运用漫画轻松记忆)

本文目录英语四六级词汇速记技巧之运用漫画轻松记忆如何不死记硬背英语单词英语四六级词汇速记技巧之运用漫画轻松记忆   小伙伴们对于厚厚的几本英语四六级词汇书都叫苦不迭。怎么样才能轻松不那么枯燥的记单词呢?我和大家分享一个方法就是看漫画记单词法

2024年7月13日 19:52

时间点和时间段的区别是什么?时间段是什么意思

时间点和时间段的区别是什么?时间段是什么意思

本文目录时间点和时间段的区别是什么时间段是什么意思什么叫时间段和时间点一天24小时时间段分别指什么时间时辰划分时间段是什么早上,上午,中午,下午,各是什么时间段什么是时间点和时间段时间段怎么分每个时间段是几点到几点时间段怎么分一天24小时是

2024年7月22日 07:26

train还有什么意思(train怎么读)

train还有什么意思(train怎么读)

其实train还有什么意思的问题并不复杂,但是又很多的朋友都不太了解train怎么读,因此呢,今天小编就来为大家分享train还有什么意思的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录train怎么读train

2024年7月24日 10:12

酒店小程序开发制作(做一个酒店行业的小程序大概需要多少钱)

酒店小程序开发制作(做一个酒店行业的小程序大概需要多少钱)

本文目录做一个酒店行业的小程序大概需要多少钱酒店宾馆开发小程序有什么优势酒店预订小程序是什么南宁小程序开发需要多少钱酒店预订类小程序开发,哪家好做一个酒店小程序多少钱酒店行业的小程序大概需要多少钱酒店预订小程序开发要注意哪些问题微信小程序如

2024年6月30日 17:14

近期文章

本站热文

iphone vpn设置(ios设置vpn快捷开关)
2024-07-22 15:01:12 浏览:2342
windows12正式版下载(操作系统Windows Server 2012 R2,在哪能下载到,公司用的)
2024-07-20 17:26:53 浏览:1736
client mfc application未响应(每次进cf就提示client MFC Application未响应该怎么办啊!急急急)
2024-07-20 11:15:58 浏览:1168
java安装教程(win10如何安装JAVA)
2024-07-19 19:55:49 浏览:1164
标签列表

热门搜索