在web項(xiàng)目中就只有三大組件:
Filter過慮器
監(jiān)聽器.
Servlet
在web中過慮器就是一個(gè)類javax.servlet.Filter。
過慮器是用于在執(zhí)行時(shí),過慮用戶的請求(request),或是過慮從請求的資源中返回的響應(yīng)(response).

1:過慮器只對url(路徑)進(jìn)行過慮。
2:過慮器開發(fā)人員來實(shí)現(xiàn)。
3:過慮器由于是web的核心組,所以這個(gè)filter的實(shí)現(xiàn)者也必須要配置到web.xml中。
4:三個(gè)生命周期方法:init,destory,doFilter(執(zhí)行過慮任務(wù))。用戶的每次請求,都會執(zhí)行doFIlter方法,而
Init,destory只會執(zhí)行一次。
Init方法執(zhí)行的時(shí)間:在項(xiàng)目啟動(dòng)時(shí),直接初始化Filter的對象,所以會在tomcat啟動(dòng)時(shí)執(zhí)行init方法。
第一步:書寫一個(gè)類實(shí)現(xiàn)Filter接口
package cn.hongxin.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 OneFilter implements Filter { //此方法只會在tomcat在啟動(dòng)時(shí)執(zhí)行一次 public void init(FilterConfig filterConfig) throws ServletException { System.err.第二步:在web.xml中配置這個(gè)過慮器
<filter> <filter-name>one</filter-name> <filter-class>cn.itcast.filter.OneFilter</filter-class> </filter> <!-- 配置這個(gè)過慮器對哪一個(gè)url進(jìn)行過慮 --> <filter-mapping> <filter-name>one</filter-name> <url-pattern>/one </url-pattern> </filter-mapping>
第三步:測試執(zhí)行
ilter的filter-mapping中的url-pattern的設(shè)置 url-pattern的設(shè)置:
/* = 對所有url都請求這個(gè)servlet。| 都被這個(gè)filter過慮.
/ = 只可以給servlet。 - 所有其他的servlet不處理的url都由這個(gè)url所指定的servlet處理。默認(rèn)servlet。
*.jspx = 所有以jspx結(jié)束都請求到這個(gè)Servlet或是被某個(gè)Filter攔截。如http://local:8080/proj/abc.jspx
/jsps/* = 所有路徑中以/jsps/開頭的都請求到這個(gè)servlet或是被某個(gè)filter攔截到。
/jsps/*.jspx 錯(cuò)誤的:SUN規(guī)定*兩邊不可以同時(shí)出現(xiàn)字符。
<filter-mapping> <filter-name>one</filter-name> <!-- 對所有url都攔截過慮任務(wù) --> <url-pattern>/index.jsp</url-pattern> <url-pattern>/jsps/*</url-pattern> <!-- 攔截這個(gè)servlet上的所有url設(shè)置 --> <servlet-name>OneSerlvet</servlet-name> </filter-mapping>
過慮器中的其他配置如果有jsps/abc.jsp這個(gè)頁面,則顯示這個(gè)頁面有兩種方式:
1:在地址欄請求:http://local:8080/project/jsps/abc.jsp -- 可以被攔截到的,因?yàn)椋郝窂椒?jsp/abc.jsp
2:req.getRequestDispathcer(“/jsps/abc.jsp”).forward(req,resp); -
Dipatcher屬性:
Request – 默認(rèn)值,只攔截用戶的新的請求。
Forward – 對轉(zhuǎn)發(fā)進(jìn)行攔截。
Include – 對include攔截。
Error - 對錯(cuò)誤進(jìn)行攔截。
<!-- 設(shè)置對轉(zhuǎn)發(fā)攔截 -->
<dispatcher>REQUEST[W1]</dispatcher>
<dispatcher>FORWARD</dispatcher>
7、配置過慮器的初始化參數(shù)在filter類中有一個(gè)方法:init(FilterConfig config); 而filtetrConfig中包含了從web.xml中讀取初始化參數(shù)值。
<filter>
<filter-name>one</filter-name>
<filter-class>cn.itcast.filter.OneFilter</filter-class>
<init-param>
<param-name>name</param-name>
<param-value>張三Jack</param-value>
</init-param>
<init-param>
<param-name>age</param-name>
<param-value>88</param-value>
</init-param>
</filter>
在filter類中獲取值:
private FilterConfig conf;
//此方法只會在tomcat在啟動(dòng)時(shí)執(zhí)行一次
public void init(FilterConfig conf) throws ServletException {
this.conf=conf;
System.err.println("過慮器初始化了:"+this);
//獲取name的值:
String name = conf.getInitParameter("name");
System.err.println("name is:"+name);
System.err.println("----------------------------");
Enumeration<String> en= conf.getInitParameterNames();
while(en.hasMoreElements()){
String paramName = en.nextElement();
String val = conf.getInitParameter(paramName);
System.err.println(paramName+"="+val);
}
}
新聞熱點(diǎn)
疑難解答
圖片精選