面试题整理--struts2与springmvc区别_zhouyy40308的博客-程序员秘密

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

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

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

4 拦截器实现机制上,Struts2有以自己的interceptor机制,SpringMVC用的是独立的AOP(面向切面编程)方式,这样导致Struts2的配置文件量还是比SpringMVC大。 

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

6SpringMVC集成了Ajax,使用非常方便,只需一个注解@ResponseBody就可以实现,然后直接返回响应文本即可,而Struts2拦截器集成了Ajax,在Action中处理时一般必须安装插件或者自己写代码集成进去,使用起来也相对不方便。 

7SpringMVC验证支持JSR303(Bean Validation),处理起来相对更加灵活方便,而Struts2验证比较繁琐,感觉太烦乱。  

8Spring MVCSpring是无缝的。从这个项目的管理和安全上也比Struts2高(当然Struts2也可以通过不同的目录结构和相关配置做到SpringMVC一样的效果,但是需要xml配置的地方不少)。

9 设计思想上,Struts2更加符合OOP的编程思想,SpringMVC就比较谨慎,在servlet上扩展。  

10SpringMVC性能高于Struts2 

11SpringMVC可以认为已经100%零配置(此处的零配置应理解为业务功能开发时,xml配置文件的编写)。


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zhouyy40308/article/details/78629672

智能推荐

unix/linux笔记(二)_在努力的松鼠的博客-程序员秘密

笔记一中从用户的角度来看Unix的话,基本操作就是用户登录,运行程序,用户推出,这样一套流程,但是,与此同时可能还有其他的用户也在登录、运行程序、退出,他们好像都工作在各自独立的空间中,但他们也可以发送即时信息来沟通。这就涉及到Unix系统的3个重要的属性通信、协作、网络访问。我们以Unix的计算器为例子。Unix的计算器bc启动计算器,输入bc即可,接着就可以输入计算表达式了,再回车就会返回结果,想退出按ctrl+D键。但是,严格意义上来讲,bc是不会做计算的。......

linux操作系统启动及排错详解_酒徒词客的博客-程序员秘密

linux操作系统的启动详解过程:              第一步: 首先BIOS初始化硬件设备和基本的硬件驱动。检测核心硬件设备的状况,设备良好则探测引导程序从usb,cdrom,硬盘。并将引导程序载入内存,将控制权交给MBR主引导记录。MBR大小为446B。              第二步:MBR进一步引导位于第0柱面第0磁道的grub引导程序中的第一段引导程序stage1_5。g

Java版CRC8和CRC16工具类_crc8工具类_toaksg的博客-程序员秘密

搞物联应用,通信时常用CRC校验。下面是Java版的CRC算法工具类,可直接使用。CRC8工具类public class CRC8Util { static byte[] crc8_tab = {(byte) 0, (byte) 94, (byte) 188, (byte) 226, (byte) 97, (byte) 63, (byte) 221, (byte) 131,...

python自动化脚本开发是什么意思_python自动化脚本编写电脑回事_下厨房的博客-程序员秘密

·通过添加表、字段或者索引来修改数据库的结构在以前的脚本中,我们总是先定义一个常量,告诉脚本我们要处理HKEY_CURRENT_USER或HKEY_LOCAL_MACHINE注册表配置单元然后重启一下系统,就修改了系统的远程桌面的默认的3389端口 '#####################'VBS修改远程桌面的默认端口,并添加至Windows防火墙'作者51windows.Net'56868为...

[C#/WebApi]WebApi跨域问题_c# webapi 域名_YF.Tao的博客-程序员秘密

最近因为业务需要,需要写个接口,尝试了使用下WebApi,就遇到的跨域问题做个说明。跨域很好理解,就是当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同的时候,就是跨域。请求调用Api,报错如下:解决方法:1. 安装NuGet包:Microsoft.AspNet.WebApi.Cors,安装方法在此不再概述;2. 在App_Start的WebApiConfig中添加跨域配置:namespace WebApi{ public stat..

iOS 获取设备信息_小手一背爱谁谁的博客-程序员秘密

#import "sys/utsname.h"- (void)viewDidLoad {    [superviewDidLoad];    // Do any additional setup after loading the view, typically from a nib.    UIDevice *divce = [UIDevice

随便推点

视学AI,这群大学生做了个牛逼的项目!_视学算法的博客-程序员秘密

点击上方“视学算法”,选择加"星标"或“置顶”重磅干货,第一时间送达本文由机器之心报道网站链接:https://okai.brown.edu/zh/index.html(网...

详解Socket编程---TCP_NODELAY选项_菜鸟腾飞的博客-程序员秘密

Nagle算法描述Socket编程中,TCP_NODELAY选项是用来控制是否开启Nagle算法,该算法是为了提高较慢的广域网传输效率,减小小分组的报文个数,完整描述:该算法要求一个TCP连接上最多只能有一个未被确认的小分组,在该小分组的确认到来之前,不能发送其他小分组。这里的小分组指的是报文长度小于MSS(Max Segment Size...

java小票_java打印小票_遇见高中生的博客-程序员秘密

public class TestChart{public static void main(String[] args) {Discount[] tx=new Discount[]{new Discount("T恤",245),new Discount("网球鞋",570),new Discount("网球拍",320)};int result=0;tx[0].setNum(2);tx[0].s...

NLS_LANG与NLS_LANGUAGE的区别_nls_language和lnl_lang_t0nsha的博客-程序员秘密

1. 主要区别:NLS_LANG是环境变量,包括3部分NLS参数:NLS_LANGUAGE, NLS_TERRITORY, NLS_CHARACTERSET,需要在启动SQLPLUS等工具之前设置;NLS_LANGUAGE主要控制SESSION中提示消息的语言,可以使用ALTER SESSION在SQLPLUS里面设置;NLS_TERRITORY主要控制SESSION中的日期和货币等本地化参数的现

VS启动下的服务器,如何供手机调用(IIS EXPRESS)_手机访问express服务器_风中喝粥的博客-程序员秘密

在VS下启动运行的服务端程序(部署在IIS EXPRESS上),默认是无法被除本机外的终端调用的。在开发android端程序时,为了方便调试,需要直接访问此服务端程序。千寻万寻,终于找到了相关方法。找到IIS Express的配置文件,applicationhost.config,寻找方法如下: (1).在vs中启动你的服务器,这时这个服务端程序默认只能由本机访问,然后在底部的任务栏中找到I...

推荐文章

热门文章

相关标签