溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

javaweb之Filter生命周期和FilterConfig

發(fā)布時間:2020-06-12 21:56:59 來源:網(wǎng)絡 閱讀:201 作者:凱哥Java 欄目:編程語言

Filter聲明周期和FilterConfig

我們前面學習過Servlet的生命周期,同樣FilterConfig的生命周期也差不多。這篇來學習Filter的生命周期和FilterConfig這兩個知識點。


Filter的生命周期


我們先來復習下Servler的生命周期:實例化->初始化-> 服務->銷毀

Servlet是這樣,只有在第一次訪問該servlet的時候,才會進行實例化,然后初始化,然后執(zhí)行service方法中的代碼,最后app卸載或者tomcat服務關機,才會銷毀。


Filter的生命周期有點類似:

??服務器啟動,會創(chuàng)建Filter對象,并調(diào)用init方法,只調(diào)用一次。

??當訪問資源時,路徑與Filter的攔截路徑匹配,會執(zhí)行Filter中的doFilter方法,這個方法時真正攔截操作的方法。

??當服務器關閉,會調(diào)用Filter的destory方法進行銷毀操作。


這里我們來代碼練習一下,利用前面這個MyFilter.java來修改下代碼。

package?com.kaigejava.filter;


import?java.io.IOException;


import?javax.servlet.Filter;

import?javax.servlet.FilterChain;

import?javax.servlet.FilterConfig;

import?javax.servlet.ServletException;

import?javax.servlet.ServletRequest;

import?javax.servlet.ServletResponse;


public?class?MyFilter?implements?Filter {

????public?MyFilter() {

????????System.out.println("MyFilter對象實例化了");

????}

????

????@Override

????public?void?destroy() {

????????System.out.println("MyFilter對象銷毀了");

????}


????@Override

????public?void?doFilter(ServletRequest?request,?ServletResponse?response,?FilterChain?chain)

????????????throws?IOException,?ServletException?{

????????System.out.println("doFilter執(zhí)行了攔截");

????????//?放行

????????chain.doFilter(request,?response);

????}


????@Override

????public?void?init(FilterConfig?filterConfig)?throws?ServletException?{

????????System.out.println("MyFilter對象初始化了");

????}

}



重新部署下Tomcat,看看控制臺這幾句話是否打印出來。

1.%2?先看看啟動Tomcat的時候實例化和初始化是否執(zhí)行

javaweb之Filter生命周期和FilterConfig

2.%2?執(zhí)行攔截操作

我們訪問一下/servletDemo1,應該會執(zhí)行攔截,打印消息

javaweb之Filter生命周期和FilterConfig

這里的doFilter方法,訪問一次servlet就好執(zhí)行一次doFilter中代碼。

3.%2?關閉tomcat服務器,執(zhí)行銷毀方法

在Servers Tab,右鍵Tomcat服務器,點擊stop,相當于關閉tomcat服務器。

javaweb之Filter生命周期和FilterConfig


2.FilterConfig

在Filter生命周期方法中init()方法有一個參數(shù)就是FilterConfig,我們來學習下這個對象的功能的基本使用。

javaweb之Filter生命周期和FilterConfig

FilterConfig它時Filter的配置對象,它可以完成下列功能

??獲取Filter名稱

??獲取Filter初始化參數(shù)

??獲取ServletContext對象

下面我們來代碼演示下第二個獲取初始化參數(shù)的功能。

這里新建一個FilterConfigTest.java,也需要實現(xiàn)Filter接口。

先在web.xml中配置一下Filter和初始化參數(shù)。

<filter>

?????<filter-name>FilterConfigTest</filter-name>

?????<filter-class>com.anthony.filter.FilterConfigTest</filter-class>

?????<init-param>

?????????<param-name>encoding</param-name>

?????????<param-value>UTF-8</param-value>

?????</init-param>

?</filter>

?

?<filter-mapping>

?????<filter-name>FilterConfigTest</filter-name>

?????<url-pattern>/*</url-pattern>

?</filter-mapping>


在原有基礎上加上上面配置,保存web.xml文件,然后在FilterConfigTest.java寫入如下代碼。

package?com.anthony.filter;


import?java.io.IOException;


import?javax.servlet.Filter;

import?javax.servlet.FilterChain;

import?javax.servlet.FilterConfig;

import?javax.servlet.ServletException;

import?javax.servlet.ServletRequest;

import?javax.servlet.ServletResponse;


public?class?FilterConfigTest?implements?Filter {

????

????private?FilterConfig?filterConfig;


????@Override

????public?void?init(FilterConfig?filterConfig)?throws?ServletException?{

????????this.filterConfig?=?filterConfig;

????}

????

????@Override

????public?void?destroy() {

????????

????}


????@Override

????public?void?doFilter(ServletRequest?request,?ServletResponse?response,?FilterChain?chain)

????????????throws?IOException,?ServletException?{

????????String?encoding?=?filterConfig.getInitParameter("encoding");

????????System.out.println(encoding);

????????

????????chain.doFilter(request,?response);

????}


}


在瀏覽器刷新之后訪問

控制臺是可以打印UTF-8這個值。


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI