[JavaWeb] Servlet Filter
阿新 • • 發佈:2018-09-15
init size 多個 編寫 頁面 tin web服務 1.0 web項目
作用:
Servlet 過濾器可以動態地攔截請求和響應,以變換或使用包含在請求或響應中的信息。
可以將一個或多個 Servlet 過濾器附加到一個 Servlet 或一組 Servlet。Servlet 過濾器也可以附加到 JavaServer Pages (JSP) 文件和 HTML 頁面。調用 Servlet 前調用所有附加的 Servlet 過濾器。
Servlet 過濾器是可用於 Servlet 編程的 Java 類,可以實現以下目的:
- 在客戶端的請求訪問後端資源之前,攔截這些請求。
- 在服務器的響應發送回客戶端之前,處理這些響應
編寫Filter實際上是實現Filter接口,在調用servlet之前會先經過過濾器
步驟:
新建一個Filter類,然後編寫必要的initFilter和doFilter方法
package com.example.filter; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import java.io.IOException; @WebFilter(filterName = "FirstFilter") public class FirstFilter implements Filter { public void destroy() { } public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException { System.out.println("doFilter www.baidu.com"); chain.doFilter(req, resp); } public void init(FilterConfig config) throws ServletException { //獲得初始化參數 String siteName = config.getInitParameter("Site"); System.out.println("initFilter "+siteName); } }
之後需要在web.xml裏面進行註冊,配置Filter的名字,所作用的servlet等
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"> <servlet> <servlet-name>FirstServlet</servlet-name> <servlet-class>com.example.servlet.FirstServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>FirstServlet</servlet-name> <url-pattern>/TomcatTest/FirstServlet</url-pattern> </servlet-mapping> <servlet> <servlet-name>DisplayServlet</servlet-name> <servlet-class>com.example.servlet.DisplayServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>DisplayServlet</servlet-name> <url-pattern>/TomcatTest/DisplayServlet</url-pattern> </servlet-mapping> <filter> <filter-name>FirstFilter</filter-name> <filter-class>com.example.filter.FirstFilter</filter-class> <init-param> <param-name>Site</param-name> <param-value>www.baidu.com</param-value> </init-param> </filter> <!--配置Filter作用的Servlet--> <filter-mapping> <filter-name>FirstFilter</filter-name> <url-pattern>/TomcatTest/DisplayServlet</url-pattern> </filter-mapping> </web-app>
<url-pattern>標簽裏填的是作用的servlet的名字,Filter會對這個servlet進行處理,如果這個Filter對所有的Servlet作用,則填入/*
一個Javaweb項目中可以有多個Filter,形成一個過濾器鏈,調用他們的順序取決於他們在web.xml中的位置,在前則先調用,在後則後調用
Filter的生命周期:
public void init(FilterConfig config)
Filter對象的創建由Web服務器負責,在Web服務器啟動的時候會創建一個Filter對象,並調用initFilter方法進行初始化,並且整個過程initFilter方法只執行一次,只創建一個Filter對象
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
每次filter進行攔截都會執行
public void destroy()
銷毀對象時執行
持續更新!!
[JavaWeb] Servlet Filter