博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Servlet(四) 过滤器
阅读量:5064 次
发布时间:2019-06-12

本文共 2463 字,大约阅读时间需要 8 分钟。

Servlet Filter是存在于Servlet程序中的一批类,用于以下目的:

  • 在客户端请求访问后台资源之前对其进行拦截,并做指定处理
  • 在结果反馈给客户端之前对其进行指定的处理

目前存在各类过滤器,如下所示:

  • 鉴权过滤器
  • 数据解/压缩过滤器
  • 数据加/解密过滤器
  • 触发资源访问事件的过滤器
  • 图像转换过滤器
  • 日志及审计过滤器
  • MIME-TYPE链过滤器
  • 令牌过滤器
  • XML内容转换过滤器

过滤器通过web.xml进行发布,使用Servlet名字或URL模式进行映射。当Web容器启动时,它会为web.xml定义的每一个过滤器创建相应的实例,然后会依据web.xml过滤器的定义顺序依次调用,确切的讲,是依据<filter-mapping>的定义顺序。

 

过滤器的方法:

过滤器是实现了javax.servlet.Filter接口的类,该接口定义了三个方法:

  • public void doFilter (ServletRequest, ServletResponse, FilterChain)

    每当有 请求/应答对经过过滤器链的前后末端时,web容器都会调用该方法,由于链中的过滤器是依据web.xml中定义的顺序进行排序的,所以请求会依次经过被12345过滤器进行处理,应答是依次被54321过滤器进行处理

  • public void init(FilterConfig filterConfig)

    该方法被web容器调用,以标示当前过滤器已准备好提供相应的服务

  • public void destroy()

    该方法被web容器调用,以标示当前过滤器已不再提供相应的服务

 

代码示例:

// Import required java librariesimport java.io.*;import javax.servlet.*;import javax.servlet.http.*;import java.util.*;// Implements Filter classpublic class LogFilter implements Filter  {   public void  init(FilterConfig config)                          throws ServletException{      // Get init parameter       String testParam = config.getInitParameter("test-param");       //Print the init parameter       System.out.println("Test Param: " + testParam);    }   public void  doFilter(ServletRequest request,                  ServletResponse response,                 FilterChain chain)                  throws java.io.IOException, ServletException {      // Get the IP address of client machine.         String ipAddress = request.getRemoteAddr();      // Log the IP address and current timestamp.      System.out.println("IP "+ ipAddress + ", Time "                                       + new Date().toString());      // Pass request back down the filter chain      chain.doFilter(request,response);   }   public void destroy( ){      /* Called before the Filter instance is removed       from service by the web container*/   }}

上面的代码是一个日志过滤器类,实现了Filter接口,将其编译之后,通常放到web-inf下的classes目录下,然后修改web.xml将其发布:

LogFilter
LogFilter
test-param
Initialization Paramter
LogFilter
/*

上面仅仅为一个过滤器,如果还有其它需要,当然还可以所上所示再添加其它功能的过滤器。

 

/***********************************************外星人乔丹拍板时间***********************************************/

既然是容器,那web容器会包容程序员编写的各类主要功能的代码,然后由容器负责调用,减轻程序员的编码工作量,降低代码的耦合度,过滤器就是一个

经典的例子,只需在web.xml中进行相应过滤链的配置,其它的事情,交给容器去处理

转载于:https://www.cnblogs.com/AlienJordan/p/3864826.html

你可能感兴趣的文章
SQLite数据库简介
查看>>
利用堆实现堆排序&amp;优先队列
查看>>
Mono源码学习笔记:Console类(四)
查看>>
Android学习路线(十二)Activity生命周期——启动一个Activity
查看>>
《Genesis-3D开源游戏引擎完整实例教程-跑酷游戏篇03:暂停游戏》
查看>>
CPU,寄存器,一缓二缓.... RAM ROM 外部存储器等简介
查看>>
windows下编译FreeSwitch
查看>>
git .gitignore 文件不起作用
查看>>
Alan Turing的纪录片观后感
查看>>
c#自定义控件中的事件处理
查看>>
二十六、Android WebView缓存
查看>>
django Models 常用的字段和参数
查看>>
linux -- 嵌入式linux下wifi无线网卡驱动
查看>>
SVN使用教程总结
查看>>
SQL中varchar和nvarchar有什么区别?
查看>>
OpenCV矩阵运算总结
查看>>
Java Build Practice 4:Extend and Invoke Ant API
查看>>
[转] Transformer图解
查看>>
Linux 根文件系统制作
查看>>
IOS--沙盒机制
查看>>