整理给自己以后复习看,边学边更新。
SpingMVC拦截器只能在SpingMVC框架中使用,拦截要访问的控制器方法,不会访问jsp,html之类的网页。
由此想到以前学过的过滤器,使用范围更广,在任何Java web工程中都可以用。
拦截器的声明
1.自定义拦截器的声明 需要继承 implements HandlerInterceptor。
2.在springMVC.xml文件中配置。
详细说明
1.三个方法
继承的接口中,包含3个方法。
①preHandle : 请求到达控制器之前拦截 (条件的拦截)
②postHandle :完成了控制器的操作,到达跳转jsp、html页面之前
③afterCompletion :到达显示显示页面之后
请求-----!-------->控制器----!-------->跳转的页面
*图源网络,此处仅个人学习使用,若侵权请联系我删除图片
2.配置文件
xml文件中拦截器配置 代码如下
<!-- 拦截器 -->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/demo1"/>
<bean class="com.interceptor.DemoInterceptor"></bean>
</mvc:interceptor>
<mvc:interceptor>
<mvc:mapping path="/demo1"/>
<bean class="com.interceptor.DemoInterceptor2"></bean>
</mvc:interceptor>
</mvc:interceptors>
参考代码
下面展示一些 参考代码
。
*代码引用自网络
public class MyInterceptor1 implements HandlerInterceptor {
//在目标方法执行之前 执行
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws ServletException, IOException {
System.out.println("preHandle.....");
String param = request.getParameter("param");
if("yes".equals(param)){
return true;
}else{
request.getRequestDispatcher("/error.jsp").forward(request,response);
return false;//返回true代表放行 返回false代表不放行
}
}
//在目标方法执行之后 视图对象返回之前执行
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
modelAndView.addObject("name","itheima");
System.out.println("postHandle...");
}
//在流程都执行完毕后 执行
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
System.out.println("afterCompletion....");
}
}