zoukankan      html  css  js  c++  java
  • 雷林鹏分享:JSP 过滤器

      Servlet和JSP中的过滤器都是Java类,它们存在的目的如下:

      在请求访问后端资源时拦截它

      管理从服务器返回给客户端的响应

      下面列出了多种常用的过滤器类型:

      认证过滤器

      数据压缩过滤器

      加密过滤器

      触发资源访问事件的过滤器

      图像转换过滤器

      登录和验证过滤器

      MIME类型链过滤器

      令牌过滤器

      转换XML内容的XSL/T过滤器

      过滤器将会被插入进web.xml文件中,然后映射servlet、JSP文件的名字,或URL模式。部署描述文件web.xml可以在 conf 目录下找到。

      当JSP容器启动网络应用程序时,它会创建每一个过滤器的实例,这些过滤器必须在部署描述文件web.xml中声明,并且按声明的顺序执行。

      Servlet过滤器方法

      一个过滤器就是一个Java类,它实现了javax.servlet.Filter 接口。javax.servlet.Filter接口定义了三个方法:

      序号 方法 &描述

      1public void doFilter (ServletRequest, ServletResponse, FilterChain) 每当 request/response要通过过滤链时容器会调用这个方法,因为客户端请求链尾的资源

      2public void init(FilterConfig filterConfig) 容器调用这个方法来表明一个过滤器被安置在服务中

      3public void destroy() 容器调用这个方法来表明一个过滤器正在从服务中移除

      JSP过滤器示例

      这个例子将会打印IP地址和每次访问JSP文件的日期时间。当然,这只是个简单的例子,让您了解一些简单的过滤器用法,但是可以使用这些概念来自行构造更复杂的程序。

      // 引入Java包

      import java.io.*;

      import javax.servlet.*;

      import javax.servlet.http.*;

      import java.util.*;

      // 实现 Filter 类

      public class LogFilter implements Filter {

      public void init(FilterConfig config)

      throws ServletException{

      // 获取初始化参数

      String testParam = config.getInitParameter("test-param");

      //打印初始化参数

      System.out.println("Test Param: " + testParam);

      }

      public void doFilter(ServletRequest request,

      ServletResponse response,

      FilterChain chain)

      throws java.io.IOException, ServletException {

      // 获取客户端ip地址

      String ipAddress = request.getRemoteAddr();

      // 输出ip地址及当前时间

      System.out.println("IP "+ ipAddress + ", Time "

      + new Date().toString());

      // 传递请求道过滤器链

      chain.doFilter(request,response);

      }

      public void destroy( ){

      /* 在Filter实例在服务器上被移除前调用。*/

      }

      }

      编译LogFilter.java文件,然后将编译后的class文件放在<tomcat安装目录>/webapps/ROOT/WEB-INF/classes目录下。

      web.xml文件中的JSP过滤器映射

      过滤器被定义,然后映射成一个URL或JSP文件名,与servlet被定义然后映射的方式差不多。在部署描述文件web.xml中,使用标签来进行过滤器映射:

      

      LogFilter

      LogFilter

      

      test-param

      Initialization Paramter

      

      

      

      LogFilter

      /*

      

      上述过滤器将会应用在所有servlet和JSP程序中,因为我们在配置中指定了" /*"。您也可以指定一个servlet或JSP路径,如果您只想要将过滤器应用在少数几个servlet或JSP程序中的话。

      现在,像平常一样访问servlet或JSP页面,您就会发现服务器日志中产生了关于此次访问的记录。您也可以使用Log4J记录器来把日志记录在其它文件中。

      使用多重过滤器

      您的网络应用程序可以定义很多不同的过滤器。现在,您定义了两个过滤器,AuthenFilter和LogFilter,其它的步骤与前面讲的一样,除非要创建一个不同的映射,就像下面这样:

      

      LogFilter

      LogFilter

      

      test-param

      Initialization Paramter

      

      

      

      AuthenFilter

      AuthenFilter

      

      test-param

      Initialization Paramter

      

      

      

      LogFilter

      /*

      

      

      AuthenFilter

      /*

      

      过滤器的应用顺序

      在web.xml中元素的映射顺序决定了容器应用这些过滤器的顺序。要反转应用的顺序,您只需要反转web.xml中元素的定义顺序就行了。

      比如,上面的例子会首先应用 LogFilter然后再应用AuthenFilter,但是下面这个例子将会反转应用的顺序:

      

      AuthenFilter

      /*

      

      

      LogFilter

      /*

      

      (编辑:雷林鹏 来源:网络|侵删)

  • 相关阅读:
    hdu 2544 Dijstra模板题
    hdu 1002 prime 模板
    POJ_2653_Pick-up sticks_判断线段相交
    POJ_1556_The Doors_判断线段相交+最短路
    POJ_1269_Intersecting Lines_求直线交点
    POJ_3304_Segments_线段判断是否相交
    POJ_2318_TOYS&&POJ_2398_Toy Storage_二分+判断直线和点的位置关系
    ZOJ_2314_Reactor Cooling_有上下界可行流模板
    LuoguP4234_最小差值生成树_LCT
    BZOJ_3996_[TJOI2015]线性代数_最大权闭合子图
  • 原文地址:https://www.cnblogs.com/pengpeng1208/p/12809899.html
Copyright © 2011-2022 走看看