在项目中使用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. Oracle安装、Navicat for Oracle、JDBCl连接、获取表结构

    Oracle安装 Navicat for Oracle配置 Oracle JDBC连接(增删改查) Oracle安装 环境windows 7 64位 安装版本:oracle 11g(64位) 下载地址 ...

  2. Android开发学习必备的java知识

    Android开发学习必备的java知识本讲内容:对象.标识符.关键字.变量.常量.字面值.基本数据类型.整数.浮点数.布尔型.字符型.赋值.注释 Java作为一门语言,必然有他的语法规则.学习编程语 ...

  3. SpringMVC的常用注解

             在SpringMVC中常用的注解主要都是用于Controller上,所以下面的四大不同类型的注解都是根据它们处理的request的不同内容部分来区分的:         处理requ ...

  4. 3_使用指针对象(Using Object Pointer)

    类的成员函数有两种调用方式,一种是由对象调用,另一种是由对象指针调用.其中,对象调用的方式为objectName.memberFunctionName(parameters),而对象指针调用的方式为o ...

  5. Linux SendMail发送邮件失败诊断案例(四)

    最近又碰到一起Linux下SendMail发送邮件失败的案例,邮件发送后,邮箱收不到具体邮件, 查看日志/var/log/maillog 发现有"DSN: User unknown" ...

  6. VC6安装错误——Error Launching acmboot.exe

    因项目需要,我需要安装Microsoft Visual C++ Professional Version 6 SP5.但是在安装时运行安装目录下的setup.exe,出现Error Launching ...

  7. Ubuntu 上查看硬件信息命令

    1.Mint 驱动程序管理器是由 Linux Mint 团队开发的一款系统工具软件,使得用户在Linux系统中可容易安装专有驱动,通过一个直观的界面.由于 Mint 驱动程序管理器具有独立性,它支持所 ...

  8. bootstrap 幻灯大图结合dedecms的autoindex

    <div class="container" id="banner"> <div id="carousel-example-gene ...

  9. freemarker处理哈希表的内建函数

    freemarker处理哈希表的内建函数 1.简易说明 (1)map取值 (2)key取值 2.实现示例 <html> <head> <meta http-equiv=& ...

  10. Caused by: java.sql.SQLException: Operand should contain 1 column(s)

    1.错误描述 [ERROR:]2015-05-05 15:48:55,847 [异常拦截] org.hibernate.exception.DataException: error executing ...