java項目和web項目中的過濾器文件怎么使用?
-
Filter過濾器文件的設(shè)置和使用要注意什么問題??它是基于什么來運行的?越詳細越好
全部評論(1條)
-
- lushan12207 2016-07-27 15:39:14
- 過濾器是一個程序,它先于與之相關(guān)的servlet或JSP頁面運行在服務(wù)器上。過濾器可附加到一個或多個servlet或JSP頁面上,并且可以檢查進入這些資源的請求信息。在這之后,過濾器可以作如下的選擇: 1. 以常規(guī)的方式調(diào)用資源(即,調(diào)用servlet或JSP頁面)。 2.利用修改過的請求信息調(diào)用資源。 3. 調(diào)用資源,但在發(fā)送響應(yīng)到客戶機前對其進行修改 4. 阻止該資源調(diào)用,代之以轉(zhuǎn)到其他的資源,返回一個特定的狀態(tài)代碼或生成替換輸出。 1. 建立基本過濾器 建立一個過濾器涉及下列五個步驟: 1)建立一個實現(xiàn)Filter接口的類。這個類需要三個方法,分別是:doFilter、init和destroy。 doFilter方法包含主要的過濾代碼(見第2步),init方法建立設(shè)置操作,而destroy方法進行清楚。 2)在doFilter方法中放入過濾行為。doFilter方法的diyi個參數(shù)為ServletRequest對象。此對象給過濾器提供了對進入的信息(包括表單數(shù)據(jù)、cookie和HTTP請求頭)的完全訪問。第二個參數(shù)為ServletResponse,通常在簡單的過濾器中忽略此參數(shù)。Z后一個參數(shù)為FilterChain,如下一步所述,此參數(shù)用來調(diào)用servlet或JSP頁。 3)調(diào)用FilterChain對象的doFilter方法。Filter接口的doFilter方法取一個FilterChain對象作為它的一個參數(shù)。在調(diào)用此對象的doFilter方法時,激活下一個相關(guān)的過濾器。如果沒有另一個過濾器與servlet或JSP頁面關(guān)聯(lián),則servlet或JSP頁面被激活。 4)對相應(yīng)的servlet和JSP頁面注冊過濾器。在部署描述符文件(web.xml)中使用filter和filter-mapping元素。 5)禁用激活器servlet。防止用戶利用缺省servlet URL繞過過濾器設(shè)置。 1.1 建立一個實現(xiàn)Filter接口的類 所有過濾器都必須實現(xiàn)javax.servlet.Filter。這個接口包含三個方法,分別為doFilter、init和destroy。 public void doFilter(ServletRequset request, ServletResponse response, FilterChain chain) thows ServletException, IOException 每當(dāng)調(diào)用一個過濾器(即,每次請求與此過濾器相關(guān)的servlet或JSP頁面)時,就執(zhí)行其doFilter方法。正是這個方法包含了大部分過濾邏輯。diyi個參數(shù)為與傳入請求有關(guān)的ServletRequest。對于簡單的過濾器,大多數(shù)過濾邏輯是基于這個對象的。如果處理HTTP請求,并且需要訪問諸如getHeader或getCookies等在ServletRequest中無法得到的方法,就要把此對象構(gòu)造成HttpServletRequest。 第二個參數(shù)為ServletResponse。除了在兩個情形下要使用它以外,通常忽略這個參數(shù)。首先,如果希望完全阻塞對相關(guān)servlet或JSP頁面的訪問。可調(diào)用response.getWriter并直接發(fā)送一個響應(yīng)到客戶機。其次,如果希望修改相關(guān)的servlet或JSP頁面的輸出,可把響應(yīng)包含在一個收集所有發(fā)送到它的輸出的對象中。然后,在調(diào)用serlvet或JSP頁面后,過濾器可檢查輸出,如果合適就修改它,之后發(fā)送到客戶機。 DoFilter的Z后一個參數(shù)為FilterChain對象。對此對象調(diào)用doFilter以激活與servlet或JSP頁面相關(guān)的下一個過濾器。如果沒有另一個相關(guān)的過濾器,則對doFilter的調(diào)用激活servlet或JSP本身。 public void init(FilterConfig config) thows ServletException init方法只在此過濾器diyi次初始化時執(zhí)行,不是每次調(diào)用過濾器都執(zhí)行它。對于簡單的過濾器,可提供此方法的一個空體,但有兩個原因需要使用init。首先,F(xiàn)ilterConfig對象提供對servlet環(huán)境及web.xml文件中指派的過濾器名的訪問。因此,普遍的辦法是利用init將FilterConfig對象存放在一個字段中,以便doFilter方法能夠訪問servlet環(huán)境或過濾器名.其次,F(xiàn)ilterConfig對象具有一個getInitParameter方法,它能夠訪問部署描述符文件(web.xml)中分配的過濾器初始化參數(shù)。 public void destroy( ) 大多數(shù)過濾器簡單地為此方法提供一個空體,不過,可利用它來完成諸如關(guān)閉過濾器使用的文件或數(shù)據(jù)庫連接池等清除任務(wù)。 1.2 將過濾行為放入doFilter方法 doFilter方法為大多數(shù)過濾器地關(guān)鍵部分。每當(dāng)調(diào)用一個過濾器時,都要執(zhí)行doFilter。對于大多數(shù)過濾器來說,doFilter執(zhí)行的步驟是基于傳入的信息的。因此,可能要利用作為doFilter的diyi個參數(shù)提供的ServletRequest。這個對象常常構(gòu)造為HttpServletRequest類型,以提供對該類的更特殊方法的訪問。 1.3 調(diào)用FilterChain對象的doFilter方法 Filter接口的doFilter方法以一個FilterChain對象作為它的第三個參數(shù)。在調(diào)用該對象的doFilter方法時,激活下一個相關(guān)的過濾器。這個過程一般持續(xù)到鏈中Z后一個過濾器為止。在Z后一個過濾器調(diào)用其FilterChain對象的doFilter方法時,激活servlet或頁面自身。 但是,鏈中的任意過濾器都可以通過不調(diào)用其FilterChain的doFilter方法中斷這個過程。在這樣的情況下,不再調(diào)用JSP頁面的serlvet,并且中斷此調(diào)用過程的過濾器負責(zé)將輸出提供給客戶機。 1.4 對適當(dāng)?shù)膕ervlet和JSP頁面注冊過濾器 部署描述符文件的2.3版本引入了兩個用于過濾器的元素,分別是:filter和filter-mapping。filter元素向系統(tǒng)注冊一個過濾對象,filter-mapping元素指定該過濾對象所應(yīng)用的URL。 下面是一個完整的例子: //建立一個實現(xiàn)Filter接口的類。這個類需要三個方法,分別是:doFilter、init和destroy。 //doFilter方法包含主要的過濾代碼,init方法建立設(shè)置操作,而destroy方法進行清 package filterpkg; import javax.servlet.*; import javax.servlet.http.*; import java.io.*; public class testFilter implements Filter{ public void init(FilterConfig filterConfig) throws ServletException { } //在doFilter方法中放入過濾行為。doFilter方法的diyi個參數(shù)為ServletRequest對象。 //此對象給過濾器提供了對進入的信息(包括表單數(shù)據(jù)、cookie和HTTP請求頭)的完全訪問。 //第二個參數(shù)為ServletResponse,通常在簡單的過濾器中忽略此參數(shù)。 //Z后一個參數(shù)為FilterChain,如下一步所述,此參數(shù)用來調(diào)用servlet或JSP頁。 public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) { PrintWriter wout=null; try { wout=response.getWriter(); } catch(IOException e) { } HttpServletRequest req=(HttpServletRequest)request;//將request轉(zhuǎn)化為它的子類HttpServletRequest String uri=req.getRequestURI();//獲得傳入的URI if (uri.indexOf("MyJsp.jsp")>0 ||uri.indexOf("MainForm.do")>0 )//如果是我們指定的登錄頁面或驗證頁面 { try { //調(diào)用FilterChain對象的doFilter方法。Filter接口的doFilter方法取一個FilterChain對象作為它的一個參數(shù)。 //在調(diào)用此對象的doFilter方法時,激活下一個相關(guān)的過濾器。如果沒有另一個過濾器與servlet或JSP頁面關(guān)聯(lián),則servlet或JSP頁面被激活。 filterChain.doFilter(request, response); } catch(Exception e) { } return; } if (req.getSession()!=null) if (req.getSession().getAttribute("USERID")==null) { wout.write("<HTML><BODY> Check error! <br/> </BODY> </HTML>"); wout.flush(); return; } try { filterChain.doFilter(request, response); } catch(Exception e) { } } public void destroy() { } } web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <filter> <filter-name>CHECKCODE</filter-name> <filter-class>filterpkg.testFilter</filter-class> </filter> <filter-mapping> <filter-name>CHECKCODE</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <servlet> <description>This is the description of my J2EE component</description> <display-name>This is the display name of my J2EE component</display-name> <servlet-name>ControlServlet</servlet-name> <servlet-class>filterpkg.ControlServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>ControlServlet</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> </web-app>
-
贊(20)
回復(fù)(0)
熱門問答
- java項目和web項目中的過濾器文件怎么使用?
- Filter過濾器文件的設(shè)置和使用要注意什么問題??它是基于什么來運行的?越詳細越好
2016-07-27 01:46:18
691
1
- java web 過濾器跟的區(qū)別和使用
2018-04-17 04:54:51
349
2
- 用于農(nóng)業(yè)項目中的機器視覺識別軟件開發(fā)
- 目前國內(nèi)哪家公司能做農(nóng)業(yè)項目中機器視覺識別軟件的開發(fā),有沒有已投入使用的這種軟件。
2013-12-09 20:22:32
320
1
- 線材測試項目中絕緣指什么
- 測試是項目里的絕緣指什么
2013-10-18 06:47:44
470
4
- java中 過濾器 都有什么區(qū)別?尤其是和過濾器
2017-11-24 17:11:13
407
1
- java過濾器的3、include過濾器
2018-11-27 18:29:27
308
0
- 如何搭建java web測試環(huán)境
2016-12-17 17:12:36
396
2
- 如何在住宅建筑項目中引進光纖入戶
2018-06-19 09:08:45
573
1
- Java框架Struts2的和過濾器有什么區(qū)別?
2013-11-06 00:38:44
366
2
- java如何創(chuàng)建過濾器
2013-07-10 07:52:23
372
2
- 用maven的web 項目單元測試找不到類
- 頭一次用maven項目 有很多不明白的地方 完全按照視頻的步驟去做還出現(xiàn)很多錯誤 求老師解答
2014-02-09 11:51:51
209
1
- java中裝飾器和過濾器的概念是什么?
2009-06-07 04:09:05
472
2
- Java編程軟件怎么運行使用?
- 我學(xué)過c,c++,現(xiàn)在想學(xué)學(xué)java,JDK怎么用阿?什么環(huán)境變量什么的都不懂?path怎么設(shè)置?謝謝大家
2008-07-27 02:25:51
387
3
- 后綴名為.COD的文件是什么文件,怎么使用?
- 高手指教,謝謝!
2008-11-16 04:04:50
623
3
- java過濾器中的FilterChain對象
- 過濾器的doFilter()里有三個參數(shù),那FilterChain對象是哪里傳過來的啊它是像request對象一樣是JSP的隱藏對象嗎 如果只有一個過濾器的話filterchain.doFilter()是執(zhí)行要訪問的頁面嗎
2013-04-11 15:03:48
388
2
- Java SSI框架項目 怎么在項目里添加一個測試類
- 在測試類里用Spring注入獲取 數(shù)據(jù)存儲方法接口的對象 自己試了好幾個方法 測試類的main方法都報空指針錯誤 (測試類的功能就是調(diào)用項目里數(shù)據(jù)存儲接口的方法存數(shù)據(jù) 只不過存的字段有點出入)
2016-06-23 20:01:45
471
2
- Java 處理ZIP文件的工具包有沒有
2016-09-26 23:30:47
444
2
- ug6.0過濾器怎么使用
2011-10-12 11:25:49
467
1
- coreldraw 過濾器怎么使用
2018-11-30 10:07:29
316
0
- 教師資格證體檢項目中的腹部超聲,尿液分析是檢查什么
2018-05-07 03:38:11
444
1
4月突出貢獻榜
推薦主頁
最新話題





參與評論
登錄后參與評論