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開發之HttpServletResponse和HttpServletRequest詳解(上)(各種亂碼、驗證碼、重定向和轉發)
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,在後面的業務操作中伺服器會驗證這