1. 程式人生 > >JavaWeb從入門到放棄(8)-servlet攔截器Fliter的使用(重定向和轉發)

JavaWeb從入門到放棄(8)-servlet攔截器Fliter的使用(重定向和轉發)

Filter位於javax.servlet.Filter,作用是在請求到達Servlet之前和服務端返回從Servlet返回之後對訊息進行攔截處理。

一.使用方法

     1.實現Filter介面,重新init、destroy和doFilter方法,前兩個方法一個是初始化一個是銷燬,最後一個方法表示攔截的邏輯處理。

      2.web.xml配置,配置和servlet配置相似,根據class配置別名,然後給這個別名配置需要攔截的servlet,*依然表示匹配所有。

例項:

  <!-- 配置過濾器,後面的init表示自己定義的常量,在程式碼中可以獲取到 -->
  <filter>
  <filter-name>myFilter</filter-name>
  <filter-class>com.test.c_171030.MyFilter</filter-class>
  <init-param>
  <param-name>data</param-name>
  <param-value>a data</param-value>
  </init-param>
  </filter>
  <!-- 配置過濾器需要過濾的url -->
  <filter-mapping>
  <filter-name>myFilter</filter-name>
  <url-pattern>/MyServlet</url-pattern>
  </filter-mapping>

在這個例子中我們定義了一個常量,這個常量在程式碼的讀取方法如下:
	data=filterConfig.getInitParameter("data");
	System.out.println("獲取web.xml中儲存的數值為:"+data);

二.使用舉例

   因為在doFilter方法中傳入了Request和Respone物件,所以可以對請求頭等部分資訊進行修改。

比如:客戶端請求了url+/MyServlet,現在由於需求變更,需要去請求url+/myServlet,那就需要使用如下:

1.請求轉發:

HttpServletRequest request = (HttpServletRequest) servletRequest; 


// 請求重定向,把之前請求/MyServelt重定向為到/myServrlt去
		// request.getRequestDispatcher("/myServelt").forward(request, servletResponse);

filterChain.doFilter(request, servletResponse);

這樣呼叫doFilter之後,收到這個請求的servlet將是/myServlet對於的servlet了

2.重定向

  HttpServletResponse httpServletResponse=(HttpServletResponse) servletResponse;
		// 直接攔截請求,重定向到百度或者報資訊
		//httpServletResponse.sendRedirect("http://www.baidu.com");
		httpServletResponse.sendError(505,"服務端出線未知異常");


如果是轉發,瀏覽器顯示的地址不會改變還是原地址,如果是重定向,瀏覽器的地址將會是新的地址

舉例:

客戶端找servlet借錢,轉發相當於這個servlet沒有錢,它去找同項目下的其他servlet借,借到後給了客戶端,客戶端並不知道到底是誰的錢,所以位址列一直顯示的是servlet;

而重定向相當於servlet沒有錢,它告訴客戶端你去找別人吧,這個別人可以是這個專案下的其他servlet也可以是其他任意一個servlet(不管在哪,任何地方,不同工程,不同伺服器都可以),然後客戶端就去找這個servlet了,由於是客戶端自己找這個servlet,所以瀏覽器的地址就變化了。

相關推薦

JavaWeb入門放棄8-servlet攔截Fliter的使用定向轉發

Filter位於javax.servlet.Filter,作用是在請求到達Servlet之前和服務端返回從Servlet返回之後對訊息進行攔截處理。 一.使用方法      1.實現Filter介面,重新init、destroy和doFilter方法,前兩個方法一個是初始化

JAVAWEB開發之HttpServletResponseHttpServletRequest詳解(上)各種亂碼、驗證碼、定向轉發

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 禁止瀏覽器快取 驗證碼圖片 // response.setH

Servlet中的request對象、定向轉發的差別6

current https 命令 相對 eba 進入 file before redirect 1.這裏所說的request對象指的是HttpServletRequest對象,它代表client的請求,當client通過HTTP協議訪問server時。HTTP請求頭

springmvc學習筆記24——定向轉發

