在Filter過濾器中使用req.getPathInfo方法的返回值問題
請求URL2 : http://localhost/text/sert/1
請求URL3 : http://localhost/text/servlet
Filter路徑 : /*
Servlet路徑: /servlet/*
一、請求URL1
URL1不是專案存在的實際目錄,伺服器提交往Servlet和Servlet互動,此時請求會被Filter攔截,當我們在
Filter中呼叫請求物件的request.getPathInfo()方法時,會返回 1 ;
二、請求URL2
此時的URL2路徑也會被提交往Servlet同時也被Filter攔截,我們在Filter中開始掉request.getPathInfo()方法,
返回值將會是 null
出現上述情況的根本原因在於,就算URL遭到了Filter的攔截,同時Filter也作用在Servlet之前,但當我們
在Filter裡面呼叫request的getPathInfo()方法時,方法的返回值本質還是返回請求URL相對於對應Servlet的
路徑的相對路徑,類比情況一。要注意的是,當請求URL找不到與之對應得Servlet的時候,自然也就沒有了相對
的參考點,自然也就不存在著相對路徑,返回值就會是Null,類比情況二。
儘管是在Filter中呼叫請求物件的getPathInfo()方法也儘管Filter執行在Servlet前,但是該方法的返回值和
Filter無關,也和Filter的路徑無關。只和存不存在對應的Servlet有關。
三、請求URL3
提交請求URL3,此時有Servlet與之對應,能夠進入Servlet,但是他們的地址目錄一樣,相對地址為空,所有
getPathInfo()方法也返回Null;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebFilter("/*")
public class TestFilter implements Filter {
public TestFilter() {
}
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req=(HttpServletRequest)request;
HttpServletResponse resp=(HttpServletResponse)response;
System.out.println("過濾器中的PathInfo:"+req.getPathInfo());
chain.doFilter(req, resp);
}
public void init(FilterConfig fConfig) throws ServletException {
}
}
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(name="text",urlPatterns={"/servlet/*"})
public class TestServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("Servlet中的PathInfo:"+req.getPathInfo());
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
this.doGet(req, resp);
}
相關推薦
JDBC中的executeBatch方法返回值-2
executeBatch方法是提交批處理的命令,返回一個整形陣列int[],陣列中的每個數字對應一條命令的影響行數,在Oracle的驅動中沒有實現該功能,即提交成功後不能返回影響行數,所以返回-2。 在JDBC的規範中Statement.SUCCESS_NO_INFO(-2
在Filter過濾器中使用req.getPathInfo方法的返回值問題
請求URL1 : http://localhost/text/servlet/1 請求URL2 : http://localhost/text/sert/1 請求URL3 : http://localhost/text/servlet Filter路徑 :
Java 中帶參帶返回值方法的使用
public java public class mains { public static void main(String[] args) { mains hello = new mains(); int[] scores={79,52,98,81}; hello.sort(sc
struts2在配置文件中調用Action的方法返回值
ack 文件下載 返回 public class int cat chm webex struts2在配置文件中可以調用Action的方法返回值 1.Action中 //文件下載名 public String getDownloadFileName(){
java中方法返回值前的<T>的作用
方法返回值前的<T>的左右是告訴編譯器,當前的方法的值傳入型別可以和類初始化的泛型類不同,也就是該方法的泛型類可以自定義,不需要跟類初始化的泛型類相同 我們通過一段程式碼比較來看下就明白了 class Show<T> { public void p
java中方法返回值前的的作用
方法返回值前的<T>的左右是告訴編譯器,當前的方法的值傳入型別可以和類初始化的泛型類不同,也就是該方法的泛型類可以自定義,不需要跟類初始化的泛型類相同 我們通過一段程式碼比較來看下就明白了 class Show<T> { public vo
Controller中方法返回值其他型別需要新增jackson依賴
第一個 第二個: 第三個 https://www.cnblogs.com/codejackanapes/p/5569013.html:json的部落格園 spri
Controller中方法返回值其他類型需要添加jackson依賴
nap nbsp cnblogs alt 軟件 org codehaus blog 分享圖片 第一個 第二個: 第三個 https://www.cnblogs.com/codejackanapes/p/5569013.html:json
Service中onStartCommand方法返回值的探索
前言 onStartCommand方法的返回值 有4種:START_STICKY、START_NOT_STICKY、START_REDELIVER_INTENT、START_STICKY_COMPATIBILITY。 下面通過結合demo測試結果來
######springmvc中方法返回值為String時@responseBody不能返回json物件。
引用 2 樓 tzdwsy 的回覆: RequestMappingR中加上produces=“application/json”試試 這樣寫只是返回前臺後不報錯,但是資料格式依然不是json的,它只是在返回的資料上打了個引號;“channelId=2” 真正的解決方法應該是這樣的
Java中,String類的compareTo()方法返回值是什麼
compareTo()的返回值是int,先比較對應字元的ASCII碼,如字串的某字元與引數的某字元不等,則結束比較,返回它們ASCII碼的差值。直至字串的字元 或 引數的字元 有一方全比較完,此時比較字串的長度差並返回。 例: String s1 = "abc";
Android onTouchEvent事件中onTouch方法返回值詳解
1、 若return false說明沒有成功執行onTouch事件,在執行完onTouch裡面的程式碼之後,onTouch事件並沒有結束。因此某些元件如Gallery會自動執行它所在view裡on
java中read()方法返回值解釋
最近做作業,讀取大資料集,然後做處理分析的專案。當我用fileinputstream流讀取檔案的時候,然後用fileinputstream.read()方法讀取檔案的時候,當我檢視API的時候,發現re
java 程式設計下 IO 中的輸入流的 read() 方法返回值為什麼是 int 值
Java 下 IO 中 FileReder 和 FileInputStream 分別是以字元和位元組的形式來完成資料的讀取的,然而返回值確是 int 型別的資料,這樣做的核心目的只是要取到到一個 int 型別下的 -1 來表示資料流的末尾。為什麼要這樣做?又是怎麼實現的呢?首
springmvc Controller方法返回值
response ping resp log mod for iter 頁面 轉發 1.1返回ModelAndView 不建議使用 1.2返回String 建議使用 @RequestMapping("updateItem") public String updat
java方法返回值的變量類型困惑
tail 方法 .com color conf 類型 log content font 一、java program progress of excuting:show in next picture How about the java virt
<筆記>TP5的save方法返回值
ima 技術分享 而不是 改變 更新失敗 img 技術 blog src 用save方法來更新數據時,若更新前後數據沒有改變則返回0,更新成功返回影響行數,更新失敗返回false 若想要數據沒改變時提示修改成功,則需要嚴格判斷 if(結果!==false){提示成功}而不是
處理方法返回值
aaaaa rst ret blog pan hash res hashmap string 1.Object @RequestMapping("/first") @ResponseBody public Object doOne(){ retur
Object處理方法返回值
$.ajax adduser str html rop ctr inf ext rec 創建一個User實體類,並在其中寫上屬性值,並將其進行封裝: public class User { private String name; private int a
重載&方法返回值
重載 方法返回值 方法重載: 方法名稱一致,方法的參數類型和個數不一致,就是方法的重載。 就好比在香港買東西一樣,它的方法名是購買,你傳遞給方法的是人民幣類型的參數值,則調用人民幣的購買方法,你傳遞給方法的是美元類型的參數值,就調用美元的購買方法。方法名一致參數不一致,就像是一個方法有了多種模式。