一、springmvc工作原理
客户端请求 --> DispatcherServlet(前端控制器) --> 前端控制器根据用户的url,请求HandlerMapping(处理器映射器)查找匹配该url的handler --> 返回一个执行链**(HandlerExecutionChain)** --> 前端控制器再请求HandlerAdapter(处理器适配器)调用相应的handler进行处理并返回给前端控制器一modelAndView --> 前端控制器再请求视图解析器(ViewResolver)对返回的逻辑视图进行解析 --> 最后前端控制器将返回的视图进行渲染并把数据装入到request域,返回给用户。
二、过滤器、拦截器
过滤器是在请求到达servlet之前,
拦截器是在请求到达controller之前
1.jdk1.8之后接口可以实现,只需要加一个default,jdk1.8之前不可以
2.拦截器是基于AOP的
(1)进入handler方法之前执行
应用场景:用于身份认证、身份授权
比如身份认证,如果认证通过表示当前用户没有登录,需要此方法拦截不再向下执行
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception
(2)进入handler方法之后,返回modelAndView之前执行
应用场景:从modelAndView出发,将公用的模型数据(比如菜单导航)在此方法传到视图,也可以在这里统一指定视图
public void postHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler, ModelAndView modelAndView) throws Exception
**(3)执行handler完成执行此方法 **
应用场景:统一异常处理,统一的日志处理
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response,
Object handler, Exception ex) throws Exception