SpringMvc面试题
- 一、Spring MVC中的拦截器和Servlet中的filter有什么区别?
- 二、Spring MVC常用的注解有哪些?(高频)
- 三.springmvc参数绑定方式
- 四.如果想限定发送的请求方式应该如何进行实现?
- 五.Spring MVC的Controller线程安全?如何解决?
- 六.Spring MVC怎么样设定重定向和转发的?(高频)
- 七.Spring MVC怎么和AJAX相互调用的?
- 八.如何解决POST请求中文乱码问题,GET的又如何处理呢?
- 九.使用Spring MVC如何完成文件上传?
- 十.Spring MVC如何获得request, response, session?(高频)
- 十一.Spring MVC怎么处理异常?(高频)
- 十二.Spring MVC执行流程是什么?(高频)
- 十三.Spring MVC的主要组件都包含了哪些?(高频)
- 十四.springmvc和spring父子容器关系
- 十五.springmvc拦截器怎么使用
一、Spring MVC中的拦截器和Servlet中的filter有什么区别?
过滤器:
依赖于tomcat容器,
在servlet执行前后进行处理,
在实现上基于函数回调(不在当时调用),
可以对几乎所有请求进行过滤,
可以过滤死
拦截器:
依赖于SpringMvc框架,
在Controller执行前后进行处理
在实现上基于Java的反射机制,属于面向**切面编程(AOP)**的一种运用。
只能对controller请求进行拦截
可以拦截死
二、Spring MVC常用的注解有哪些?(高频)
1.mapping,对请求url和controller方法进行映射
@RequestMapping
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
2.rest注解
@ResponseBody
将controller方法的返回值转化为json,写入响应体
@RequestBody
@ResponseStatus
@RestController
@Controller + @ResponseBody
3.异常处理
@RestControllerAdvice
@ControllerAdvice + @ResponseBody
@ExceptionHandler:配置@ControllerAdvice处理全局异常,也可以使用在Controller中进行局部异常处理
4.方法参数
@RequestHeader
@CookieValue
@RequestParam
可以给key=value格式参数设置默认值
@PathVariable
5.格式转化
@DateTimeFormat
@NumberFormat
6.@Validated
表示java对象要进行校验,具体校验还是靠其他注解
7.ajax跨域
@CorssOrign
三.springmvc参数绑定方式
key-value
json
路径变量
四.如果想限定发送的请求方式应该如何进行实现?
两种方式:
1、使用@RequestMapping注解的method属性:
2、使用GetMapping
五.Spring MVC的Controller线程安全?如何解决?
Controller是默认单例模式,高并发下全局变量会出现线程安全问题!
解决方案:
1、将全局变量都变成局部变量(无状态),通过方法参数来传递。
2、将控制器的作用域从单例改为原型(单例改成多例),如下所示:
六.Spring MVC怎么样设定重定向和转发的?(高频)
1、在返回值前面加"forward:“就可以让结果转发,譬如"forward:user.do?name=method4”
2、在返回值前面加"redirect:“就可以让返回值重定向,譬如"redirect:http://www.baidu.com”
七.Spring MVC怎么和AJAX相互调用的?
通过Jackson框架就可以把Java里面的对象直接转化成Js可以识别的Json对象。
1.导入jackson地址
2.Controller方法直接返回对象或者List数据,在Controller方法上使用@ResponseBody注解
八.如何解决POST请求中文乱码问题,GET的又如何处理呢?
1、解决post请求乱码问题:
2.GET请求中文参数出现乱码解决方法有两个
①修改tomcat配置文件添加编码与工程编码一致,如下:
②另外一种方法对参数进行重新编码:实现HandlerInterctpter接口
String userName = new String(request.getParamter(“userName”).getBytes(“ISO8859-1”),“utf-8”)
ISO8859-1是tomcat默认编码,需要将tomcat编码后的内容按utf-8编码。
九.使用Spring MVC如何完成文件上传?
1.前端要求:
- 请求方式必须是POST请求
- 表单的enctype必须是multipart/form-data
- 表单中至少要有一个文件上传表单项
2.后端要求
- 导入commons-fileupload(spring MVC底层依赖的就是Apache的FileUpload)
- 配置文件上传解析器
- 在Controller方法的形参中定义MutipartFile,接收上传的文件,形要求参的名称需要和文件上传表单项名称一致
文件上传解析器的配置如下所示:
十.Spring MVC如何获得request, response, session?(高频)
1、方式一:在Controller方法的形参中可以直接定义 HttpServletRequest HttpServletResponse, HttpSession
2、方式二:通过@Autowired注入 HttpServletRequest,HttpServletResponse ,HttpSession
十一.Spring MVC怎么处理异常?(高频)
可以直接使用Spring MVC中的全局异常处理器对异常进行统一处理,此时Contoller方法只需要编写业务逻辑代码,不用考虑异常处理代码。
开发一个全局异常处理器需要使用到两个注解:@RestControllerAdvice(controllerAdvice+Responsebody) 、@ ExceptionHandler
如下所示:
十二.Spring MVC执行流程是什么?(高频)
1.初始化阶段
由tomcat创建DispatcherServlet(前端控制器)
①handlerMapping:做请求映射,找到响应控制器
②HandlerAdapter:(适配器)真正调用controller方法执行
③HandlerExceptionResolver:(解析器->异常)调用时出现异常,这个方法解决
④ViewResovler:将字符串解析为视图对象
⑤MultipartResovler:用在文件上传中。
2.匹配阶段
3.执行阶段
①没有异常阶段
②有异常
进入DispatcherServlet中的HandlerExceptionResolver异常处理流程
②有异常阶段
十三.Spring MVC的主要组件都包含了哪些?(高频)
1、前端控制器 DispatcherServlet(不需要程序员开发):
作用:接收请求、响应结果 相当于转发器,有了DispatcherServlet 就减少了其它组件之间的耦合度。
2、处理器映射器HandlerMapping(不需要程序员开发)作用:
根据请求的URL来查找Handler
3、处理器适配器HandlerAdapter(不需要程序员开发)作用:
执行处理器
4、处理器Handler,也叫Controller(需要程序员开发)
5、视图解析器 ViewResolver(不需要程序员开发)作用:
进行视图的解析 根据视图逻辑名解析成真正的视图(view)
6、视图View(需要程序员开发jsp)View是一个接口:
它的实现类支持不同的视图类型(jsp,freemarker,pdf等等)
十四.springmvc和spring父子容器关系
SpringMVC容器管理,controller,Handlermapping,ViewResolver
Spring容器是父容器,SpringMVC容器是子容器
子容器可以访问父容器上面的资源,所以我们会在看Controller可以注入Service