1. 程式人生 > >JavaWeb Filter 過濾器的機制 與使用 請求重定向與請求轉發的區別 跳轉過濾,過濾器dispatcher REQUEST與FORWARD區別

JavaWeb Filter 過濾器的機制 與使用 請求重定向與請求轉發的區別 跳轉過濾,過濾器dispatcher REQUEST與FORWARD區別

首先要清楚,過濾的是url

那麼所有頁面跳轉url都會變嗎?不會,比如請求轉發,前前後後都是一個url
首先要弄清請求重定向與請求轉發的區別;
舉例來說有兩個網頁index.jsp 然後分別通過兩種方式跳轉到main.jsp

請求轉發

伺服器端行為,可以理解為“內部處理”內容變,url不變
相當於index.jsp說交給我,然後偷偷外包給main.jsp去處理

最常見,是使用者業務流程的延續,相當於使用者請求一個頁面,然後該頁面交給另一個頁面處理,url不變,使用者是察覺不到的

從index.jsp請求轉發到main.jsp
請求轉發
- url不變,內容是main.jsp的內容,url還是index.jsp;
- 使用者請求與提交資料都保留,可以繼續處理;
- 使用者察覺不到

請求重定向

客戶端行為,可以理解為重新開始,純跳轉 url改變

相當於index.jsp說我不管了,你找別人吧

然後使用者重新遞交請求到main.jsp,兩次獨立請求,url肯定變,跳轉到一個完全無關的新訪問;
請求重定向

對比兩次可以知道,兩種跳轉本質完全不同,如果建立一個SimpleFilter過濾器 內容是跳轉;
過濾/index.jsp與/main.jsp兩個url,程式碼如下;

SimpleFilter.java

import com.sun.net.httpserver.Filter;

import javax.servlet.*;
import java.io.IOException;

/**
 * Created by XUH-h on 2017/7/20.
 */
public class SimpleFilter implements javax.servlet.Filter{ @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("Filter 初始化************"); } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws
IOException, ServletException { System.out.println("Filter 開始》》》》》》》》》》》》》》"); /*filterChain.doFilter(servletRequest, servletResponse);*/ System.out.println("首次監聽啟動"); servletRequest.getRequestDispatcher("main.jsp").forward(servletRequest, servletResponse); System.out.println("Filter 結束》》》》》》》》》》》》》》"); } @Override public void destroy() { System.out.println("終止!!!!!!!!"); } }

web.xml

    <filter>
        <filter-name>SimpleFilter</filter-name>
        <filter-class>SimpleFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>SimpleFilter</filter-name>
        <url-pattern>/index.jsp</url-pattern>
    </filter-mapping>
        <filter-mapping>
        <filter-name>SimpleFilter</filter-name>
        <url-pattern>/main.jsp</url-pattern>
    </filter-mapping>

1)對於請求轉發;forward跳轉到main.jsp url不變,因此過濾器只過濾一次/index.jsp的訪問;
當然這是針對dispatcher型別是預設的REQUEST而言,如果將dispatcher型別改為FORWARD,那麼即使url不變,也可以過濾Forward跳轉行為,然後就會死迴圈訪問main.jsp;

2)對於請求重定向,url一直變,然後一直過濾,一直死迴圈

3)如果想要監聽對main.jsp的forward行為,最好另寫一個過濾器SimpleFilter2,dispatcher型別為FORWARD,那麼每當index.jsp偷偷跳轉到main.jsp時就可以有相應的操作;如下

SimpleFilter2.java

import javax.servlet.*;
import java.io.IOException;

/**
 * Created by XUH-h on 2017/7/20.
 */
public class SimpleFilter2 implements javax.servlet.Filter{
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("Filter2 初始化************");

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("Filter2 開始》》》》》》》》》》》》》》");
        /*filterChain.doFilter(servletRequest, servletResponse);*/
        System.out.println("FORWARD跳轉監聽啟動");
        filterChain.doFilter(servletRequest, servletResponse);

        System.out.println("Filte2 結束》》》》》》》》》》》》》》");

    }

    @Override
    public void destroy() {
        System.out.println("2終止!!!!!!!!");
    }
}

執行結果

[2017-07-20 01:52:49,242] Artifact FilterDemo:war exploded: Artifact is deployed successfully
[2017-07-20 01:52:49,242] Artifact FilterDemo:war exploded: Deploy took 615 milliseconds
Filter 開始》》》》》》》》》》》》》》
首次監聽啟動
Filter2 開始》》》》》》》》》》》》》》
FORWARD跳轉監聽啟動
主介面MAIN》》》》》》》
Filte2 結束》》》》》》》》》》》》》》
Filter 結束》》》》》》》》》》》》》》
Filter 開始》》》》》》》》》》》》》》
首次監聽啟動
Filter2 開始》》》》》》》》》》》》》》
FORWARD跳轉監聽啟動
主介面MAIN》》》》》》》
Filte2 結束》》》》》》》》》》》》》》
Filter 結束》》》》》》》》》》》》》》

希望通過我的講解能讓大家對跳轉過濾有一定了解

相關推薦

JavaWeb Filter 過濾器機制 使用 請求定向請求轉發區別 過濾過濾器dispatcher REQUESTFORWARD區別

首先要清楚,過濾的是url 那麼所有頁面跳轉url都會變嗎?不會,比如請求轉發,前前後後都是一個url 首先要弄清請求重定向與請求轉發的區別; 舉例來說有兩個網頁index.jsp 然後分別通過兩種方式跳轉到main.jsp 請求轉發 伺

JavaWeb學習筆記 (六)定向請求轉發

