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工作原理
- 客户端发送请求至前端控制器DispatcherServlet
- DispatcherServlet 根据请求信息调用处理器映射器HandlerMapping,解析请求获取对应的 Handler。
- 处理器映射器HandlerMapping根据请求url找到具体处理器,生成处理器对象及拦截器返回给DispatcherServlet
- DispatcherServlet请求处理器适配器HandlerAdapter处理Handler
- 处理完成后返回一个 ModelAndView 对象给DispatcherServlet
- DispatcherServlet将ModelAndView传给ViewResolver进行解析
- 解析完成后返回实际的 View
- DispatcherServlet将View进行视图渲染后返回给用户