1. MVC设计模式
  • Model:系统涉及的数据,也就是 dao 和 bean。
  • View:展示模型中的数据,只是用来展示。
  • Controller:处理用户请求都发送给 ,返回数据给视图层并展示给用户。
2. 什么是SpringMVC
  • Spring MVC 是一款很优秀的 MVC 框架。Spring MVC 可以帮助我们进行更简洁的Web层的开发,并且它天生与 Spring 框架集成。
  • Spring MVC 下我们一般把后端项目分为 Service层(处理业务)、Dao层(数据库操作)、Entity层(实体类)、Controller层(控制层,返回数据给前台页面)。
3. @RestController和@Controller的区别
  • @Controller 返回一个页面,属于比较传统的Spring MVC 的应用,对应于前后端不分离的情况。
  • @RestController 返回JSON 或 XML 形式数据,对象数据直接以 JSON 或 XML 形式写入 HTTP 响应(Response)中,这种情况属于 RESTful Web服务,这也是目前日常开发所接触的最常用的情况(前后端分离)。
  • @Controller +@ResponseBody= @RestController
4. 全局异常处理
  • @ControllerAdvice :注解定义全局异常处理类
  • @ExceptionHandler :注解声明异常处理方法

示例:

@ControllerAdvice
@ResponseBody
public class GlobalExceptionHandler {

	// 抛出的MethodArgumentNotValidException会在该方法中被捕获
    @ExceptionHandler(MethodArgumentNotValidException.class)
    public ResponseEntity<?> handleMethodArgumentNotValidException(MethodArgumentNotValidException ex, HttpServletRequest request) {
       ......
    }
}
5. 拦截器
  • Spring Interceptor是一个非常类似于Servlet Filter 的概念,在 Spring中,当请求发送到 Controller 时,在被Controller处理之前,它必须经过 Interceptors(0或更多)。
  • 自定义 Interceptor需实现HandlerInterceptor接口,并重写以下三个方法:
// 在方法执行前调用
// 返回true则继续执行,返回falsa则拒绝请求,不再执行其他拦截器
public boolean preHandle(HttpServletRequest request,
                         HttpServletResponse response,
                         Object handler)
 
 // 方法执行后,渲染视图前调用
 // 可对传参进行修改
public void postHandle(HttpServletRequest request,
                       HttpServletResponse response,
                       Object handler,
                       ModelAndView modelAndView)
 
 // 渲染视图时调用
public void afterCompletion(HttpServletRequest request,
                            HttpServletResponse response,
                            Object handler,
                            Exception ex)
  • 拦截器的配置:自定义一个注解类实现WebMvcConfigurer接口,向容器中注册拦截器
@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // LogInterceptor apply to all URLs.
        registry.addInterceptor(new LogInterceptor());
    }
}
6. 拦截器的执行顺序

顺序进,倒序出

pre1——>pre2——>post2——>post1——>comp1——>comp2

¥7. SpringMVC工作原理
  1. 客户端发送请求至前端控制器DispatcherServlet
  2. DispatcherServlet 根据请求信息调用处理器映射器HandlerMapping,解析请求获取对应的 Handler
  3. 处理器映射器HandlerMapping根据请求url找到具体处理器,生成处理器对象及拦截器返回给DispatcherServlet
  4. DispatcherServlet请求处理器适配器HandlerAdapter处理Handler
  5. 处理完成后返回一个 ModelAndView 对象给DispatcherServlet
  6. DispatcherServlet将ModelAndView传给ViewResolver进行解析
  7. 解析完成后返回实际的 View
  8. DispatcherServlet将View进行视图渲染后返回给用户