自定义拦截器
1. 跟过滤器比较像的技术
2. 发送时被拦截器拦截,在控制器的前后添加额外功能。
2.1 跟AOP区分开。AOP是在特定方法前后进行扩充(Spring中一般针对ServiceImpl中实现类方法)
2.2 拦截器,请求的拦截。针对的是控制器方法(SpringMVC中针对Controller控制器中方法)
3. SpringMVC拦截器和Filter过滤器的区别
3.1 拦截器只能拦截Controller
3.2 Filter可以拦截任何请求
4. 实现自定义拦截器的步骤:
4.1 新建类:实现HandlerInterceptor接口
public class DemoInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
System.out.println("preHandle");
return true;
}
@Override
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
throws Exception {
System.out.println("往:"+arg3.getViewName()+"跳转");
System.out.println("model的值"+arg3.getModel().get("model"));
arg3.getModel().put("model", "model修改后的的值");
System.out.println("postHandle");
}
@Override
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
System.out.println("afterCompletion");
}
}
4.2 在springmvc.xml中配置拦截器需要拦截哪些控制器:
4.2.1 拦截所有控制器
<mvc:interceptors>
<bean class="com.sxt.interceptor.DemoInterceptor"></bean>
</mvc:interceptors>
4.2..2 拦截特定的url(控制器)
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/demo"/>
<mvc:mapping path="/demo1"/>
<mvc:mapping path="/demo2"/>
<bean class="com.sxt.interceptor.DemoInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
拦截器栈
1. 当多个拦截器同时生效时,就组成了拦截器栈
2. 顺序:先进后出
3. 执行顺序与springmvc.xml中配置顺序有关
4. 举例:先配置拦截器A,再配置拦截器B,执行顺寻为:preHandle(A)-->preHandle(B)-->控制器-->postHandle(B)-->postHandle(A)-->JSP-->afterCompletion(B)-->afterCompletion(A)
附加-使用SpingMVC实现登录验证
1.把页面放入到web-inf中(达到页面不能够直接访问的效果)
1.1 放入的WEB-INF后必须通过控制器转发到页面(tomcat只能读取到项目根目录下的资源)
1.2 sprinvmvc拦截器拦截的是控制器,不能拦截jsp
2. 通过拦截器拦截全部的控制器,需要在拦截器内部放行login控制器
SpringMVC运行原理
1. 文字解释
如果在web.xml中设置DispatcherServlet的<url-pattern>为/时:
当用户发起请求,请求一个控制器时,首先会执行DispatcherServlet;由DispatcherServlet调用HandlerMapping的DefaultAnnotationHandlerMapping解析URL,解析后调用HandlerAdapter组件的AnnotationMethodHandlerAdapter调用Controller中的HandlerMethod。
当HandlerMethod执行完成后会返回View,会被ViewResolver进行视图解析,解析后调用jsp对应的.class文件并运行,最终把.class运行的结果响应给客户端。
以上就是SpingMVC运行原理