「这是我参与11月更文挑战的第18天,活动详情查看:2021最后一次更文挑战」
1. 概述
1.1 SpringMVC你是如何理解的?
SpringMVC是一个轻量级的Web框架,通过模型-视图-控制器三层架构,对前端页面渲染和后端数据处理进行分离,实现解耦,提高开发效率和可维护性。
2. 核心组件
2.1 SpringMVC包含了哪些核心组件?
- 前端控制器(
dispatchServlet
),接受请求,响应结果,相当于转发器,具有分发功能 - 处理器映射器(
handlerMapping
),根据URL来寻找Handler - 处理器适配器(
handlerAdapter
),执行Handler,进行业务处理 - 处理器(handler),需要我们自己开发,也就是Controller中的方法
- 视图解析器(
ViewResolver
),进行视图解析,根据视图逻辑解析成真正的视图 - 视图(view):需要我们自己开发页面
2.2 工作原理
- 用户发送请求经过DispatcherServlet
- DispatcherServlet发送请求给HandlerMapping,委托查找Handler
- HandlerMapping会根据url,返回HandlerExecutionChain对象
- DispatcherServlet发送HandlerExecutionChain对象给HandlerAdapter
- HandlerAdapter找到对应的Controller方法,也就是Handler,在其中对业务进行处理
- 返回ModelAndView对象给HandlerAdapter
- HandlerAdapter将ModelAndView发送给DispatcherServlet
- DispatcherServlet会将ModelAndView发送给ViewResolver,进行视图解析
- 解析完成后,返回真正的视图View
- DispatcherServlet响应用户的请求
3. 常用注解
3.1 Spring MVC常用的注解有哪些?
- @RequestMapping:用于类和方法上,标注处理请求的路径,其中value属性用来指定URL地址,method指定请求类型,GET、POST、PUT、DELETE等
- @ResponseBody:将对象转换为Json字符串
- @RequestBody:将Json字符串转换给Java对象
- @RestController:相当于@ResponseBody + @Controller
- @PathVariable:实现RestFul风格时用的注解,能够在URL地址值中,获取变量值
@RequestMapping(value = "/page/{id}",value = RequestMethod.GET)
public String test(@PathVariable int id){
...
}
复制代码
3.2 @RequestParam注解的作用
从前端传过来的Request中获取参数,标注在方法的形参上
public String test01(@RequestParam(value = "id") int id)
复制代码
3.3 @Controller注解的作用
@Controller标记在类上,被它标记的类就是Spring MVC中的Controller对象。能够对请求进行处理,返回ModelAndView对象。
4. 面试问题
4.1 Spring MVC如何实现重定向和转发
- 转发:在返回值前加上“forward”
- 重定向:在返回值前加上“redirect”
4.2 异常处理
我们可以自己定义一个全局异常处理器,用@ControllerAdvice修饰处理器和@ExceptionHandler修饰方法。 Java秒杀系统方案优化 高性能高并发实战,学习手记(二)
4.3 如何获得从前端传过来的参数?
直接在形参里声明这个参数,但是名字与传过来参数的名字必须保持一致
4.4 说说WebApplicationContext
WebApplicationContext:继承自ApplicationContext
的一个接口,对ApplicationContext进行了扩展,它是为web开发准备的,它允许从相对于Web根目录的路径中装载配置文件完成初始化。它新增了作用域:reques/session/global session
。它的实现类有XMLWebApplicationContext
和AnnotationConfigWebApplicationContext
。