什么时拦截器
springMVC的拦截器就相当于servlet开发中的过滤器Filter,用于对请求进行处理以及预处理。将拦截器按照一定的顺序链接成一条链这条链被称为拦截器链,在访问被拦截的方法或者是字段时,拦截器链中的拦截器就会按照之前定义的顺序进行执行,拦截器也是AOP思想的具体实现。
拦截器与过滤器的区别:
自定义拦截器的开发步骤:
创建拦截器的实现类:
public class MyIntercepoter implements HandlerInterceptor {
//在目标方法执行之前进行执行。
//参数中 有springMVC封装的 request respond对象 可以用他们来进行操作创痛Sevlet开发中额所有操作
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("目标方法之前执行");
String username = request.getParameter("username");
if ("xiaozhang".equals(username))
return true;
else//返回的boolean的 如果是flase的话 就表示 对资源不放行,下面的方法也就执行不了【这样的话下面所有的操作都将无法执行】 true表示放行通过这个就可以实
// 现拦截操作
{
//request.getRequestDispatcher("/jsp/error.jsp").forward(request,response);
//使用请求重定向的话就是两次请求了,还会在次经过拦截器
response.sendRedirect("http://localhost:8080/SpringSSM_war_exploded/save15");
return false;
}
}
//在目标方法执行之后进行执行,视图返回之前执行
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("目标方法执行之后进行执行,返回视图之前");
//这个方法的参数中同样封装了request,response,以及ModelAndView 其中ModelAndView属性可以获取
// ,目标资源 你自己创建的ModelAndView对象,在这里可以对目标资源中ModelAndView设置的一些属性进行一些操作
modelAndView.addObject("suername","xaiozhang"); //这里的modelAndView和目标资源中的modelAndView对象是一个对象
modelAndView.setViewName("sds");
}
//在整个流程都执行完毕之后执行
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("这个流程执行完毕");
}
}
在springMVC配置文件中进行配置注册拦截器
<!-- 配置拦截器-->
<mvc:interceptors>
<mvc:interceptor>
<!-- 表示对那些资源进行拦截操作-->
<mvc:mapping path="/**"/>
<!-- 表示使用那写拦截器实现对那些资源的拦截-->
<bean class="com.itheima.zhujie.intercepoter.MyIntercepoter"/>
</mvc:interceptor>
</mvc:interceptors>
拦截器链
连接器链的执行流程:
拦截器链的执行流程,和配置拦截器的顺序有关。
示例代码:
<!-- 配置拦截器-->
<mvc:interceptors>
<mvc:interceptor>
<!-- 表示对那些资源进行拦截操作-->
<mvc:mapping path="/**"/>
<!-- 表示使用那写拦截器实现对那些资源的拦截-->
<bean class="com.itheima.zhujie.intercepoter.MyIntercepoter"/>
</mvc:interceptor>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.itheima.zhujie.intercepoter.MyIntercepoter1"/>
</mvc:interceptor>
</mvc:interceptors>