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,我突然有了一个新的疑 ...
随机推荐
- QPNP 8909 8916 充电相关(2)【转】
上一篇主要讲电池相关的一些知识,上节忘记讲了,电池一般分为电量计电池和非电流计电池,电量计电池,就不需要用pmu8916的IC,当然这只是只,不需要BMS来计算soc,而jni层也需要读取电流计的电池 ...
- javax.imageio.IIOException: Can't read input file!完美解决
今天遇到一个问题,上图 这段代码主要是给图片添加水印 后来百度发现可能是图片的路径出了问题,因为是动态获取的图片地址,然后我把地址打印出来了 之后通过终端查看,果然没有 之后我在classes目录找到 ...
- Linux服务器下配置Java环境、JDK
前言 可以解决问题有/etc/profile与~/.bashrc环境文件区别 文件权限问题,只读readonly Java环境搭建 一.下载JDK包 地址:jdk1.8提取码:gx0b 把文件放到Li ...
- video调用直播接口:防止缓存方案
有时候我们需要调用解析过直播接口,使用video播放,但是在暂停又开始后,直播视频不会自动刷新,而是继续从暂停之前的时间点开始播放. 下面是我的解决方案代码,弟弟们请看我的下面: <!DOCTY ...
- 前端笔记之React(一)初识React&组件&JSX语法
一.React项目起步配置 官网:https://reactjs.org/ 文档:https://reactjs.org/docs/hello-world.html 中文:http://react.c ...
- GNSS频率分配表
说明: 公开资料表示,GPS L3用于核爆炸等高能红外辐射事件的侦查,L4用于电离层研究. GLONASS FDMA信号G1.G2.G3三个频段各自频点见以下附表,摘自ITU的频率协调结果. GLON ...
- 给HttpClient添加请求头(HttpClientFactory)
前言 在微服务的大环境下,会出现这个服务调用这个接口,那个接口的情况.假设出了问题,需要排查的时候,我们要怎么关联不同服务之间的调用情况呢?换句话就是说,这个请求的结果不对,看看是那里出了问题. 最简 ...
- 黄聪:table自适应宽度和高度
自适应宽度: td { width: 1px; white-space: nowrap; /* 自适应宽度*/ word-break: keep-all; /* 避免长单词截断,保持全部 */ } 自 ...
- C++ const使用总结
这里针对C++中const的一些一般用法进行一下简单的总结 一.定义常量 常量不可修改 : ; 与#define宏定义常量的区别:(1)const常量具有类型,编译器可以进行安全检查:#define宏 ...
- jvm 性能调优工具之 jstat
概述 Jstat是JDK自带的一个轻量级小工具.全称“Java Virtual Machine statistics monitoring tool”,它位于java的bin目录下,主要利用JVM内建 ...