springmvc+strut2比较
常见web框架中Struts2和SpringMVC独占鳌头,SpringMVC和Struts有什么不同?
我们可以从各个方面进行对比:
一:框架的思想设计上
SpringMVC控制器是基于方法上拦截,是单例的.
Struts2控制器是基于类上拦截,是多例的,多例会带来一定内存消耗.
二:配置文件上执行流程
Struts2是通过前端过滤器StrurtPrepareAndExecutionFilter接受到请求后在过滤器中完成一部分的代码.
SpringMVC的前端过滤器DispatcherServlt接收到客户端请求后接着将请求映射处理器HandlerMapping,映射处理器会根据xml配置,注解进行查找handler,
接着映射处理器HandlerMapping将找到的Handler返回给前端控制器DispatcherServlet,接着前端控制器调用处理适配器对Handler进行执行,
Handler执行完给处理适配器HandlerAdapt返回ModelAndView,处理适配器接着将ModelAndView返回给前端过滤器,前端过滤器请求视图解析器进行视图解析,
解析成真正的视图(jsp)然后返回View给前端过滤器,前端过滤器进行视图渲染.将模型数据填充到request域中,最后向客户响应结果.
三:核心组件上
Struts2的核心组件是StrurtPrepareAndExecutionFilter中的拦截器和Action.
而SpringMVC的核心组件有过滤器DispatcherServlt,映射处理器HandlerMapping,,处理适配器HandlerAdapt,处理器Handler,视图解析器ModleAndVIew.
四:参数传递上
SpringMVC通过方法入参传递参数,Struts2通过类的成员变量来传递参数.
ps图:

