1. 程式人生 > >Java中的過濾器doFilter裡的chain.doFilter()函式理解

Java中的過濾器doFilter裡的chain.doFilter()函式理解

關於chain.doFilter()函式在最近的使用中不是很理解,但是考慮到他是過濾器。過濾器顧名思義就是在執行某件事情的時候開始之前。開始進行處理的叫做過濾處理。一個方法,一個類就是充當過濾器的角色。它是在一個容器(類似於Tomcat)啟動之後,開啟一網站,他就會根據配置就行過濾處理。doFilter()方法就是過濾器的主要方法,init()方法就是在容器啟動的時候執行的。doFilter()方法中的chain.doFilter(request,response)方法剛開始還有些不怎麼理解。現在有一點明白了。
doFilter(request,response)的方法就是在你開啟一個頁面當滿足過濾器的條件的時候,他就會繼續執行你開啟頁面時候的操作。同時如果你使用了httpservletrequest和httpservletResponse的話,獲取servletPath的值就是你要開啟的檔案的地址。例子如下:

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest req=(HttpServletRequest)request;
        HttpServletResponse resp=(HttpServletResponse)response;
        String servletPath= req.getServletPath();
        HttpSession session=req.getSession();
        String flag=(String)session.getAttribute("flag"
); if(servletPath!=null&&(servletPath.equals("/03/index.jsp")||servletPath.equals("/03/login.jsp")||servletPath.equals("/loginServlet17"))){ chain.doFilter(request, response); }else{ if(flag!=null&&flag.equals("login_success")){ chain.doFilter(request, response); }else
if(flag!=null&&flag.equals("login_error")){ req.setAttribute("msg", "登入失敗,請重新登入"); req.setAttribute("return_uri", servletPath); RequestDispatcher rd=req.getRequestDispatcher("/03/login.jsp"); rd.forward(req, resp); }else{ req.setAttribute("msg","你尚未登入"); req.setAttribute("return_uri", servletPath); RequestDispatcher rd=request.getRequestDispatcher("/03/login.jsp"); rd.forward(req, resp); } } System.out.println(servletPath); }

相關推薦

Java過濾器和攔截器的區別

區別 對象 pos ava 初始 反射機制 action 調用 反射 1.攔截器是基於java反射機制的,而過濾器是基於函數回調的。 2.過濾器依賴於servlet容器,而攔截器不依賴於servlet容器。 3.攔截器只對action起作用,而過濾器幾乎可以對所有請求起作用

Java的靜態變數和靜態函式

Java中的靜態變數和靜態函式 靜態變數:    在JAVA中類在宣告的時候,其實並沒有申請和產生記憶體空間,就如同我們的一個切實可行的想法,但其實並沒有去實施這個想法。而類只有在用這種資料型別建立一個類的物件的時候,才能在記憶體中申請和產生類大小的記憶體空間,這一塊記憶體空間是用來存放

java的hashmap的resize()原始碼分析:

java中的hashmap裡的resize() hashmap的resize 當hashmap中的元素越來越多的時候,碰撞的機率也就越來越高(因為陣列的長度是固定的),所以為了提高查詢的效率,就要對hashmap的陣列進行擴容,陣列擴容這個操作也會出現在Arra

JAVAsuper和this呼叫建構函式

this 和super在建構函式中只能有一個,且都必須是建構函式當中的第一行。 super關鍵字,子類可以通過它呼叫父類的建構函式。 1、當父類的建構函式是無參建構函式時,在子類的建構函式中,就算不寫super()去呼叫父類的建構函式,編譯器不會報錯,因為編譯器

Java過濾器與攔截器的區別與使用

攔截器(Interceptor) 攔截器是動態攔截Action呼叫的物件。它提供一種機制可以使開發者可以定義一個action執行的前後執行的程式碼,也可以在一個action執行前組織其執行。同時也是提供了一種可以提取的action中可重用的部分的方式 攔截器在A

