首页 技术 正文
技术 2022年11月11日
0 收藏 612 点赞 2,612 浏览 2000 个字

其实拦截器就是我们的AOP编程。拦截器在我们的实际项目中实用性比较大的,比如:日志记录,权限过滤,身份验证,性能监控等等。下面就简单的来研究一下拦截器:

public interface HandlerInterceptor {
   

  //在处理器适配器执行前调用 前面讲过 为各种处理器适配 通俗的讲意思就是说在执行controller的方法
  //之前执行,返回true或者是false,true代表的是执行和面的逻辑,即执行后面的处理器或者拦截器

   boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception;

    //在执行完适配的调用方法后,生成视图之前执行,官方是这样解析的:
    // but before the DispatcherServlet renders the view.

    void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
throws Exception;
  //在所以的操作以后执行
void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception;

很明显的看出来这是一个接口,我们在平时使用的时候,也是直接实现接口的方式的,具体每一个方法的作用也都将了一下,为了更好了理解这几个方法调用的时机,我们来进行测试一下:

拦截器:

public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
System.out.println("<===========preHandle=============>"+System.currentTimeMillis());
return true;
}
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
System.out.println("<===========postHandle=============>"+System.currentTimeMillis()); } public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex)
throws Exception {
System.out.println("<===========afterCompletion=============>"+System.currentTimeMillis()); }

controller:

protected ModelAndView handleRequestInternal(HttpServletRequest request,
HttpServletResponse response) throws Exception {
ModelAndView mv=new ModelAndView();
System.out.println("Controller"+System.currentTimeMillis());
mv.setViewName("index");
return mv;
}

jsp:

<%
long endTime=System.currentTimeMillis();
System.out.println(“Jsp:”+endTime);
%>

执行完以后控制台打印:

<===========preHandle=============>
Controller1451574182055
<===========postHandle=============>
Jsp:
<===========afterCompletion=============>

这也验证了上面说法。

也许会有这样的疑惑,业务需求可能只需要继承一个方法,那怎么办,看其他几个比较烦人(处女座)。这时候我们就可以通过继承HandlerInterceptorAdapter 这个抽象类了,

这个不用解释了吧,你可以选择继承任意几个来完成自己的业务逻辑。

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,493
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,907
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,740
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,495
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,133
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,297