分析
实现
1.后端controller
package com.czy.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("/testInterceptor")
public String testInterceptor(){
System.out.println("testInterceptor执行了...");
return "success";
}
}
2.编写拦截器类(实现handlerinterceptor接口)
拦截器1
package com.czy.interceptor;
import org.springframework.web.servlet.handlerinterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 自定义拦截器
*/
public class MyInterceptor1 implements handlerinterceptor {
/**
* 预处理,controller方法执行前
* return true 放行,执行下一个拦截器,如果没有,执行controller中的方法
* return false 不放行,无法执行controller
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("拦截器执行了...前111");
/*request.getRequestdispatcher("/WEB-INF/pages/error.jsp").forward(request,response);*/
return true;
}
/**
* 后处理的方法,controller方法执行后,success.jsp执行前
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("拦截器执行了...后111");
//跳转后success.jsp页面与afterCompletion也会执行,但我们只会看到跳转页面
/*出错了也可进行页面跳转:request.getRequestdispatcher("/WEB-INF/pages/error.jsp").forward(request,response);*/
}
/**
* success.jsp执行后,该方法会执行,此方法不能跳转页面
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("拦截器执行了...最后111");
}
}
拦截器2
package com.czy.interceptor;
import org.springframework.web.servlet.handlerinterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 自定义拦截器
*/
public class MyInterceptor2 implements handlerinterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("拦截器执行了...前222");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("拦截器执行了...后222");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("拦截器执行了...最后222");
}
}
3.配置拦截器
<!--配置拦截器-->
<mvc:interceptors>
<!--配置多个拦截器-->
<mvc:interceptor>
<mvc:mapping path="/user/*"/> <!--拦截的具体方法-->
<!--<mvc:exclude-mapping path=""/>--> <!--不拦截的方法-->
<bean class="com.czy.interceptor.MyInterceptor1"></bean> <!--配置拦截器对象-->
</mvc:interceptor>
<!--配置第二个拦截器-->
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.czy.interceptor.MyInterceptor2"></bean>
</mvc:interceptor>
</mvc:interceptors>
结果
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。