Java過濾器Filter的基本使用教程
過濾器Filter
- 用于攔截請(qǐng)求、過濾響應(yīng)
- 在不使用過濾器時(shí),瀏覽器向服務(wù)器發(fā)送請(qǐng)求后,服務(wù)器將會(huì)直接去獲取資源并響應(yīng)給瀏覽器
- 添加Filter后,瀏覽器向服務(wù)器發(fā)送請(qǐng)求,請(qǐng)求在到達(dá)服務(wù)器之間會(huì)先經(jīng)過Filter,在Filter進(jìn)行一系列判斷后滿足條件才可以被允許通過過濾到達(dá)服務(wù)器. 而服務(wù)器的響應(yīng)在抵達(dá)瀏覽器之前同樣會(huì)先經(jīng)過Filter之后才會(huì)到瀏覽器
Filter使用:
- 導(dǎo)包:
javax.servlet.Filter - Filter是一個(gè)接口,符合JavaEE規(guī)范
- Filter接口的實(shí)現(xiàn)類被稱作是一個(gè)過濾器,實(shí)現(xiàn)類需要重寫Filter中的抽象方法
- Filter中有三個(gè)方法如下
// init--> 初始化方法
default public void init(FilterConfig filterConfig) throws ServletException {}
// doFilter--> 過濾器實(shí)體方法
public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain)throws IOException, ServletException;
// destroy --> 銷毀過濾器的方法
default public void destroy() {}
init:在Web工程啟動(dòng)時(shí)就會(huì)調(diào)用進(jìn)行初始化
doFilter:三個(gè)參數(shù): request請(qǐng)求和response響應(yīng) chain鏈
FilterChain:過濾器鏈,當(dāng)前過濾器過濾通過后會(huì)將請(qǐng)求或響應(yīng)交給下一個(gè)過濾器執(zhí)行,可以理解為當(dāng)前過濾器允許該請(qǐng)求或響應(yīng)通過
// 過濾器放行的固定寫法 chain.doFilter(request, response);
destory:銷毀該過濾器
配置Filter:
// 注解
@WebFilter(urlPatterns = {"/doFilter"})
// Web.xml配置 與配置Servlet方法相同
<filter>
<filter-name>filterTest</filter-name>
<filter-class>com.filter.TestFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>filterTest</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
使用實(shí)例:
向web界面輸出文字,通過過濾器進(jìn)行編碼,不通過過濾器將會(huì)打印亂碼
// 過濾器
@WebFilter(urlPatterns = {"/doFilter"})
public class Filter01 implements Filter {
// 初始化方法
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("Filter初始化完成");
}
// 過濾器主體
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset:utf-8");
// 允許通過過濾器
chain.doFilter(request, response);
}
// 銷毀方法
public void destroy() {
System.out.println("Filter被銷毀");
}
}
// Servlet
@WebServlet(urlPatterns = {"/doFilter","/doNotFilter"})
public class Demo01 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().write("<h1>你好,鄭州</h1>");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
上述代碼所示:當(dāng)通過映射路徑/doNotFilter將會(huì)打印出中文亂碼,反之通過/doFilter則會(huì)設(shè)置好響應(yīng)的中文編碼正常輸出
到此這篇關(guān)于Java過濾器Filter的基本使用教程的文章就介紹到這了,更多相關(guān)Java過濾器Filter內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MyBatis?Mapper.XML?標(biāo)簽使用小結(jié)
在MyBatis中,通過resultMap可以解決字段名和屬性名不一致的問題,對(duì)于復(fù)雜的查詢,引用實(shí)體或使用<sql>標(biāo)簽可以定義復(fù)用的SQL片段,提高代碼的可讀性和編碼效率,使用這些高級(jí)映射和動(dòng)態(tài)SQL技巧,可以有效地處理復(fù)雜的數(shù)據(jù)庫交互場景2024-10-10
Go Java算法之K個(gè)重復(fù)字符最長子串詳解
這篇文章主要為大家介紹了Go Java算法之K個(gè)重復(fù)字符最長子串詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08
Java中Stringbuilder和正則表達(dá)式示例詳解
Java語言為字符串連接運(yùn)算符(+)提供特殊支持,并為其他對(duì)象轉(zhuǎn)換為字符串,字符串連接是通過StringBuilder(或StringBuffer)類及其append方法實(shí)現(xiàn)的,這篇文章主要給大家介紹了關(guān)于Java中Stringbuilder和正則表達(dá)式的相關(guān)資料,需要的朋友可以參考下2024-02-02
Spring boot route Controller接收參數(shù)常用方法解析
這篇文章主要介紹了Spring boot route Controller接收參數(shù)常用方法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10
Java之通過OutputStream寫入文件與文件復(fù)制問題
這篇文章主要介紹了Java之通過OutputStream寫入文件與文件復(fù)制問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04

