2012-03-23 81 views
1

我有要求在http response中設置自定義標題,並在需要時閱讀它們。我使用下面的代碼來讀取頭文件。閱讀servlets中的自定義標題

servlet1:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    response.addHeader("cust-header", "cust-value"); 
    RequestDispatcher rd = request.getRequestDispatcher("servlet2"); 
    rd.include(request, response); 
} 

servlet2:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    System.out.println(request.getHeader("cust-header")); 
} 

當我試圖讀取自定義頭值,我得到了在控制檯 「空」。爲什麼發生這種情況?如何在需要時讀取自定義標題設置?

+0

沒有任何解決方案??? !!! – 2012-03-23 07:04:52

回答

2

RequestDipatcher include method API doc

[...] 的ServletResponse對象具有其路徑元件和參數保持 從呼叫者的不變。包含的servlet無法更改 響應狀態碼或設置標題;任何嘗試進行更改都是 被忽略。 [...]

所以,如果你看看你的代碼,你要設置在響應對象的頭部,而是試圖從請求得到它。 由於它們保持不變,所以不起作用。

到從servlet值傳遞給另一個向前或包括重定向的最常見的方式,將它作爲一個請求屬性:

servlet1:

//set a request attribute 
request.setAttribute("cust-header", "cust-value"); 
RequestDispatcher rd = request.getRequestDispatcher("servlet2"); 
rd.include(request, response); 

servlet2:

System.out.println(request.getAttribute("cust-header")); 
+0

是的。我知道屬性。但我的問題是如何設置自定義http標題並在需要時閱讀它們? – 2012-03-23 08:57:53