SpringMvc

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

十五.springmvc拦截器怎么使用

1.自定义拦截器,实现HandlerInterceptor接口

2.在配置文件/配置类中配置

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值