在项目中使用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. 【Unity3D】Unity3D开发《我的世界》之七、番外篇

    转载请注明出处:http://www.cnblogs.com/shamoyuu/p/unity_minecraft_07.html 本来上一篇就结束了,但是有小伙伴私信我觉得还差了很多重要的内容,比如 ...

  2. linux虚拟机中安装mongodb

    今天在linux虚拟机中安装了mongodb数据库,安装过程主要参照了网上的一片文档,大部分地方都没有多大区别,只是在某些细节上有所改变. 我参考的文档是:http://my.oschina.net/ ...

  3. Django学习-23-ModelForm

    Model + Form ----> 验证 + 数据库操作 class UserInfo(models.Model): username = models.CharField(max_lengt ...

  4. Linux之23个重要命令

    作为工作几年的Linux运维老司机,总结了Linux命令行的常用的一些用法,希望对您有所收获. 1. 搜索 在vi和vim中如果打开一个很大的文件,不容易找到对应的内容,可以使用自带的搜索关键字进行搜 ...

  5. 支持行单击、双击事件的GridView和DataList控件(译)

    支持行单击.双击事件的GridView和DataList控件(译)         让GridView 和 DataList 控件响应鼠标单击.双击事件.并且,使用 ClientScript.Regi ...

  6. js弹窗登录效果(源码)--web前端

    1.JS弹窗登录效果 <!DOCTYPE html><html lang="en"><head> <meta charset=" ...

  7. [前端]如何写一个水平导航栏?(浮动、inline-block+消除间距)

    在看W3school时,看到一个很好的例子,如何制作一个水平的导航栏?没有任何要求,只需要达到下面的效果: 我认为这个例子包含了很多css布局需要了解的知识,因此单独写一下. W3school上面的方 ...

  8. 爬数据,能让你少写1000行代码的捷径! | Python 正则表达式

    ▌春暖花开,又到了出门游玩拍拍拍吃吃吃的好季节了! 说到拍照摄影,你会构图吗?就是在照片有限的空间内处理人.景.物的关系,并将三者安排在画面中最佳的位置,以形成画面特定结构的方法. 学院君就是一个「拍 ...

  9. Rolling Update - 每天5分钟玩转 Docker 容器技术(140)

    滚动更新是一次只更新一小部分副本,成功后,再更新更多的副本,最终完成所有副本的更新.滚动更新的最大的好处是零停机,整个更新过程始终有副本在运行,从而保证了业务的连续性. 下面我们部署三副本应用,初始镜 ...

  10. springboot--springboot+mybatis多数据源最简解决方案

    说起多数据源,一般都来解决那些问题呢,主从模式或者业务比较复杂需要连接不同的分库来支持业务.我们项目是后者的模式,网上找了很多,大都是根据jpa来做多数据源解决方案,要不就是老的spring多数据源解 ...