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 核心配置文件中注册自定义的拦截器
<mvc:interceptors>
    <mvc:interceptor>
        <mvc:mapping path="拦截路径规则"/>
        <mvc:exclude-mapping path="不拦截路径规则"/>
        <bean class="自定义拦截器的类全限定名"/>
    </mvc:interceptor>
</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;
    <filter>
        <filter-name>CharacterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</fil
                ter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>utf-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
(2) get 请求中文参数出现乱码解决方法有两个:
①修改 tomcat 配置文件添加编码与工程编码一致,如下:

    <ConnectorURIEncoding="utf-8" connectionTimeout="20000" port="8080" p
    rotocol="HTTP/1.1" redirectPort="8443"/>
②另外一种方法对参数进行重新编码:
String userName= new String(request.getParamter("userName").getBytes("ISO885
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中加入:

   <filter>  
     <filter-name>CharacterEncodingFilter</filter-name>  
         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
           <init-param>  
                    <param-name>encoding</param-name>  
                   <param-value>utf-8</param-value>  
                </init-param>  
        </filter>  
    <filter-mapping>  
      <filter-name>CharacterEncodingFilter</filter-name>  
        <url-pattern>/*</url-pattern>  
    </filter-mapping>

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

定义:有两种方式

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

配置:

   <mvc:interceptors>  
       <!--默认是对所有请求都拦截 -->  
       <bean id="myFirstInterceptor" class="com.atguigu.interceptor.MyFirstInterceptor">  
       </bean>  
       <!-- 只针对部分请求拦截或者不拦截 -->  
       <mvc:interceptor>  
           <mvc:mapping path=" " />  <!—指定拦截-->  
           <mvc:exclude-mapping path=””/> <!—指定不拦截-->  
           <bean class=" com.atguigu.interceptor.MySecondInterceptor " /> </mvc:interceptor>  
</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<Employee>等

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值