我们从以下几个维度来区分两者的概念:
1.  机制:spring mvc的入口是servlet,而struts2是filter。
    补充几点知识:
    《 Filter 实现javax.servlet.Filter接口,在web.xml中配置与标签指定使用哪个Filter实现类过滤哪些URL链接。只在web启动时进行初始化操作。 filter 流程是线性的, url传来之后,检查之后,可保持原来的流程继续向下执行,被下一个filter, servlet接收等,而servlet 处理之

后,不会继续向下传递。filter功能可用来保持流程继续按照原来的方式进行下去,或者主导流程,而servlet的功能主要用来主导流程。

特点:可以在响应之前修改Request和Response的头部,只能转发请求,不能直接发出响应。filter可用来进行字符编码的过滤,检测用户

是否登陆的过滤,禁止页面缓存等》

        《

Servlet,

servlet 流程是短的,url传来之后,就对其进行处理,之后返回或转向到某一自己指定的页面。它主要用来在业务处理之前进行控制

       

Listener呢?我们知道

servlet、filter都是针对url之类的,而listener是针对对象的操作的,如session的创建,session.setAttribute的发生,在这样的事件发

生时做一些事情。

2. 性能:spring会稍微比struts快。

spring mvc是基于方法的设计

而sturts是基于类

,每次发一次请求都会实例一个action,每个action都会被注入属性,而spring基于方法,粒度更细(粒度级别的东西比较sychronized和lock),但要小心把握像在servlet控制数据一样。

spring3 mvc是方法级别的拦截,拦截到方法后根据参数上的注解,把request数据注入进去,在spring3 mvc中,一个方法对应一个request上下文。

而struts2框架是类级别的拦截,每次来了请求就创建一个Action,然后调用setter
getter方法把request中的数据注入;struts2实际上是通过setter getter方法与request打交道的;struts2中,一个Action对象对应一个request上下文。

3.

参数传递:struts是在接受参数的时候,可以用属性来接受参数,这就说明参数是让多个方法共享的。所以D是对的。

4.

设计思想上:

struts更加符合oop的编程思想

, spring就比较谨慎,在servlet上扩展。

5.

intercepter(拦截器)的实现机制:struts有以自己的interceptor机制,

spring mvc用的是独立的AOP方式

。这样导致struts的配置文件量还是比spring
mvc大,虽然struts的配置能继承,所以我觉得,就拿使用上来讲,spring mvc使用更加简洁,

开发效率Spring MVC确实比struts2高

spring mvc是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上

spring3 mvc就容易实现restful url

struts2是类级别的拦截,一个类对应一个request上下文;实现restful url要费劲,因为struts2 action的一个方法可以对应一个url;而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了。

spring3 mvc的方法之间基本上独立的,独享request response数据,请求数据通过参数获取,处理结果通过ModelMap交回给框架方法之间不共享变量,

而struts2搞的就比较乱,虽然方法之间也是独立的,但其所有Action变量是共享的,这不会影响程序运行,却给我们编码,读程序时带来麻烦。

6. 另外,spring3 mvc的验证也是一个亮点,支持JSR303,

处理ajax的请求更是方便

,只需一个注解

@ResponseBody

 ,然后直接返回响应文本即可。

代码:

    1. @RequestMapping
      (value=
      "/whitelists"
      )
    2. public
       String index(ModelMap map) {
    3. Account account = accountManager.getByDigitId(SecurityContextHolder.get().getDigitId());
    4. List<Group> groupList = groupManager.findAllGroup(account.getId());
    5. map.put("account"
      , account);
    6. map.put("groupList"
      , groupList);
    7. return
       
      "/group/group-index"
      ;
    8. }
    9. // @ResponseBody ajax响应,处理Ajax请求也很方便
    10. @RequestMapping
      (value=
      "/whitelist/{whiteListId}/del"
      )
    11. @ResponseBody
    12. public
       String delete(
      @PathVariable
       Integer whiteListId) {
    13. whiteListManager.deleteWhiteList(whiteListId);
    14. return
       
      "success"
      ;
    15. }

