Java過(guò)濾器Filter的基本使用教程
過(guò)濾器Filter
- 用于攔截請(qǐng)求、過(guò)濾響應(yīng)
- 在不使用過(guò)濾器時(shí),瀏覽器向服務(wù)器發(fā)送請(qǐng)求后,服務(wù)器將會(huì)直接去獲取資源并響應(yīng)給瀏覽器
- 添加Filter后,瀏覽器向服務(wù)器發(fā)送請(qǐng)求,請(qǐng)求在到達(dá)服務(wù)器之間會(huì)先經(jīng)過(guò)Filter,在Filter進(jìn)行一系列判斷后滿足條件才可以被允許通過(guò)過(guò)濾到達(dá)服務(wù)器. 而服務(wù)器的響應(yīng)在抵達(dá)瀏覽器之前同樣會(huì)先經(jīng)過(guò)Filter之后才會(huì)到瀏覽器
Filter使用:
- 導(dǎo)包:
javax.servlet.Filter - Filter是一個(gè)接口,符合JavaEE規(guī)范
- Filter接口的實(shí)現(xiàn)類被稱作是一個(gè)過(guò)濾器,實(shí)現(xiàn)類需要重寫(xiě)Filter中的抽象方法
- Filter中有三個(gè)方法如下
// init--> 初始化方法
default public void init(FilterConfig filterConfig) throws ServletException {}
// doFilter--> 過(guò)濾器實(shí)體方法
public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain)throws IOException, ServletException;
// destroy --> 銷(xiāo)毀過(guò)濾器的方法
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:過(guò)濾器鏈,當(dāng)前過(guò)濾器過(guò)濾通過(guò)后會(huì)將請(qǐng)求或響應(yīng)交給下一個(gè)過(guò)濾器執(zhí)行,可以理解為當(dāng)前過(guò)濾器允許該請(qǐng)求或響應(yīng)通過(guò)
// 過(guò)濾器放行的固定寫(xiě)法 chain.doFilter(request, response);
destory:銷(xiāo)毀該過(guò)濾器
配置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界面輸出文字,通過(guò)過(guò)濾器進(jìn)行編碼,不通過(guò)過(guò)濾器將會(huì)打印亂碼
// 過(guò)濾器
@WebFilter(urlPatterns = {"/doFilter"})
public class Filter01 implements Filter {
// 初始化方法
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("Filter初始化完成");
}
// 過(guò)濾器主體
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");
// 允許通過(guò)過(guò)濾器
chain.doFilter(request, response);
}
// 銷(xiāo)毀方法
public void destroy() {
System.out.println("Filter被銷(xiāo)毀");
}
}
// 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)通過(guò)映射路徑/doNotFilter將會(huì)打印出中文亂碼,反之通過(guò)/doFilter則會(huì)設(shè)置好響應(yīng)的中文編碼正常輸出
到此這篇關(guān)于Java過(guò)濾器Filter的基本使用教程的文章就介紹到這了,更多相關(guān)Java過(guò)濾器Filter內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MyBatis?Mapper.XML?標(biāo)簽使用小結(jié)
在MyBatis中,通過(guò)resultMap可以解決字段名和屬性名不一致的問(wèn)題,對(duì)于復(fù)雜的查詢,引用實(shí)體或使用<sql>標(biāo)簽可以定義復(fù)用的SQL片段,提高代碼的可讀性和編碼效率,使用這些高級(jí)映射和動(dòng)態(tài)SQL技巧,可以有效地處理復(fù)雜的數(shù)據(jù)庫(kù)交互場(chǎng)景2024-10-10
Go Java算法之K個(gè)重復(fù)字符最長(zhǎng)子串詳解
這篇文章主要為大家介紹了Go Java算法之K個(gè)重復(fù)字符最長(zhǎng)子串詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08
Java中Stringbuilder和正則表達(dá)式示例詳解
Java語(yǔ)言為字符串連接運(yùn)算符(+)提供特殊支持,并為其他對(duì)象轉(zhuǎn)換為字符串,字符串連接是通過(guò)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ù)常用方法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10
Java之通過(guò)OutputStream寫(xiě)入文件與文件復(fù)制問(wèn)題
這篇文章主要介紹了Java之通過(guò)OutputStream寫(xiě)入文件與文件復(fù)制問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04
Spring?零基礎(chǔ)入門(mén)WebFlux框架體系
Spring5發(fā)布有兩年了,隨Spring5一起發(fā)布了一個(gè)和Spring?WebMvc同級(jí)的Spring?WebFlux。這是一個(gè)支持反應(yīng)式編程模型的新框架體系。反應(yīng)式模型區(qū)別于傳統(tǒng)的MVC最大的不同是異步的、事件驅(qū)動(dòng)的、非阻塞的,這使得應(yīng)用程序的并發(fā)性能會(huì)大大提高,單位時(shí)間能夠處理更多的請(qǐng)求2022-07-07

