常见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比较的更多相关文章

  1. 谈谈springMVC和Strut2的理解

    关于struts2框架原理 执行流程 struts2框架的核心是一个过滤器,我们编写的action类都继承ActionSupport的接口(顶层是一个过滤器filter),用户发送请求,经过核心过滤器 ...

  2. springMvc的第一个demo

    1.下载jar包 http://repo.spring.io/libs-release-local/org/springframework/spring/4.2.3.RELEASE/ 2.下载源码 j ...

  3. springMVC学习笔记三

    十三.springMVC和spring集成 配置文件,spring的配置路径applicationContext.xml 在默认的web-inf下面 strut的配置文件默认在src下面 用了什么框架 ...

  4. SpringMVC从认识到细化了解

    目录 SpringMVC的介绍 介绍: 执行流程 与strut2的对比 基本运行环境搭建 基础示例 控制器的编写 控制器创建方式: 请求映射问题: 获取请求提交的参数 通过域对象(request,re ...

  5. SpringMVC参数绑定(未完待续)

    1. Strut2与SpringMVC接收请求参数的区别 Struts2通过action类的成员变量接收SpringMVC通过controller方法的形参接收 2. SpringMVC参数绑定流程 ...

  6. JSF/SpringMVC/Struts2区别与比较

    转自SpringMVC与Struts2区别与比较总结 1.Struts2是类级别的拦截, 一个类对应一个request上下文,SpringMVC是方法级别的拦截,一个方法对应一个request上下文, ...

  7. 【分享】标准springMVC+mybatis项目maven搭建最精简教程

    文章由来:公司有个实习同学需要做毕业设计,不会搭建环境,我就代劳了,顺便分享给刚入门的小伙伴,我是自学的JAVA,所以我懂的.... (大图直接观看显示很模糊,请在图片上点击右键然后在新窗口打开看) ...

  8. Springmvc数据校验

    步骤一:导入四个jar包 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=" ...

  9. 为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?

    今年我一直在思考web开发里的前后端分离的问题,到了现在也颇有点心得了,随着这个问题的深入,再加以现在公司很多web项目的控制层的技术框架由struts2迁移到springMVC,我突然有了一个新的疑 ...

随机推荐

  1. Python对Redis增删改查

    pip install redis import redis # 连接redis # 几个常用默认参数: # host='localhost', port=6379, db=0, decode_res ...

  2. 《数据挖掘导论》实验课——实验二、数据处理之Matplotlib

    实验二.数据处理之Matplotlib 一.实验目的 1. 了解matplotlib库的基本功能 2. 掌握matplotlib库的使用方法 二.实验工具: 1. Anaconda 2. Numpy, ...

  3. docker搭建kafka环境&&Golang生产和消费

    docker 搭建kafka环境 version: '2' services: zk1: image: confluentinc/cp-zookeeper:latest hostname: zk1 c ...

  4. acwing 471. 棋盘 解题记录

    题解地址  https://www.acwing.com/problem/content/description/473/ 有一个m×m的棋盘,棋盘上每一个格子可能是红色.黄色或没有任何颜色的. 你现 ...

  5. 剑指Offer-31.整数中1出现的次数(从1到n整数中1出现的次数)(C++/Java)

    题目: 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此共出现6次,但是对于后面问题他就没辙了.A ...

  6. You Are Given a Decimal String... CodeForces - 1202B [简单dp][补题]

    补一下codeforces前天教育场的题.当时只A了一道题. 大致题意: 定义一个x - y - counter :是一个加法计数器.初始值为0,之后可以任意选择+x或者+y而我们由每次累加结果的最后 ...

  7. python有哪些优点跟缺点

    显著的优点 1. 语言简洁优美,Java能实现的python都能实现(除安卓开发),python能实现的Java不一定能实现如(自动化运维,爬虫) 2. 跨平台,window, linux,mac通用 ...

  8. 一个python问题引发的思考

    问题: pyqt5下开发的时候,遇到了一个这样的问题.Traceback (most recent call last):File “test.py”, line 3, in from PyQt5.Q ...

  9. idea配置pyspark

    默认python已经配好,并已经导入idea,只剩下pyspark的安装 1.解压spark-2.1.0-bin-hadoop2.7放入磁盘目录 D:\spark-2.1.0-bin-hadoop2. ...

  10. Redis for OPS 03:数据安全与持久化

    写在前面的话 通过前两节,除了安装部分,其它的更多的是作为了解,除非我们面向实际的开发,当然知道更多总是好的,这样才有吹牛逼的资本. 从本节开始我们主要谈谈作为一个运维,在处理 Redis 的维护的时 ...