java面试题之----spring与struts2的比较的更多相关文章

  1. 互联网大厂Java面试题集—Spring boot面试题(一)

    Spring Boot 需要独立的容器运行吗? 可以不需要,内置了 Tomcat/ Jetty 等容器.通过pom.xml中导入依赖: <!--spring-boot-starter-web:代 ...

  2. java面试题:Spring

    Spring 面试时,最好能结合底层代码说出IOC,AOP或Spring MVC的流程,能说出拦截器的底层. 如果看过Spring的源码,并能结合设计模式表达,是很大的加分项. IOC Q:讲一下IO ...

  3. java面试题之----spring MVC的原理和MVC

    1.什么是mvc? 1.1原始比较初级的设计模式: 1.2 MVC设计模式 2MVC设计模式的优势与核心在于其能解耦和: 传统的设计模式相当于是一个串联的设计,只要其中一个环节出了问题便会使下一环节中 ...

  4. 互联网大厂Java面试题集—Spring boot常见面试题(二)

    Spring Boot的核心功能与使用优点? 核心功能: 1)Spring Boot项目为独立运行的spring项目,java -jar xx.jar即可运行. 2)内嵌servlet容器(可以选择内 ...

  5. Java面试题(Spring Boot/Spring Cloud篇)

    Spring Boot/Spring Cloud 104.什么是 spring boot? SpringBoot是一个框架,一种全新的编程规范,他的产生简化了框架的使用,所谓简化是指简化了Spring ...

  6. JAVA面试题:Spring中bean的生命周期

    Spring 中bean 的生命周期短暂吗? 在spring中,从BeanFactory或ApplicationContext取得的实例为Singleton,也就是预设为每一个Bean的别名只能维持一 ...

  7. java面试题之spring aop中jdk和cglib哪个动态代理的性能更好?

    在jdk6和jdk7的时候,jdk比cglib要慢: 在jdk8的时候,jdk性能得到提升比cglib要快很多: 结论出自:https://www.cnblogs.com/xuliugen/p/104 ...

  8. Java面试题(全)--视频系列

    此系列为面试笔试题的视频讲解,以下均为超链接,点击即可进入每个知识点的讲解. Java面试题01.面试的整体流程 Java面试题02.java的垮平台原理 Java面试题03.搭建一个java的开发环 ...

  9. J2EE进阶(十四)超详细的Java后台开发面试题之Spring IOC与AOP

    J2EE进阶(十四)超详细的Java后台开发面试题之Spring IOC与AOP 前言   搜狐畅游笔试题中有一道问答题涉及到回答谈谈对Spring IOC与AOP的理解.特将相关内容进行整理.    ...

随机推荐

  1. POJ_3414 Pots 【复杂BFS】

    一.题面 You are given two pots, having the volume of A and B liters respectively. The following operati ...

  2. [源代码]List的增加与删除

    // Removes the element at the given index. The size of the list is // decreased by one. // public vo ...

  3. 1080 MOOC期终成绩 (25 分)

    对于在中国大学MOOC(http://www.icourse163.org/ )学习“数据结构”课程的学生,想要获得一张合格证书,必须首先获得不少于200分的在线编程作业分,然后总评获得不少于60分( ...

  4. HTML嵌套php

    1.  <?php echo 'if you want to serve XHTML or XML documents, do it like this'; ?> 2.  <scri ...

  5. Ubuntu电源键软关机设置

    对于不连接显示器的Ubuntu设备,通过直接拔电源或者长按电源键是普遍的关机方法,但这种方法长期势必会对设备造成损坏. 下面设置电源键软关机(短摁电源按钮关机)的方法可以解决此问题.(默认摁电源键会弹 ...

  6. [转]创建节约内存的JavaBean

    转自:创建节约内存的JavaBean 如果编写节约内存的java对象 编写Java代码的时候,大多数情况下,我们很少关注一个Java对象究竟有多大(占据多少内存),更多的是关注业务与逻辑.但是殊不知, ...

  7. method reference

    import java.util.Arrays; import java.util.List; import java.util.function.Function; import java.util ...

  8. oracle 笔记---(三)__体系架构

    查看控制文件位置 SQL> show parameter control_files; NAME TYPE VALUE ------------------------------------ ...

  9. Beam编程系列之Java SDK Quickstart(官网的推荐步骤)

    不多说,直接上干货! https://beam.apache.org/get-started/beam-overview/ https://beam.apache.org/get-started/qu ...

  10. PlayMaker入门介绍

    http://www.jianshu.com/p/ce791bef66bb   PlayMaker是什么? PlayMaker是Unity3D的一款 可视化 的 有限元状态机(Finite-state ...