-
1、HttpRequest和ServletRequest區(qū)別
2、FilterInit(FilterConfig)初始化的用法
3、requset.getRequestURI()???????? //獲取請求頁面的相對路徑
4、String的方法str.indexOf("XXX")??? //獲取str內(nèi)容"XXX"在那個位置第一位為0
5、String的方法str.split(";")??? //才分str為多個string,以";"為才分線request.getContextPath();
save user info to session
在doFilter中獲得ServletRequest convert to HttpServletRequest之后,request.getSession,接著在獲得的session中設(shè)置
過濾的黑名單和白名單需要在FitlerConfig中配置
對于白名單放行
if true chain.doFilter
黑名單跳轉(zhuǎn)到相應(yīng)的處理頁面
else response.sendRedirect
FilterConfig配置
filter url:/*(*號是全匹配)
request.getRequestURI();(獲得當(dāng)前request請求的URI地址,用于判斷是否合法請求)
使用參數(shù)配置->init()->config.getInitParameter(name)(獲得FilterConfig)查看全部 -
1.概念:過濾器是一個服務(wù)器上的組件,它可以截取用戶端的請求和相應(yīng)信息,并對這些信息過濾<br>
2.工作原理:<br>
用戶請求——》xml文件中如果過濾器可以匹配則截取,否則不走過濾器——》過濾器放行方法之前的代碼——》web資源——》web的響應(yīng)返回到過濾器,然后過濾器執(zhí)行方興方法之后的代碼——》過濾器把web的響應(yīng)返回給用戶<br>
<br>
<br>
3.過濾器的生命周期:
實例化:web容器加載過濾器的配置信息<br>
初始化:filterServlet中的init()方法獲得配置信息,放到filterConfig對象里面<br>
private FilterConfig cf;<br>
public void init(FilterConfig arg0) throws ServletException {<br>
cf = arg0;<br>
}<br>
過濾 :進行過濾操作<br>
銷毀:執(zhí)行完畢銷毀<br>
<br>
<br>
4.過濾器的API:
5.多個過濾器(過濾器鏈)<br>
<br>
6.過濾器分類<br>
<br>
7.過濾器實例:登錄過濾器和編碼過濾器查看全部 -
我來說說我對異步過濾器的理解吧。根據(jù)過濾器的規(guī)則,過濾器得等servlet執(zhí)行結(jié)束才能停止,所以如果servlet執(zhí)行很久,過濾器得等很久,所以說呢,為了使得過濾器早點執(zhí)行結(jié)束,就讓servlet在后臺執(zhí)行,過濾器提前結(jié)束,這就是異步過濾器的優(yōu)點所在
@WebServlet(asyncSupported = true, displayName = "/AsyncServlet", urlPatterns={"/servlet/AsyncServlet"})
asyncSupported = true 是必須開啟用以支持異步
@WebFilter(filterName="AsynFilter",asyncSupported=true,value={"/servlet/AsyncServlet"},dispatcherTypes={DispatcherType.REQUEST,DispatcherType.ASYNC})
asyncSupported = true 是必須開啟用以支持異步
dispatcherTypes={DispatcherType.REQUEST,DispatcherType.ASYNC}
DispatcherType.REQUEST必須要加上,否則過濾器就不會生效了
同時注意在過濾的地址和servlet的地址必須相同查看全部 -
request ? ?用戶直接訪問頁面時(eg:請求response.sendredirect請求重定向),Web容器將會調(diào)用過濾器
? ? forward ? 目標(biāo)資源通過RequestDispatcher的forward訪問時,該過濾器被調(diào)用 ?<jsp:forward也能觸發(fā)
? ? include ? ?目標(biāo)資源通過RequestDispatcher的include訪問時,該過濾器被調(diào)用 ? <jsp:include也能觸發(fā) ? ?
? ? error ? ? ? ?目標(biāo)資源通過聲明式處理機制調(diào)用時,該過濾器被調(diào)用<error-page>
??? <error-code>404</error-code>//500
??? <location>/error.jsp</location>
??? </error-page>
<filter>
??????? <filter-name>ErrorFilter</filter-name>
??????? <filter-class>com.imooc.filter.ErrorFilter</filter-class>
??? </filter>
??? <filter-mapping>
??????? <filter-name>ErrorFilter</filter-name>
??????? <url-pattern>/error.jsp</url-pattern>
??????? <dispatcher>ERROR</dispatcher>
??? </filter-mapping>
@error.jsp
您輸入的路徑有誤!
@ErrorFilter.java
public void doFilter(ServletRequest servletrequest,
ServletResponse servletresponse, FilterChain filterchain)
throws IOException, ServletException {
System.out.println("檢測到有錯誤的信息!");
filterchain.doFilter(servletrequest, servletresponse);//注意:放行
}
Servlet3.0中加入了@引言的這種方式.
@WebFilter用來將一個類聲明為過濾器,該注解將會在部署時被容器處理,容器將根據(jù)具體的屬性配置將相應(yīng)的類部署為過濾器.(部署理解為項目發(fā)布,就會把Web.xml文件與項目的文件讀取在Web容器里,部署的時候容器就會識別注解,將相應(yīng)的類部署為過濾器.啟動服務(wù)器才執(zhí)行過濾器的初始化方法.)
則添加過濾器不需要再web.xml中配置.直接在過濾器類里加入@WebFilter聲明即可.
filter-mapping元素用來聲明Web應(yīng)用中的過濾器映射。過濾器可被映射到一個servlet或一個URL模式。將過濾器映射到一個servlet中會造成過濾器作用于servlet上。將過濾器映射到一個URL模式中則可以將過濾器應(yīng)用于任何資源,只要該資源的URL與URL模式匹配。過濾是按照部署描述符的filter-mapping元素出現(xiàn)的順序執(zhí)行的。
過濾器filter-mapping的<servlet-name>標(biāo)簽意思是過濾器關(guān)聯(lián)Servlet,當(dāng)某些用戶請求訪問Servlet的時候,會被過濾器截取請求.(即Web容器會調(diào)用過濾器的doFilter()方法)
過濾器filter-mapping的<url-pattern>標(biāo)簽意思是過濾器關(guān)聯(lián)的URL地址.當(dāng)用戶訪問關(guān)聯(lián)的URLWeb資源時,會被過濾器截取請求.(即Web容器會調(diào)用過濾器的doFilter()方法)
圖中上部分是Servlet3.0配置過濾器的方法.下部分是Servlet2.5的配置過濾器方法.查看全部 -
過濾器分類(通過<dispatcher>標(biāo)簽)
通過<dispatcher>標(biāo)簽的值不同把過濾器分類.此標(biāo)簽中有四個值可以選擇,可以同時選擇多個.
包括request、forword、include、error
假設(shè)同一個過濾器關(guān)聯(lián)了index.jsp與main.jsp.此過濾器的<dispatcher>標(biāo)簽值為request.
在過濾器中的doFilter()方法中
public void doFilter(ServletRequest req,ServletResponse rep,FilterChain chain){
HttpServletRequest request=(HttpServletRequest)req;
HttpServletResponse response=(HttpServletResponse)rep;
response.sendRedirect(request.getContextPath()+"/main.jsp");
}
當(dāng)用戶訪問index.jsp頁面時,便會被過濾器截取.并執(zhí)行doFilter()方法中的重定向去main.jsp頁面.但main.jsp也關(guān)聯(lián)了此過濾器,過濾器會截取到重定向新Web資源的請求.因此又會調(diào)用doFilter()方法中的重定向去main.jsp.所以是死循環(huán)的狀態(tài).
因為重定向是屬于request的行為.因此會被<dispatcher>標(biāo)簽值為request的過濾器截取到.即<dispatcher>標(biāo)簽值為request的過濾器可以截取重定向新Web資源的請求.
當(dāng)過濾器的doFilter()方法中用 request.getRequestDispatcher("/main.jsp").forward(arg0, arg1)請求轉(zhuǎn)發(fā)到main.jsp.此時當(dāng)用戶請求訪問index.jsp時,便會被過濾器截取,并且執(zhí)行doFilter()方法,然后請求轉(zhuǎn)發(fā)到main.jsp頁面.此時用戶可以訪問到main.jsp頁面,并沒有被過濾器截取.因為請求轉(zhuǎn)發(fā)屬于forward行為.因此<dispatcher>標(biāo)簽值為request的過濾器是截取不了通過請求轉(zhuǎn)發(fā)去新Web資源的請求.盡管<url-pattern>設(shè)置了main.jsp關(guān)聯(lián)過濾器,但仍然截取不了.請求轉(zhuǎn)發(fā):瀏覽器的地址欄不會變化,性能相對更好一些,因為獲取的資源是沒有二次講過瀏覽器的<br><br>
重定向:瀏覽器的地址欄是會變化的,獲取資源的時候經(jīng)過了二次通過瀏覽器發(fā)送請求的過程。
以下內(nèi)容源自其他同學(xué),當(dāng)然,自己百度搜索一下也是一樣的
這個也是一個參考:http://jingyan.baidu.com/article/37bce2be71adad1002f3a2c7.html
1.請求轉(zhuǎn)發(fā)
請求轉(zhuǎn)發(fā)是指將請求再轉(zhuǎn)發(fā)到另一資源(一般為JSP或Servlet)。此過程依然在同一個請求范圍內(nèi),轉(zhuǎn)發(fā)后瀏覽器地址欄內(nèi)容不變
請求轉(zhuǎn)發(fā)使用RequestDispatcher接口中的forward()方法來實現(xiàn),該方法可以把請求轉(zhuǎn)發(fā)到另外一個資源,并讓該資源對瀏覽器的請求進行響應(yīng)
RequestDispatcher rd = request.getRequestDispatcher(path); rd.forward(request,response);
或request.getRequestDispatcher(path) .forward(request,response);
2.重定向
重定向是指頁面重新定位到某個新地址,之前的請求失效,進入一個新的請求,且跳轉(zhuǎn)后瀏覽器地址欄內(nèi)容將變?yōu)樾碌闹付ǖ刂?br />重定向是通過HttpServletResponse對象的sendRedirect()來實現(xiàn),該方法相當(dāng)于瀏覽器重新發(fā)送一個請求
response.sendRedirect(path);
forward轉(zhuǎn)發(fā) :一次請求一次回應(yīng) 服務(wù)器跳轉(zhuǎn)
sendredirect重定向: 兩次請求兩次回應(yīng) 客戶端跳轉(zhuǎn)
由于sendredirect是request,會激活REQUEST類型的過濾器,因此要注意,是否會形成重定向循環(huán)
request 過濾request請求
forward 過濾重定向請求
include 過濾include請求查看全部 -
Filter可認(rèn)為是Servlet的一種“變種”,它主要用于對用戶請求進行預(yù)處理,也可以對HttpServletResponse進行后處理,是個典型的處理鏈。它與Servlet的區(qū)別在于:它不能直接向用戶生成響應(yīng)。完整的流程是:Filter對用戶請求進行預(yù)處理,接著將請求交給Servlet進行處理并生成響應(yīng),最后Filter再對服務(wù)器響應(yīng)進行后處理。
Filter有如下幾個用處。
在HttpServletRequest到達(dá)Servlet之前,攔截客戶的HttpServletRequest。
根據(jù)需要檢查HttpServletRequest,也可以修改HttpServletRequest頭和數(shù)據(jù)。
在HttpServletResponse到達(dá)客戶端之前,攔截HttpServletResponse。
根據(jù)需要檢查HttpServletResponse,也可以修改HttpServletResponse頭和數(shù)據(jù)。
Filter可負(fù)責(zé)攔截多個請求或響應(yīng);一個請求或響應(yīng)也可被多個請求攔截。
創(chuàng)建一個Filter只需兩個步驟:
創(chuàng)建Filter處理類(實現(xiàn)Filter接口).
web.xml文件中配置Filter(配置<filter>與<filter-mapping>).<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
? <display-name>JavaWeb_001_fistFilter</display-name>
? <welcome-file-list>
??? <welcome-file>index.jsp</welcome-file>
? </welcome-file-list>
?
? <filter>
? <filter-name>FistFilter</filter-name>
? <filter-class>com.filter.FistFilter</filter-class>
? </filter>
? <filter-mapping>
? <filter-name>FistFilter</filter-name>
? <url-pattern>/index.jsp</url-pattern>
? </filter-mapping>
?
? <filter>
? <filter-name>SecondFilter</filter-name>
? <filter-class>com.filter.SecondFilter</filter-class>
? </filter>
? <filter-mapping>
<filter-name>SecondFilter</filter-name>
<url-pattern>/index.jsp</url-pattern>
? </filter-mapping>
?
</web-app>查看全部 -
1.什么是過濾器?<br>
過濾器是web服務(wù)器端的一個組件,可以截獲用戶的請求和web資源的響應(yīng),對請求和響應(yīng)進行過濾
2.過濾器的工作原理?<br>
原理:用戶發(fā)送請求到過濾器,過濾器將用戶請求發(fā)送到web資源,web資源將響應(yīng)發(fā)送到過濾器,過濾器將響應(yīng)發(fā)送給用戶
3.過濾器的工作周期
a.在web容器啟動的時候?qū)嵗{(diào)用初始化方法,每次有請求響應(yīng)過來調(diào)用doFilter()方法,服務(wù)器容器關(guān)閉的時候調(diào)用銷毀方法。查看全部 -
過濾器大多數(shù)時間消耗在doFilter()方法中,doFilter()方法被Web容器調(diào)用,即被服務(wù)器調(diào)用,因為Web容器存在Tomcat容器中,Tomcat就是服務(wù)器.
doFilter()方法同時傳入ServletRequest Request、ServletResponse Response和Filter Chain對象的引用.然后過濾器就有機會處理請求,將處理任務(wù)傳遞給鏈中的下一個資源,(通過調(diào)用Filter Chain對象引用上的doFilter方法),之后在處理控制權(quán)返回該過濾器時處理響應(yīng).
關(guān)于chain.doFilter(request,response)
他的作用是將請求轉(zhuǎn)發(fā)給過濾器鏈上的下一個對象.這里的下一下對象指的是下一個filter,如果沒有filter那就是你請求的資源.一般filter都是一個鏈,在一個項目的web.xml中有幾個<filter>.就有幾個過濾器.
request->filter1->filter2->filter3->....->request resource(請求的Web資源),然后得到Web資源的響應(yīng),再沿著鏈返回給request.查看全部 -
過濾器xml配置
查看全部 -
分類
查看全部 -
web.xml配置
查看全部 -
三個方法
查看全部 -
過濾器的生命周期
查看全部 -
12
查看全部 -
11
查看全部
舉報