==================== Spring MVC拦截器使用 ==================== 1 修改响应页 /src/main/webapp/getBookSuccess.jsp: ...

获取图书(${id})成功

... 2 创建拦截器 /src/main/java/cn/tedu/springfile/utils/GetBookInterceptor.java: public class GetBookInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("拦截器> 预处理"); Enumeration keys = request.getParameterNames(); while (keys.hasMoreElements()) { String key = keys.nextElement(); if (key.equals("id") && Integer.parseInt(request.getParameter(key)) > 0) return true; // 放行 } response.sendError(400); return false; // 阻挡 } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("拦截器> 后处理"); modelAndView.addObject("id", request.getParameter("id")); } } 3 配置拦截器 /src/main/resources/spring-servlet.xml: ... ... 在“获取一本图书”页面: - 输入0或负标识,得到400错误。 - 输入正确标识,响应页面中包含该标识。 例程:SpringFile 4 拦截多个方法 一个拦截器可以拦截多个控制器方法: - 拦截多个方法 - 拦截所有方法 - 拦截除个别方法外的所有方法 5 拦截器链 /src/main/java/cn/tedu/springfile/utils/PreGetBookInterceptor.java: public class PreGetBookInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("前拦截> 预处理"); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("前拦截> 后处理"); } } /src/main/java/cn/tedu/springfile/utils/PostGetBookInterceptor.java: public class PostGetBookInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("后拦截> 预处理"); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("后拦截> 后处理"); } } /src/main/resources/spring-servlet.xml: ... | ... | | 按|串 前拦截> 预处理 配|连 拦截器> 预处理 置|拦 后拦截> 预处理 的|截 控制器> 获取一本图书 顺|器 后拦截> 后处理 序|链 拦截器> 后处理 | 前拦截> 后处理 | v ______________________________________________________________________________ |PreGetBookInterceptor|GetBookInterceptor|PostGetBookInterceptor|BookController| |---------------------|------------------|----------------------|--------------| ----> preHandle --------> preHandle --------> preHandle --------> | | | | | getBook | <---- postHandle <-------- postHandle <-------- postHandle <-------- | |_____________________|__________________|______________________|______________| 例程:SpringFile