1. 概述:

1.1 什么是SpringMVC?简单介绍下你对SpringMVC的理解?

Spring MVC 是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把模型-视图-控制器分离,将复杂的web应用分为了清晰的几部分,Service层(处理业务)、DAO层(数据库操作)、Entity(实体类)和Controller层(控制层,返回数据给前台页面)。简化了开发,方便了组内开发人员之间的配合。

1.2 SpringMVC的特点?

  1. 可以支持各种视图技术,而不仅仅局限于JSP;

  2. 与Spring框架天然集成(如IOC和AOP);

  3. 清晰的角色分配:

    1. 前端控制器(dispatchServlet)
    2. 请求到处理器映射(handlerMapping)
    3. 处理器适配器(HandlerAdapter)
    4. 视图解析器(ViewResoler)
  4. 支持各种请求资源的映射策略。

2.核心组件

2.1 SpringMVC的主要组件?

  1. 前端控制器DispatcherServlet

    1. 作用:接受请求,响应结果,相当于转发器,有了DispatcherServlet就减少了其他组件之间的耦合度。
  2. 处理器映射器(HandlerMapping)

    1. 作用:根据请求的URL来查找处理器handler
  3. 处理器适配器(HandlerAdapter)

    1. 作用:负责执行Handler,返回视图ModelandView对象
  4. 处理器Handler**(需要程序员开发)**

  5. 视图解析器(ViewResolver)

    1. 作用:进行视图的解析,根据视图的逻辑名解析成真正的视图
  6. 视图(View)(需要程序员开发)

    1. View是一个接口,它的实现类支持不同的视图类型(比如JSP,Freemarker等等)

2.2 什么是DispatcherServlet?

Spring的MVC框架是围绕DispatcherServlet来设计的,它用来处理所有的HTTP请求和响应。

2.3 什么是SpringMVC的控制器?

  • 控制器提供了一个访问应用程序的行为,这个行为时通过服务接口实现的。

2.4 SpringMVC的控制器是不是单例模式,如果是,有什么问题?

是单例模式,所以在多线程访问的时候有线程安全问题,不要用同步,会影响性能。

3. 工作原理

  1. 客户端发送请求,直接请求到前端控制器DispatcherServlet。
  2. DispatcherServlet根据请求信息调用HandlerMapping,解析请求对应的Handler。
  3. 解析到对应的Handler(也就是我们平常说得Controller控制器)之后,开始由HandlerAdapter处理器适配器进行处理。
  4. 处理器适配器会根据解析到的Handler来调用真正的处理器来处理请求,并处理相应的业务逻辑。
  5. 处理器处理完毕后,会返回一个ModelAndView对象,Model是返回的数据对象,View是个逻辑上的View。
  6. ViewResolver是根据逻辑View来查找实际具体的View。
  7. DispatcherServlet把返回的Model传给View,进行视图渲染,即把模型数据填充到视图中。
  8. DispatcherServlet将View返回给客户端。

img

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是从请求中获取参数