java的初始化(建構函式和innt函式

        先說一下什麼是初始化,就是在最開始給成員變數一個初始的值,這個時候你就會問了,既然後面還要給它賦值為什麼要給它初始化呢,不是多此一舉麼,首先這個初始化是為了防止程式執行時候出現未知的錯誤,或者bug。        初始化一般在建構函式中進行,它定義了函式的初

JS和JAVA常用的編碼轉碼函式

js中escape,encodeURI,encodeURIComponent函式和unescape,decodeURI和decodeURIComponent函式的功能1.escape方法對String物件編碼,escape方法返回一個包含了"轉義序列"的字串值。除了ASCII

JAVA關於set()和get()方法的理解及使用

當我 一般來說 怎麽 而是 知識 了解 構造 set 今後 https://www.cnblogs.com/fly-sky-han/p/6564439.html 我們先來看看set和get這兩個詞的表面意思,set是設置的意思,而get是獲取的意思,顧名思義,這兩個方法是對

javathis這個概念初學者非常難理解,請舉例說明

不返回 什麽 自己 var 自動 new 視頻 article int 4.this關鍵字(this key word) (視頻下載) (全部書籍) 繼上一小節,(3.一個對象可能有多個參考)this是當中的一個參考!指向他自己。 本章源碼 class MyTest

Java就什麼是對映的簡單理解

對映是一種特殊的對應關係。 打個比方,生活中一隻箭可以射中一隻鳥,也可以射不中,甚至可以射中幾隻。但是在程式中,這隻箭必須射中一隻,而且也只能能射中一隻。 正常一點的理解就是: 對映就是把兩個物件對應起來。 對應的物件叫做象,被對應的物件叫做原象。 Java中有非常好的例子。實現

javapackage(包)的使用理解

java中package(包)的使用理解 2017年02月05日 02:30:08 FengGLA 閱讀數:17755 標籤: java 更多 個人分類: java學習筆記 版權宣告:本文為博主原創文章,未經博主允許不得轉載。

Java關於單例模式的一些理解

單例模式是常見的設計模式之一,又細分為餓漢模式和懶漢模式,比較重要。 什麼是單例模式: 單例模式是為了避免重複生成同一個例項物件,而產生的一種模式。因為物件在記憶體中佔據空間比較大,相對而言,更希望對於一個已有的物件,不必要每次都新建一個相同的物件。多個變數指向同一個物件

Java值傳遞和引用傳遞的理解

一、基本型別和引用型別的理解Java中的資料型別分為兩種為基本型別和引用型別。1、基本型別的變數儲存原始值,所以變數就是資料本身。    常見的基本型別:byte,short,int,long,char,float,double,Boolean,returnAddress。2

一些簡單的例子讓你在Java能更好的學習並理解迴圈結構(1)!

一、java中流程控制方式採用三種基本流程結構:順序結構,選擇(分支)結構,迴圈結構。   1、[if-else 結構]    if(1>2){     system.out.println("if條件成立時,執行的程式碼");   }else{     System.out.println("if條

JavaHashMap和TreeMap的區別深入理解

Java中HashMap和TreeMap的區別 首先介紹一下什麼是Map。在陣列中我們是通過陣列下標來對其內容索引的,而在Map中我們通過物件來對物件進行索引,用來索引的物件叫做key,其對應的物件叫做value。這就是我們平時說的鍵值對。 HashMap通

java關於set()和get()方法的理解和使用

  我們來了解一下JAVA面向物件程式設計中的封閉性和安全性。封閉性即對類中的域變數進行封閉操作,即用private來修飾他們,如此一來其他類則不能對該變數訪問。這樣我們就將這些變數封閉在了類內部,這樣就提高了資料的安全性,當我們想要操作這些域變數怎麼辦呢?我們可以通過兩種方法,第一中即通過public方式的

關於javadao,model,service,impl,util的理解

dao 與資料庫的操作,增刪改查等方法model 一般都是javabean物件,例如與資料庫的某個表相關聯。service 供外部呼叫,等於對dao,model等進行了包裝。impl 定義的介面util 通常都是工具類,如字串處理、日期處理等

關於java為什麼使用介面的解析及其理解

一、為什麼專案中需要使用介面? 在專案中,有一些功能,不僅僅是一個類去實現,即有很多地方有用到,大家需要統一標準。所以需要用介面,這樣大家同時實現一個介面,就能夠統一規範。在介面中只是定義了基本的方法名,具體的實現交給實現類。 統一標準之後的下一件事情,就是

linux核心學習--"list.h" del move splice 函式理解

第三篇部落格,主要是針對刪除,移動,合併函式的理解,很簡單的,相信大家一看就明白了。 static inline void __list_del(struct list_head * prev, struct list_head * next) //刪除結點。刪除連

關於Java的程序和執行緒的理解

程式:一段靜態的程式碼,一組指令的有序集合,它本身沒有任何執行的含義,它只是一個靜態的實體,是應用軟體執行的藍本。程序:是程式的一次動態執行,它對應著從程式碼載入,執行至執行完畢的一個完整的過程,是一個動態的實體,它有自己的生命         週期。它因建立而產生,因排程而執行,因等待資源或事件而被處於等待