[SpringMVC笔记] SpringMVC-17-拦截器参数

SpringMVC-17-拦截器参数

拦截器代码样例:

@Component
public class ProjectInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("preHandle...");
        // 刷新请求中所有的 cookie 寿命,再加入到响应中
        Cookie[] cookies = request.getCookies();
        if (cookies != null) for (Cookie cookie : cookies) {
            cookie.setMaxAge(60 * 60 * 24 * 7);
            response.addCookie(cookie);
        }
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle...");
        // 获取原始的 Controller 方法
        HandlerMethod hm = (HandlerMethod) handler;
        Method method = hm.getMethod();
        System.out.println("原始方法:" + method.getDeclaringClass() + "." + method.getName());
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("afterCompletion...");
        // 打印处理器执行过程中出现的异常
        System.out.println("出现的异常:" + ex);
        if (ex != null)
            ex.printStackTrace();
    }
}
1、参数 request 与 response

request 和 response 分别表示请求与响应,拦截器的三个方法中都存在这两个参数,类型是 HttpServletRequest 和 HttpServletResponse,就是 Servlet 里的请求与响应,可以进行 Servlet 原始操作,比如进行 Cookie 的读取与添加等操作

值得注意的是,只有在 preHandle 方法中对 response 的操作才会响应给客户端,postHandle 和 afterCompletion 方法则不会

2、参数 handler

handler 参数类型是 Object,但实际上是 HandlerMethod 类,三个方法中都存在这个参数,是对原始的 Controller 方法进行的封装,通过 handler 调用 getMethod() 函数可以得到原始方法

3、参数 modelAndView

类型是 ModelAndView,只存在于 postHandle 方法中,如果处理器执行完成具有返回结果,可以读取到对应数据与页面信息,并进行调整

4、参数 ex

类型是 Exception,只存在于 afterCompletion 方法中,表示处理器执行过程中出现的异常对象,可以针对异常情况进行单独处理,SpringMVC 中有专门的异常处理器,所以此处不常用

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值