一. 重定向 有兩種程式碼寫法 1.寫法一 response.setStatus(302) response.setHeader("Location","轉向網址的絕對路徑或相對路徑"); 2.寫法二 response.sendDirection("轉向網

請求定向請求轉發的關系

cti 愛好 ima 重定向 3-9 req 應該 用戶名 action 測試response.sendRedirect方法 先將index.jsp中的action頁面修改成為response.jsp 然後再response.jsp頁面中執行response.sendR

Servlet 獲取前端Form表單資料並實現請求定向請求轉發

1.前端介面 編寫一個最簡單的登入介面: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title&g

Web開發中的請求定向和內部轉發區別

一、呼叫方式 我們知道,在servlet中呼叫轉發、重定向的語句如下: request.getRequestDispatcher("new.jsp").forward(request, response);   //轉發到new.jsp response.sen

請求定向請求轉發

從含義上來講請求重定向:從名字中可以看出來他的主要作用,對url重新定向,是一種客戶端的行為,response.sendRedirect( ) 從本質上來將等於兩次請求,前一次請求url物件不會儲存,位址列的URL地址會改變。請求轉發:是一種伺服器的行為,request.ge

Request作為域物件存取資料 Request作為域物件;請求轉發定向都可以完成頁面

Request作為域物件存取資料 Request作為域物件 Request作為域物件的API Attribute:屬性 標誌的意思 向Request域中儲存資料:setAttribute(Stri

請求定向請求轉發區別

forward let request 在服務器 相同 服務 rdquo 傳遞 req 一個web資源收到客戶端請求後,通知服務器去調用另外一個web資源進行處理,稱之為請求轉發。一個web資源收到客戶端請求後,通知瀏覽器去訪問另外一個web資源,稱之為請求重定向。Requ

解決iframe定向讓父級頁面

轉:https://blog.csdn.net/xm_csdn/article/details/78131596   原文:http://www.jb51.net/article/40583.htm 有內嵌iframe的頁面,當session過期時,點選連線重定向後的跳轉會在i

javaweb定向請求轉發(response.sendRedirect()和request.getRequestDispatcher(rul).forward(request,response)))的區別

客戶端 不起作用 這也 方法 cnblogs rect() 獲取url rec alt 先來兩張圖,方便理解: 可以看出,重定向時,是服務器向遊覽器重新發送了一個response命令,讓遊覽器再次向url2發送請求,以獲取url2的資源 而請求轉發時,類似於是服務器自己

Jsp&Servlet 定向請求轉發絕對路徑的問題

一、重定向:通知瀏覽器重新發送至xxx的請求。 1、發生場景: (1)response.sendRedirect("xxx"); (2)JSP頁面的 src 屬性; (3)JSP表單的 action 屬性; 2、引數問題: 重定向只是告訴瀏覽器傳送請求URL,沒有攜帶任何引數

域物件 請求轉發 請求定向HttpServletResponse響應

域物件獲取全域性配置資訊與伺服器上檔案真實路徑 (1.域物件(在一定範圍內 儲存資訊的物件) ServletContext 範圍:整個程式中都可以訪問到 並且只有一個(單例物件) 每個servle

Jsp&Servlet 定向請求轉發絕對路徑的問題

一、重定向:通知瀏覽器重新發送至xxx的請求。 1、發生場景: (1)response.sendRedirect("xxx"); (2)JSP頁面的 src 屬性; (3)JSP表單的 action 屬性; 2、引數問題: 重定向只是告訴瀏覽器傳送請求URL,沒有攜帶任何引

「學習筆記」請求轉發Forward請求定向(Redirect)的區別

通過一個比喻來簡單理解:  請求轉發:A向B傳送一次請求,想讓他完成某項工作,當B接受到請求時,發現自己完成不了,又請求C幫忙,C接收到B請求之後最終完成了該項工作,並把最後的結果交給了A。在此期間,A只發送了一次請求,他只知道把任務交給了B,至於B是如何完成的,A並不知道,他只等待最終的

請求定向請求轉發

相信很多剛開始接觸jsp的同學會搞不清楚請求重定向和請求轉發的區別,這裡首先舉個栗子~~ 假設你去辦理某個護照 重定向:你去了A局,A局的人說:“這個事不歸我們管,你們應該去B局”,然後,你就從A局退了出來,自己又跑了一趟B局。 請求轉發:你去了A局,A局看了以後,知道這個

七、Forword(請求轉發)Redirect(定向)

1、從資料共享上 Forword是一個請求的延續,可以共享request的資料 Redirect開啟一個新的請求,不可以共享request的資料 2、從位址列

IT兄弟連 JavaWeb教程 請求定向案例

沒有 tomcat ner 表示 輸出 返回 extends 組件 cati Check2Servlet類與Output2Servlet類之間為請求轉發關系。在web.xml文件中,為Check2Servlet映射的URL為"/check2",為Outp

【Servlet】深入淺出Java定向請求轉發

列表 url地址 ssi 什麽 stack led 要去 處理 代碼 import java.text.*; import java.util.*; import java.io.*; import javax.servlet.http.*; i

請求轉發請求定向

tdi 之間 只知道 servlet 成了 區別 rep 發送請求 習慣 比喻: 請求轉發:A向B發送請求,想讓B幫忙完成一項工作,當B接收到請求後發現自己完成不了,於是B請C幫忙,C接收到B的請求後最終完成了該項工作,並把最後的結果返回給A。此過程A只發送了一次請求給B,

HTTP中的定向請求轉發區別

response 傳輸 觀察 web應用 ali jpg 處理 size 什麽 一、調用方式 我們知道,在servlet中調用轉發、重定向的語句如下:request.getRequestDispatcher("new.jsp").forward(request, resp