重定向 重定向也是web開發中常用的,在springmvc中,重定向相當的簡單     @RequestMapping("/index")     public String index(){         ret

SpringMVC學習筆記三、定向轉發

SpringMVC中重定向與轉發通過return實現 重定向: return “redirect:/重定向頁面路徑” 轉發: return “forward:/轉發頁面路徑” 使用示例: @RequestMapping("/test2") pub

jsp/servlet定向轉發的區別

轉自:http://cantellow.javaeye.com/blog/372941 關於兩者的區別我就不用多說了,一搜一大堆,大概就是: 重定向是客戶端跳轉,轉發是伺服器端跳轉 在servlet中呼叫轉發、重定向的語句如下: request.getRequestDispatcher("new.jsp"

Servlet頁面跳轉技術--定向轉發包含

** Servlet頁面跳轉技術(Java) 重定向RequestDispatcher和轉發httpServletResponse.sendRedirect是javaEE中很常見的頁面跳轉技術,當我們在處理一個程式需要在後臺跳轉頁面的時候。我們就要用到頁

JavaWeb入門到精通》明日科技,清華大學出版社

order 清華大學 技術分享 ges 技術 -i 出版社 mage href 《JavaWeb從入門到精通》(明日科技,清華大學出版社)《JavaWeb從入門到精通》(明日科技,清華大學出版社)

JavaWeb入門到精通-會話管理

1 課程回顧 Servlet程式設計           1)Servlet生命週期(重點)                    構造方法:建立servlet物件。預設情況下,第一次訪問servlet物件時。只調用1次。                    init方法

7-Python3入門到實戰—基礎之數據類型字典-Dictionary

from ref 不存在 gpo http 必須 ems href int Python從入門到實戰系列——目錄 字典的定義 字典是另一種可變容器模型,且可存儲任意類型對象;使用鍵-值(key-value)存儲,具有極快的查找速度; 字典的每個鍵值(key=>val

Linux學習入門到打死也不放棄,完全筆記整理持續更新

linux 運維 學習筆記 這是一片學習筆記的匯總,查看內容請點擊各章節介紹。 第一章,計算機基礎和linux基本介紹 http://blog.51cto.com/13683480/2095433 第二章,linux基礎 http://blog.51

python程式設計:入門到實踐學習筆記-Django開發使用者賬戶

讓使用者能夠輸入資料(表單) 在建立使用者賬戶身份驗證系統之前,先新增幾個頁面,讓使用者能偶輸入資料。新增新主題、新增新條目以及編輯既有條目。 新增新主題 1.用於新增主題的表單 建立一個forms.py檔案與models.py放在同一目錄下。 from django import

一對一直播系統流媒體|入門到出家:直播系統流媒體原理

1.1 流媒體概念 不知道你發現沒有,我們的生活正慢慢的向著“實時”發生轉變。我們獲取、分享資訊,乃至日常中的衣食住行,都在變成像“自來水”那樣源源不斷“流體”服務,我們無需提前儲備,只需實時按需取用。這個轉變依賴於科技的進步,計算機科技在歷經了檔案(File

Python程式設計:入門到實踐的動手試一試答案第三章

#3-1 姓名 names = ['Qiqi','Danliang','Mingliang','Peng'] for x in range(0,4): print(names[x]) #3

Redis入門到熟練使用之主從,持久化配置詳解,第二篇,共五篇

Docker下redis的主從、持久化配置 redis是k-v型nosql資料庫,支援字串(string)、列表(list)、集合(set)、雜湊(hash)、有序集合(zset:形如member:score的雜湊集合,其中member為成員,score為成員得分,必須為f

Python程式設計:入門到實踐的動手試一試答案第十章

#10-1 Python學習筆記 with open('learning_python.txt') as file_object: contents = file_object.read() print(contents) ----------------

Python程式設計:入門到實踐的動手試一試答案第四章

#4-1 比薩 pizzas = ['apple pizza','banana pizza','chili pizza'] for pizza in pizzas: print('I like

Python程式設計:入門到實踐的動手試一試答案第五章

#5-1 條件測試 car = 'subaru' print("Is car == 'subaru'? I predict True.") if car == 'subaru': print(c

Python程式設計 入門到實踐 第四章 作業參考答案 部分

4-2 動物animals = ["dog","cat","panda","squirrel"] for a in animals: print(a.title()) for a in animals: print("A",a,"could be so cut

Jmeter(十七) - 入門到精通 - JMeter後置處理器 -上篇詳解教程

1.簡介   後置處理器是在發出“取樣器請求”之後執行一些操作。取樣器用來模擬使用者請求,有時候伺服器的響應資料在後續請求中需要用到,我們的勢必要對這些響應資料進行處理,後置處理器就是來完成這項工作的。例如系統登入成功以後我們需要獲取SessionId,在後面的業務操作中伺服器會驗證這