一、框架机制
1. spring MVC是通过servlet的方式进行拦截,在第一次请求发送时初始化,并随着容器关闭而销毁。
2. struts2是通过filter(拦截器)的方式进行拦截,在容器初始化时加载。晚于servlet销毁。
二、拦截机制
1.struts2 是类级别上的拦截,每次请求都会创建一个对应的action,一个url对应action中的一个方法,action类中的属性被所有方法共享,所以action在spring只能配置成多例的,因为是多例的,无法使用注解等方式开发。如果有两个请求同时访问action,则会发送线程并发,导致类属性值错乱,线程不安全。struts2通过类属性的方式接收请求参数,并通过get,set方法设置值,也可以通过模型驱动的方式注入值,action类需要继承ActionSupport实现ModelDrivenMO接口。struts2使用的是值栈机制,将页面需要的值压入值栈,则可在页面上通过OGNL表达式获取。Struts2有自己的拦截机制,自定义Interceptor类,然后进行配置,配置文件非常大。
2.spring MVC是方法级别上的拦截,一个请求对应着一个controller中的方法,请求参数会封装到方法参数中,如果是对象类型的参数则需要在参数名前加上@RequestBody注解即可。controller类中的属性被方法所共享,controller类默认是单例的,在请求发送时不会创建对象,所以可以使用注解开发。spring MVC则是通过方法参数model对象来设置需要返回的值,(和request的用法相似,因为底层封装的就是request),在页面通过el表达式获取。springMVC有独立的AOP拦截机制。
三、性能方面
1.spring MVC几乎实现了零配置,在配置了基本的东西之后,再编写controller类和方法时,只需加上注解即可,无需频繁修改配置文件,而struts2的机制让他无法使用注解开发,那就需要编写一个action类配置一遍,显得非常繁琐。
四、集成
1.spring MVC和spring是同一家公司出的,所以整合时无需配置,而struts2则需要编写整合配置。
五、设计思想
1.struts2 更符合OOP编程思想,spring MVC 则是再servlet上扩展功能。
六、与ajax的集成
1.spring MVC只需要在交互方法上加上@ResponseBody即可在返回值中返回数据,spring MVC会自动将返回值数据转换成json数据。非常方便。
2.struts2则需要自己手动将返回值数据转换成json格式,再手动写回浏览器。返回 NONE;
springmvc+strut2比较的更多相关文章
- 谈谈springMVC和Strut2的理解
关于struts2框架原理 执行流程 struts2框架的核心是一个过滤器,我们编写的action类都继承ActionSupport的接口(顶层是一个过滤器filter),用户发送请求,经过核心过滤器 ...
- springMvc的第一个demo
1.下载jar包 http://repo.spring.io/libs-release-local/org/springframework/spring/4.2.3.RELEASE/ 2.下载源码 j ...
- springMVC学习笔记三
十三.springMVC和spring集成 配置文件,spring的配置路径applicationContext.xml 在默认的web-inf下面 strut的配置文件默认在src下面 用了什么框架 ...
- SpringMVC从认识到细化了解
目录 SpringMVC的介绍 介绍: 执行流程 与strut2的对比 基本运行环境搭建 基础示例 控制器的编写 控制器创建方式: 请求映射问题: 获取请求提交的参数 通过域对象(request,re ...
- SpringMVC参数绑定(未完待续)
1. Strut2与SpringMVC接收请求参数的区别 Struts2通过action类的成员变量接收SpringMVC通过controller方法的形参接收 2. SpringMVC参数绑定流程 ...
- JSF/SpringMVC/Struts2区别与比较
转自SpringMVC与Struts2区别与比较总结 1.Struts2是类级别的拦截, 一个类对应一个request上下文,SpringMVC是方法级别的拦截,一个方法对应一个request上下文, ...
- 【分享】标准springMVC+mybatis项目maven搭建最精简教程
文章由来:公司有个实习同学需要做毕业设计,不会搭建环境,我就代劳了,顺便分享给刚入门的小伙伴,我是自学的JAVA,所以我懂的.... (大图直接观看显示很模糊,请在图片上点击右键然后在新窗口打开看) ...
- Springmvc数据校验
步骤一:导入四个jar包 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=" ...
- 为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?
今年我一直在思考web开发里的前后端分离的问题,到了现在也颇有点心得了,随着这个问题的深入,再加以现在公司很多web项目的控制层的技术框架由struts2迁移到springMVC,我突然有了一个新的疑 ...
随机推荐
- python之海龟绘图
1. 基本功能介绍 在海龟作图中,我们可以编写指令让一个虚拟的(想象中的)海龟在屏幕上来回移动.这个海龟带着一只钢笔,我们可以让海龟无论移动到哪都使用这只钢笔来绘制线条.通过编写代码,以各种很酷的模式 ...
- LG1345 「USACO5.4」Telecowmunication 最小割
问题描述 LG1345 题解 点边转化,最小割,完事. \(\mathrm{Code}\) #include<bits/stdc++.h> using namespace std; tem ...
- HTML连载49-清除浮动的第三种方式(内外墙法)
一.清除浮动的第三种方式 1.隔墙法有两种如下:外墙法和内墙法. 2.外墙法 (1)在两个盒子中间添加一个额外的块级元素 (2)给这个额外添加的块级元素设置:clear:both;属性 注意点: ...
- 使用Runtime的objc_msgSend实现模型和字典的互转
一.介绍 模型转字典,字典转模型,这是开发中最基本的功能.系统类中提供了一个setValuesForKeysWithDictionary方法来实现字典转模型,至于模型转字典,这个就需要使用runtim ...
- python文件操作【目录大全】
总是记不住API.昨晚写的时候用到了这些,但是没记住,于是就索性整理一下吧: python中对文件.文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块. 得到当前工作目录,即当前Pyth ...
- TypeScript + Webpack 4 开发环境搭建(转)
前段时间接触到 Microsoft 的 Microsoft.AspNetCore.SpaTemplates 模板,生成的项目使用的默认语言是 TypeScript,虽然以前在此之前并没有用过TypeS ...
- 【zabbix告警配置】zabbix服务配置邮件告警
一.安装邮件服务 在zabbix_server服务端安装邮件和邮件发送服务,这里可以参考我另一篇邮件服务部署文章:https://www.cnblogs.com/HeiDi-BoKe/p/118833 ...
- COMP2521: Assignment
COMP2521: Assignment 2Social Network AnalysisA notice on the class web page will be posted after eac ...
- ARM64的内核栈、用户栈、寄存器上下文
1. 内核栈的分配,即thread_info的分配,是在do_fork->dup_task_struct中分配(默认为2个pages),并赋值给task_struct->stack: 2. ...
- zookeeper C client API 和zkpython 的安装
1 zookeeper C API 安装 yum install -y ant 在解压的zookeeper包中执行: ant compile_jute 进入src/c 安装:yum -y instal ...