1. 概述:
1.1 什么是SpringMVC?简单介绍下你对SpringMVC的理解?
Spring MVC 是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把模型-视图-控制器分离,将复杂的web应用分为了清晰的几部分,Service层(处理业务)、DAO层(数据库操作)、Entity(实体类)和Controller层(控制层,返回数据给前台页面)。简化了开发,方便了组内开发人员之间的配合。
1.2 SpringMVC的特点?
可以支持各种视图技术,而不仅仅局限于JSP;
与Spring框架天然集成(如IOC和AOP);
清晰的角色分配:
- 前端控制器(dispatchServlet)
- 请求到处理器映射(handlerMapping)
- 处理器适配器(HandlerAdapter)
- 视图解析器(ViewResoler)
支持各种请求资源的映射策略。
2.核心组件
2.1 SpringMVC的主要组件?
前端控制器DispatcherServlet
- 作用:接受请求,响应结果,相当于转发器,有了DispatcherServlet就减少了其他组件之间的耦合度。
处理器映射器(HandlerMapping)
- 作用:根据请求的URL来查找处理器handler
处理器适配器(HandlerAdapter)
- 作用:负责执行Handler,返回视图ModelandView对象
处理器Handler**(需要程序员开发)**
视图解析器(ViewResolver)
- 作用:进行视图的解析,根据视图的逻辑名解析成真正的视图
视图(View)(需要程序员开发)
- View是一个接口,它的实现类支持不同的视图类型(比如JSP,Freemarker等等)
2.2 什么是DispatcherServlet?
Spring的MVC框架是围绕DispatcherServlet来设计的,它用来处理所有的HTTP请求和响应。
2.3 什么是SpringMVC的控制器?
- 控制器提供了一个访问应用程序的行为,这个行为时通过服务接口实现的。
2.4 SpringMVC的控制器是不是单例模式,如果是,有什么问题?
是单例模式,所以在多线程访问的时候有线程安全问题,不要用同步,会影响性能。
3. 工作原理
- 客户端发送请求,直接请求到前端控制器DispatcherServlet。
- DispatcherServlet根据请求信息调用HandlerMapping,解析请求对应的Handler。
- 解析到对应的Handler(也就是我们平常说得Controller控制器)之后,开始由HandlerAdapter处理器适配器进行处理。
- 处理器适配器会根据解析到的Handler来调用真正的处理器来处理请求,并处理相应的业务逻辑。
- 处理器处理完毕后,会返回一个ModelAndView对象,Model是返回的数据对象,View是个逻辑上的View。
- ViewResolver是根据逻辑View来查找实际具体的View。
- DispatcherServlet把返回的Model传给View,进行视图渲染,即把模型数据填充到视图中。
- DispatcherServlet将View返回给客户端。
4.常用注解
4.1 SpringMVC常用的注解有哪些?
- @RequestMapping:用于处理请求url映射的注解,可用于类上或者方法上。用于类上表示类中所有响应请求的方法都是以该地址作为父路径。
- @RequestBody:注解实现接收http请求的json数据,将json转换为java对象。
- @ResponseBody:注解实现将conreoller方法返回对象转化为json对象响应给客户。
4.2 SpringMVC中的控制器注解一般用哪个?
一般用**@Controller注解,也可以使用@RestController,@RestController注解相当于@ResponseBody+@Controller**。
4.3 @PathVariable和@RequestParam的区别?
- @PathVariable是从Url路径中获取变量
- @RequestParam是从请求中获取参数