JSP 過(guò)濾器

2018-03-20 13:59 更新

JSP教程 - JSP過(guò)濾器


JSP過(guò)濾器是可用于攔截來(lái)自客戶端的請(qǐng)求或處理來(lái)自服務(wù)器的響應(yīng)的Java類。

過(guò)濾器可用于執(zhí)行驗(yàn)證,加密,日志記錄,審核。

我們可以將過(guò)濾器映射到應(yīng)用程序部署描述符文件web.xml中的JSP名稱或URL模式。

過(guò)濾器按照在部署描述符中聲明的順序執(zhí)行。

過(guò)濾器是實(shí)現(xiàn)javax.servlet.Filter接口的Java類。

javax.servlet.Filter接口定義了三個(gè)方法:

方法描述
doFilter(ServletRequest,ServletResponse,F(xiàn)ilterChain)當(dāng)請(qǐng)求/響應(yīng)對(duì)通過(guò)鏈時(shí)由容器調(diào)用。
init(FilterConfig filterConfig)指示正在投入使用的過(guò)濾器。
void destroy()向過(guò)濾器指示其正在被停止服務(wù)。

例子

以下代碼顯示如何創(chuàng)建打印IP地址的JSP過(guò)濾器。

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
 
public class LogFilter implements Filter  {
   public void  init(FilterConfig config) 
                         throws ServletException{
      String testParam = config.getInitParameter("test-param"); 
      System.out.println("init");
   }
   public void  doFilter(ServletRequest request, 
                 ServletResponse response,
                 FilterChain chain) 
                 throws java.io.IOException, ServletException {
 
      String ipAddress = request.getRemoteAddr();
      System.out.println("IP "+ ipAddress);
 
      chain.doFilter(request,response);
   }
   public void destroy( ){
      System.out.println("destroy");
   }
}

編譯LogFilter.java并將LogFilter.class類文件放在<Tomcat-installation-directory>/webapps/ROOT/WEB-INF/classes 中。

在部署描述符文件web.xml中為過(guò)濾器標(biāo)記創(chuàng)建以下條目:

<filter>
   <filter-name>LogFilter</filter-name>
   <filter-class>LogFilter</filter-class>
   <init-param>
    <param-name>your-param</param-name>
    <param-value>Initialization Parameter</param-value>
   </init-param>
</filter>
<filter-mapping>
   <filter-name>LogFilter</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>

上面的過(guò)濾器將應(yīng)用于所有的JSP,因?yàn)槲覀冊(cè)谖覀兊呐渲弥兄付?code> /* 。

多個(gè)過(guò)濾器

web.xml中的過(guò)濾器映射元素的順序確定Web容器將過(guò)濾器應(yīng)用于servlet或JSP的順序。

以下代碼顯示如何在web.xml文件中使用兩個(gè)過(guò)濾器。

<filter>
   <filter-name>LogFilter</filter-name>
   <filter-class>LogFilter</filter-class>
   <init-param>
    <param-name>test-param</param-name>
    <param-value>Initialization Parameter</param-value>
   </init-param>
</filter>
 
<filter>
   <filter-name>MyFilter</filter-name>
   <filter-class>MyFilter</filter-class>
   <init-param>
    <param-name>test-param</param-name>
    <param-value>Initialization Parameter</param-value>
   </init-param>
</filter>
 
<filter-mapping>
   <filter-name>LogFilter</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>
 
<filter-mapping>
   <filter-name>MyFilter</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>

要從上面的web.xml中反轉(zhuǎn)過(guò)濾器順序,請(qǐng)使用以下命令:

<filter-mapping>
   <filter-name>MyFilter</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>
 
<filter-mapping>
   <filter-name>LogFilter</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)