• SpringMVC面试题


    目录

    黑马

    一  谈一下你对 SpringMVC 框架的理解(了解)

    二   SpringMVC 主要组件(必会)

    三    谈一下 SpringMVC 的执行流程以及各个组件的作用(必会)

    四   说一下 SpringMVC 支持的转发和重定向的写法(必会)

    五  SpringMVC 的常用注解(必会)

    六  谈一下 SpringMVC 统一异常处理的思想和实现方式(必会)

    七  在 SpringMVC 中, 如果想通过转发将数据传递到前台,有几种写法?(必会)

    八   在 SpringMVC 中拦截器的使用步骤是什么样的?(必会)

    九 在 SpringMVC 中文件上传的使用步骤是什么样的? 前台三要素是什么?(必会)

    十  SpringMVC 中如何解决 GET|POST 请求中文乱码问题?(了解)

    十一    SpringMVC 执行流程(工作原理)?

    十二 SpringMVC 的常用注解有哪些?

    十二  SpringMVC 如何处理统一异常?

    硅谷

    一  . 简单的谈一下SpringMVC的工作流程?

    二  SpringMVC中如何解决POST请求中文乱码问题 

    三   简述SpringMvc里面拦截器是如何定义,如何配置,拦截器中三个重要的方法

    四   简述Springmvc中处理模型数据的两种方式

    五  简述REST中的四种请求方式及对应的操作

    六  简述视图和视图解析的关系及作用

    七  说出三个 常用的视图类

    八  简述REST中HiddenHttpMethodFilter过滤器的作用

    九  简述Springmvc中如何返回JSON数据

    十  Springmvc中的控制器的注解用哪个,可以是否用别的注解代替

    十一  如何在Springmvc中获取客户端提交的请求参数

    十二    简述Springmvc中InternalResourceViewResolver解析器的工作机制

    十三   Springmvc中如何完成重定向

    十四    SpringMVC的工作原理

    十五  说出SpringMVC常用的5个注解?如何使用 SpringMVC完成JSON操作?


    黑马

    一  谈一下你对 SpringMVC 框架的理解(了解)

    SpringMVC 是一个基于 Java 的实现了 MVC 设计模式的请求驱动类型的轻量级 Web
    框架,通过把 Model,View,Controller 分离,将 web 层进行职责解耦,把复杂的 web
    应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。
    在我看来,SpringMVC 就是将我们原来开发在 servlet 中的代码拆分了,一部分由SpringMVC 完成,一部分由我们自己完成

    二   SpringMVC 主要组件(必会)

    端控制器 DispatcherServlet:接收请求、响应结果,相当于转发器,有了
    DispatcherServlet 就减少了其它组件之间的耦合度。
    处理器映射器 HandlerMapping:根据请求的 URL 来查找 Handler
    处理器适配器 HandlerAdapter:负责执行 Handler
    处理器 Handler:处理业务逻辑的 Java 类
    视图解析器 ViewResolver:进行视图的解析,根据视图逻辑名将 ModelAndView 解
    析成真正的视图(view)
    视图 View:View 是一个接口, 它的实现类支持不同的视图类型,如 jsp,
    freemarker,pdf 等等

    三    谈一下 SpringMVC 的执行流程以及各个组件的作用(必会)

    1. 用户发送请求到前端控制器(DispatcherServlet)
    2. 前 端 控 制 器 ( DispatcherServlet ) 收 到 请 求 调 用 处 理 器 映 射 器
    (HandlerMapping),去查找处理器(Handler)
    3. 处理器映射器(HandlerMapping)找到具体的处理器(可以根据 xml 配置、注解进行
    查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给 DispatcherServlet。
    4. 前端控制器(DispatcherServlet)调用处理器映射器(HandlerMapping)
    5. 处理器适配器(HandlerAdapter)去调用自定义的处理器类(Controller,也叫
    后端控制器)。
    6.自定义的处理器类(Controller,也叫后端控制器)将得到的参数进行处理并返回结
    果给处理器映射器(HandlerMapping)
    7. 处 理 器 适 配 器 ( HandlerAdapter ) 将 得 到 的 结 果 返 回 给 前 端 控 制 器
    (DispatcherServlet)
    8. DispatcherServlet( 前 端 控 制 器 ) 将 ModelAndView 传 给 视 图 解 析 器
    (ViewReslover)
    9. 视图解析器(ViewReslover)将得到的参数从逻辑视图转换为物理视图并返回给
    前端控制器(DispatcherServlet)
    10. 前端控制器(DispatcherServlet)调用物理视图进行渲染并返回
    11. 前端控制器(DispatcherServlet)将渲染后的结果返回

    四   说一下 SpringMVC 支持的转发和重定向的写法(必会)

    1)转发:
    forward 方式:在返回值前面加"forward:",比如"”"forward:user.do?name=method4"
    2) 重定向:
    redirect 方式:在返回值前面加 redirect:, 比如"redirect:http://www.baidu.com"

    五  SpringMVC 的常用注解(必会)

    1.@RequestMapping:用于处理请求 url 映射的注解,可用于类或方法上。用于类
    上,则表示类中的所有响应请求的方法都是以该地址作为父路径。
    2.@RequestBody:注解实现接收 http 请求的 json 数据,将 json 转换为 java 对象。
    3.@ResponseBody:注解实现将 conreoller 方法返回对象转化为 json 对象响应给客
    户。
    4.@PathVariable 用户从 url 路径上获取指定参数,标注在参数前 @PathVariabel("
    要获取的参数名")。
    5.@RequestParam: 标注在方法参数之前,用于对传入的参数做一些限制,支持三个
    属性:
    - value:默认属性,用于指定前端传入的参数名称
    - required:用于指定此参数是否必传
    - defaultValue:当参数为非必传参数且前端没有传入参数时,指定一个默认值
    6. @ControllerAdvice 标注在一个类上,表示该类是一个全局异常处理的类。
    7. @ExceptionHandler(Exception.class) 标注在异常处理类中的方法上,表示该方法
    可以处理的异常类型。

    六  谈一下 SpringMVC 统一异常处理的思想和实现方式(必会)

    使用 SpringMVC 之后,代码的调用者是 SpringMVC 框架,也就是说最终的异常会抛到
    框架中,然后由框架指定异常处理类进行统一处理
    方式一: 创建一个自定义异常处理器(实现 HandlerExceptionResolver 接口),并实
    现里面的异常处理方法,然后将这个类交给 Spring 容器管理
    方式二: 在类上加注解(@ControllerAdvice)表明这是一个全局异常处理类
    在 方 法 上 加 注 解 (@ExceptionHandler), 在 ExceptionHandler 中 有 一 个
    value 属性,可以指定可以处理的异常类型

    七  在 SpringMVC 中, 如果想通过转发将数据传递到前台,有几种写法?(必会)

    方式一:直接使用 request 域进行数据的传递
    request.setAttirbuate("name", value);
    方式二:使用 Model 进行传值,底层会将数据放入 request 域进行数据的传递
    model.addAttribuate("name", value);
    方式三:使用 ModelMap 进行传值,底层会将数据放入 request 域进行数据的传递
    modelmap.put("name",value);
    方式四:借用 ModelAndView 在其中设置数据和视图
    mv.addObject("name",value);
    mv.setView("success");
    return mv;

    八   在 SpringMVC 中拦截器的使用步骤是什么样的?(必会)

    1 定义拦截器类:
    SpringMVC 为 我 们 提 供 了 拦 截 器 规 范 的 接 口 , 创 建 一 个 类 实 现
    HandlerInterceptor,重写接口中的抽象方法;
    preHandle 方法:在调用处理器之前调用该方法,如果该方法返回 true 则请
    求继续向下进行,否则请求不会继续向下进行,处理器也不会调用
    postHandle 方法:在调用完处理器后调用该方法
    afterCompletion 方法:在前端控制器渲染页面完成之后调用此方法
    2 注册拦截器:
    在 SpringMVC 核心配置文件中注册自定义的拦截器
    1. <mvc:interceptors>
    2. <mvc:interceptor>
    3. <mvc:mapping path="拦截路径规则"/>
    4. <mvc:exclude-mapping path="不拦截路径规则"/>
    5. <bean class="自定义拦截器的类全限定名"/>
    6. mvc:interceptor>
    7. mvc:interceptors>

    九 在 SpringMVC 中文件上传的使用步骤是什么样的? 前台三要素是什么?(必会)

    文件上传步骤:
    1.加入文件上传需要的 commons-fileupload 包
    2.配置文件上传解析器,springmvc 的配置文件的文件上传解析器的 id 属性必须为
    multipartResolver
    3.后端对应的接收文件的方法参数类型必须为 MultipartFile,参数名称必须与前端
    的 name 属性保持一致
    文件上传前端三要素:
    1.form 表单的提交方式必须为 post
    2.enctype 属性需要修改为:multipart/form-data
    3.必须有一个 type 属性为 file 的 input 标签,其中需要有一个 name 属性;如果需要
    上传多个文件需要添加 multiple 属性

    十  SpringMVC 中如何解决 GET|POST 请求中文乱码问题?(了解)

    (1) 解决 post 请求乱码问题:在 web.xml 中配置一个 CharacterEncodingFilter 过
    滤器,设置成 utf-8;
    1. <filter>
    2. <filter-name>CharacterEncodingFilterfilter-name>
    3. <filter-class>org.springframework.web.filter.CharacterEncodingFilter
    4. ter-class>
    5. <init-param>
    6. <param-name>encodingparam-name>
    7. <param-value>utf-8param-value>
    8. init-param>
    9. filter>
    10. <filter-mapping>
    11. <filter-name>CharacterEncodingFilterfilter-name>
    12. <url-pattern>/*url-pattern>
    13. filter-mapping>
    (2) get 请求中文参数出现乱码解决方法有两个:
    ①修改 tomcat 配置文件添加编码与工程编码一致,如下:
    1. rotocol="HTTP/1.1" redirectPort="8443"/>
    ②另外一种方法对参数进行重新编码:
    1. String userName= new String(request.getParamter("userName").getBytes("ISO885
    2. 9-1"),"utf-8")
    ISO8859-1 是 tomcat 默认编码,需要将 tomcat 编码后的内容按 utf-8 编码。

    十一    SpringMVC 执行流程(工作原理)?

    MVC Model — View — Controler 的简称,它是一种架构模式,它分离了表现与
    交互。它被分为三个核心部件:模型、视图、控制器。
    • Model (模型):是程序的主体部分,主要包含业务数据和业务逻辑。在模型层,
    还会涉及到用户发布的服务,在服务中会根据不同的业务需求,更新业务模型
    中的数据。
    • View (视图):是程序呈现给用户的部分,是用户和程序交互的接口,用户会
    根据具体的业务需求,在 View 视图层输入自己特定的业务数据,并通过界面
    的事件交互,将对应的输入参数提交给后台控制器进行处理。
    • Controller (控制器): Controller 是用来处理用户输入数据,以及更新业务模型
    的部分。控制器中接收了用户与界面交互时传递过来的数据,并根据数据业务
    逻辑来执行服务的调用和更新业务模型的数据和状态。

     

    工作原理:
    • 1. 客户端(浏览器)发送请求,直接请求到 DispatcherServlet
    • 2.DispatcherServlet 根据请求信息调用 HandlerMapping ,解析请求对应的
    Handler
    • 3. 解析到对应的 Handler (也就是我们平常说的 Controller 控制器)。
    • 4.HandlerAdapter 会根据 Handler 来调用真正的处理器来处理请求和执行相对应
    的业务逻 辑。
    • 5. 处理器处理完业务后,会返回一个 ModelAndView 对象, Model 是返回的数据
    对象, View 是逻辑上的 View
    • 6.ViewResolver 会根据逻辑 View 去查找实际的 View
    • 7.DispatcherServlet 把返回的 Model 传给 View (视图渲染)。
    • 8. View 返回给请求者(浏览器)。

    十二 SpringMVC 的常用注解有哪些?

    • @RequestMapping :用于处理请求 url 映射的注解,可用于类或方法上。用于
    类上,则表示类中的所有响应请求的方法都是以该地址作为父路径;
    • @RequestBody :注解实现接收 HTTP 请求的 json 数据,将 json 转换为 Java
    对象;
    • @ResponseBody :注解实现将 Controller 方法返回对象转化为 json 对象响应
    给客户

    十二  SpringMVC 如何处理统一异常?

    方式一 : 创建一个自定义异常处理器 ( 实现 HandlerExceptionResolver 接口 ),
    实现里面 的异常处理方法 , 然后将这个类交给 Spring 容器管理
    方式二 : 在类上加注解 (@ControllerAdvice) 表明这是一个全局异常处理类在方法
    上加注解 (@ExceptionHandler), ExceptionHandler 中 有 一 个 value 属性 ,
    可以指定可以处理的异常类型

    硅谷

    一  . 简单的谈一下SpringMVC的工作流程?

    1. 用户发送请求至前端控制器DispatcherServlet
    2. DispatcherServlet收到请求调用HandlerMapping处理器映射器。
    3. 处理器映射器找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
    4. DispatcherServlet调用HandlerAdapter处理器适配器
    5. HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。
    6. Controller执行完成返回ModelAndView
    7. HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet
    8. DispatcherServlet将ModelAndView传给ViewReslover视图解析器
    9. ViewReslover解析后返回具体View
    10. DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
    11. DispatcherServlet响应用户

    二  SpringMVC中如何解决POST请求中文乱码问题 

    Springmvc中通过CharacterEncodingFilter解决中文乱码问题. 

    在web.xml中加入:

    1. <filter>  
    2.    <filter-name>CharacterEncodingFilterfilter-name>  
    3.  <filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class>  
    4.    <init-param>  
    5.         <param-name>encodingparam-name>  
    6.        <param-value>utf-8param-value>  
    7.     init-param>  
    8. filter>  
    9. <filter-mapping>  
    10.   <filter-name>CharacterEncodingFilterfilter-name>  
    11.     <url-pattern>/*url-pattern>  
    12. filter-mapping>

    三   简述SpringMvc里面拦截器是如何定义,如何配置,拦截器中三个重要的方法

    定义:有两种方式

    1. 实现HandlerInterceptor接口
    2. 继承HandlerInterceptorAdapter

    配置:

    1. <mvc:interceptors>  
    2.       
    3.     <bean id="myFirstInterceptor" class="com.atguigu.interceptor.MyFirstInterceptor">  
    4.     bean>  
    5.       
    6.     <mvc:interceptor>  
    7.         <mvc:mapping path=" " />    
    8.         <mvc:exclude-mapping path=””/>   
    9.         <bean class=" com.atguigu.interceptor.MySecondInterceptor " /> mvc:interceptor>  
    10. mvc:interceptors

    拦截器中三个重要的方法:

    1. preHandle
    2. postHandle
    3. afterCompletion

    四   简述Springmvc中处理模型数据的两种方式

    1. 使用ModelAndView 作为方法的返回值,将模型数据和视图信息封装到ModelAndView中
    2. 使用Map或者是Model 作为方法的形参,将模型数据添加到Map或者是Model中

    五  简述REST中的四种请求方式及对应的操作

    GET   查询操作

    POST  添加操作

    DELETE  删除操作

    PUT   修改操作

    六  简述视图和视图解析的关系及作用

    1. 视图是由视图解析器解析得到的。
    2. 视图解析器的作用是根据ModelAndView中的信息解析得到具体的视图对象
    3. 视图的作用是完成模型数据的渲染工作,最终完成转发或者是重定向的操作

    七  说出三个 常用的视图类

    InternalResourceView

    JstlView

    RedirectView

    八  简述REST中HiddenHttpMethodFilter过滤器的作用

    该过滤器主要负责转换客户端请求的方式,当浏览器的请求方式为POST,并且在请求中能通过 _method获取到请求参数值。该过滤器就会进行请求方式的转换。

    一般在REST中,都是将POST请求转换为对应的DELETE 或者是PUT

    九  简述Springmvc中如何返回JSON数据

    Step1:在项目中加入json转换的依赖,例如jackson,fastjson,gson等

    Step2:在请求处理方法中将返回值改为具体返回的数据的类型, 例如数据的集合类List

    Step3:在请求处理方法上使用@ResponseBody注解

    十  Springmvc中的控制器的注解用哪个,可以是否用别的注解代替

    使用@Controller注解来标注控制器,不能使用别的注解代替。

    十一  如何在Springmvc中获取客户端提交的请求参数

    直接在请求处理方法中声明对应的形参,也可以是用@RequestParam注解来具体指定将那些请求参数映射到方法中对应的形参。

    十二    简述Springmvc中InternalResourceViewResolver解析器的工作机制

    使用prefix  + 方法的返回值 + suffix 生成一个物理视图路径。

    十三   Springmvc中如何完成重定向

    在请求处理方法的返回值前面加 redirect: 前缀, 最终会解析得到RedirectView,RedirectView会完成重定向的操作。

    十四    SpringMVC的工作原理

    (1)用户向服务器发送请求,请求被springMVC 前端控制器 DispatchServlet 捕获;

    (2)DispatcherServle 对请求 URL 进行解析,得到请求资源标识符(URL),然后根据该 URL 调用 HandlerMapping将请求映射到处理器 HandlerExcutionChain;

    (3)DispatchServlet 根据获得 Handler 选择一个合适的HandlerAdapter 适配器处理;

    (4)Handler 对数据处理完成以后将返回一个 ModelAndView()对象给 DisPatchServlet;

    (5)Handler 返回的 ModelAndView() 只是一个逻辑视图并不是一个正式的视图, DispatcherSevlet  通过ViewResolver 试图解析器将逻辑视图转化为真正的视图View;

    (6)DispatcherServle 通过 model 解析出 ModelAndView()中的参数进行解析最终展现出完整的 view 并返回给客户端;

    十五  说出SpringMVC常用的5个注解?如何使用 SpringMVC完成JSON操作?

    @Controller

    @RequestMapping

    @Resource和@Autowired

    @PathVariable

    @Repository

    使用下面的注解完成json操作

    @RequestBody

    @ResponseBody

  • 相关阅读:
    JAVASE语法零基础——static成员和代码块
    640.Solve the Equation
    if条件分支计算分段函数
    插入排序之希尔排序——【数据结构】
    Windows10系统下安装GPU版Pytorch和MMDetection
    java调优和排查
    day9.30
    物理机环境搭建-linux部署nginx
    React闭包
    【原创】MQTT开发笔记(三)Win10上部署Mosquitto
  • 原文地址:https://blog.csdn.net/m0_59281987/article/details/127992938