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> /* 。
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>
更多建議: