开发手册 欢迎您!
软件开发者资料库

JSP - 过滤器

JSP过滤器HttpServletResponse对象 - 从简单和简单的步骤学习JSP(Java Server Pages),从基本到高级概念,包括Java JSP技术,包括概述,环境设置,体系结构,生命周期,语法,指令,操作,隐式对象,客户端请求,服务器响应,表单数据,HTTP请求标头,响应标头,状态代码,写入过滤器,Cookie处理会话跟踪,文件上传,处理日期,页面重定向,点击计数器,自动刷新,发送电子邮件,标准标签库,数据库访问, XML数据,Java Bean,自定义标记,表达式语言,异常处理,调试,安全性,国际化。

在本章中,我们将讨论JSP中的过滤器. Servlet和JSP过滤器是可以在Servlet和JSP编程中使用的Java类,用于以下目的 :

  • 拦截客户端在访问后端资源之前的请求.

  • 在将服务器的响应发送回客户端之前对其进行操作.

规格和减号建议使用各种类型的过滤器;

  • 身份验证过滤器

  • 数据压缩过滤器

  • 加密过滤器

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

  • 图像转换过滤器

  • 日志记录和审核过滤器

  • MIME-TYPE链过滤器

  • 标记过滤器

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

过滤器部署在部署描述符文件 web.xml 然后映射到y中的servlet或JSP名称或URL模式我们的应用程序的部署描述符.可以在< Tomcat-installation-directory> \ conf 目录中找到部署描述符文件web.xml.

当JSP容器启动Web时在应用程序中,它会创建您在部署描述符中声明的每个过滤器的实例.过滤器按照在部署描述符中声明的顺序执行.

Servlet过滤器方法

过滤器只是一个实现 javax.servlet.Filter 界面. javax.servlet.Filter接口定义了三个方法 :

S.No.方法&描述
1

public void doFilter(ServletRequest,ServletResponse,FilterChain)

每次请求/响应对时,容器都会调用此方法由于客户端对链末端的资源请求而传递链.

2

public void init(FilterConfig filterConfig)

Web容器调用此方法以向过滤器指示它正在投入使用.

3

public void destroy()

Web容器调用此方法以向过滤器指示它正在停止服务.

JSP过滤器示例

以下e xample显示了每次访问任何JSP文件时如何打印客户端的IP地址和当前日期时间.此示例将为您提供对JSP过滤器的基本了解,但您可以使用相同的概念编写更复杂的过滤器应用程序 :

// 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*/   }}

按常规方式编译 LogFilter.java 并将 LogFilter.class 文件放入< Tomcat-installation-directory>/webapps/ROOT/WEB-INF/classes .

Web.xml中的JSP过滤器映射

定义过滤器,然后映射到URL或JSP文件名,其方式与定义Servlet的方式非常相似,然后映射到 web.xml 文件中的URL模式.在部署描述符文件中为过滤器标记创建以下条目 web.xml

   LogFilter   LogFilter            test-param      Initialization Paramter      LogFilter   /*

上面的过滤器将适用于所有servlet和JSP,因为我们在配置中指定了/* .如果要在几个servlet或JSP上应用过滤器,可以指定特定的servlet或JSP路径.

现在尝试调用任何servlet或JSP,你会看到生成的日志在你身上Web服务器日志.您可以使用 Log4J logger 将以上日志记录在一个单独的文件中.

使用多个过滤器

您的Web应用程序可能定义具有特定目的的几个不同过滤器.考虑一下,您定义了两个过滤器 AuthenFilter LogFilter .其余的过程将保持如上所述,除非你需要创建一个不同的映射,如下所述 :

   LogFilter   LogFilter            test-param      Initialization Paramter       AuthenFilter   AuthenFilter         test-param      Initialization Paramter       LogFilter   /*    AuthenFilter   /*

过滤器应用程序顺序

web.xml中过滤器映射元素的顺序决定了Web的顺序容器将过滤器应用于servlet或JSP.要反转过滤器的顺序,您只需要反转 web.xml 文件中的过滤器映射元素.

例如,上面的示例将首先应用LogFilter,然后将AuthenFilter应用于任何servlet或JSP;以下示例将颠倒顺序 :

   AuthenFilter   /*    LogFilter   /*