在项目中使用struts2和spring mvc为了实现后台的业务代码和前台数据之间的传递,现在基本上不会有用struts2的了,几次面试问的最多的关于struts2的问题就是struts2和spring mvc之间的区别,其中关于使用配置文件和注解的问题就回答错误了。

  • struts2也是可以使用注解的,但是struts2相比于spring mvc不能实现真正的零配置,struts2在使用注解的时候还是需要用struts.xml一小段配置。而spring mvc可以实现真正的零配置实用注解。详见:struts2基于注解配置action
  • 这两个框架都是需要对数据进行拦截,但是struts2是类级别的拦截,一个类对应一个request上下文,struts2是基于类设计,每次请求都会实例一个Action,每个Action都会被注入属性,而spring mvc是方法级别的拦截,说这个可能有些不理解,大部分文章这么说完之后没有进一步解释,拿具体配置说明一下会更好理解

下面是struts2的配置文件(一部分),每次都是根据配置去找对应的Action,struts2是通过类的成员变量接收数据,在多线程的环境下,这些变量是共享的。

<package name="user" namespace="/user" extends="struts-default">
<action name="login" class="com.struts2.action.UserAction"
method="login">
<result name="a">/Success.jsp</result>
<result name="b">/login.jsp</result>
</action>
</package>

接下来是spring mvc使用注解完成的功能,spring mvc处理的时候根据RequestMapping找对应的url,和struts2相比,spring mvc对于数据比较安全,每个方法之间都是通过形参传递数据,方法结束,形参结束生命被销毁。

@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("add")
public String add(User user) {
return "add";
}
}
  • 在拦截机制上struts2和spring mvc是两种完全不同的方式,struts2采用的是类似于链式堆栈结构的拦截(责任链模式),需要在配置文件中配置拦截器。每一个Action请求都包含在一系列拦截器的内部。

spring mvc采用的是AOP思想,可以实现预处理(实现处理器的预处理(如登录检查)),后处理(实现处理器的后处理(但在渲染视图之前)),整个请求处理完毕回调方法,即在视图渲染完毕时回调

  • 在设计思路上,spring mvc更加的处理流程更加规范,每个处理流程划分为很多的步骤,每个处理步骤都交给不同的组件进行处理,struts2就显得比spring mvc乱。
  • spring mvc和spring都是一家的可能在一起使用更加方便。

struts2和spring mvc的区别的更多相关文章

  1. [Java语言] 《struts2和spring MVC》的区别_动力节点

    1.Struts2是类级别的拦截, 一个类对应一个request上下文,SpringMVC是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上Spr ...

  2. cpj-swagger分别整合struts2、spring mvc、servlet

    cpj-swagger 原文地址:https://github.com/3cpj/swagger 1. Swagger是什么? 官方说法:Swagger是一个规范和完整的框架,用于生成.描述.调用和可 ...

  3. Struts2和Spring MVC 区别 今天面试被问到了

    虽然说没有系统的学习过Spring MVC框架, 但是工作这么长时间, 基本上在WEB层使用的都是Spring MVC, 自己觉得Struts2也是一个不错的WEB层框架, 这两种框架至今自己还未有比 ...

  4. struts2与spring mvc 的比较

    1.传值: struts2通过set get来传值,而spring mvc 可以直接在方法里传值(String username,Model model)model也可以换成map来传值但不建义 mo ...

  5. struts2和spring mvc的比较

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt236   Struts2 Springmvc       机制 基于filt ...

  6. 【转】Struts2 和 Spring MVC对比

    1. 实现机制 struts2框架是类级别的拦截,每次来了请求就创建一个controller中对应的Action,然后调用setter getter方法把request中的数据注入 .struts2实 ...

  7. 控制层技术:Servlet+reflection、Struts2、Spring MVC三者之间的比较学习

    Servlet Struts2 Spring MVC 处理用户提交的数据 基于MVC设计模式的Web应用程序 是一个框架 是MVC框架 导入servlet包,配置web.xml文件 web.xml & ...

  8. spring boot与spring mvc的区别

    Spring 框架就像一个家族,有众多衍生产品例如 boot.security.jpa等等.但他们的基础都是Spring 的 ioc和 aop ioc 提供了依赖注入的容器 aop ,解决了面向横切面 ...

  9. Spring、Spring Boot、Spring Frame、Spring MVC的区别

    Spring框架就像一个厂商,其下有很多产品,如Spring Boot.Spring Frame.Spring Cloud等等. Spring Boot用于快速.方便.简单的搭建一个Spring项目. ...

随机推荐

  1. scrapy安装的问题

    Found existing installation: six 1.4.1 DEPRECATION: Uninstalling a distutils installed project (six) ...

  2. linux分析apache日志获取最多访问的前10个IP

    apache日志分析可以获得很多有用的信息,现在来试试最基本的,获取最多访问的前10个IP地址及访问次数. 既然是统计,那么awk是必不可少的,好用而高效. 命令如下: awk '{a[$1] += ...

  3. 什么是 JSX

    JSX 即 JavaScript XML--一种在 React 组件内部构建标签的类 xml 语法.React 在不使用 JSX 的情况下一样可以工作,然而使用 JSX 可以提高组件的可读性,因此推荐 ...

  4. 编译、裁剪、安装、删除 Ubuntu内核和模块管理

    一.下载最新内核文件 地址:http://www.kernel.org,一般下载Full Source版本. 下载完毕后,放到任意文件夹中,使用命令: tar jxvf linux-x.x.x.tar ...

  5. 工作中常用的linux命令(2)

    1.find :查找指定文件名的路径: 列出当前目录以及子目录中的所有文件: 在当前目录下寻找特定文件名的文件: 列出长度为零的文件: 2.ps :查看某个程序的进程,例如查询mongodb和mysq ...

  6. javascript学习笔记02--面向对象学习

    js面向对象编程 1.  javascript 是一种基于对象的编程    object-based(基于对象):遇到的所有对象都是对象2.javascript没有类class,但是有新的原型对象,习 ...

  7. Nginx学习笔记3--Nginx和PHP(fastCGI)的配置和优化

    php和nginx的配置 server{ root html; listen 80; server_name a.com; index index.php index.html ; location ...

  8. vxWorks应用程序加载的另一种办法

    现在我们的工作中,应用程序一般都是和BSP联编,然后将vxworks_rom.bin烧到班子里.在BSP启动后,调用应用程序的函数的. 但是这样有个问题,就是应用程序和BSP结合的太紧密了.BSP开发 ...

  9. Linux显示版本信息并退出

    Linux显示版本信息并退出 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ cat --version cat (GNU coreutils) 8.21 Co ...

  10. java 后台封装json数据学习总结(一)

    一.数据封装 1. List集合转换成json代码 List list = new ArrayList(); list.add( "first" ); list.add( &quo ...