2013-10-23 43 views
9

我有一個servlet 一個在那裏我在HTTP響應設置標頭:如何在HTTP響應中設置標題?

public void doPost(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 

    String userName=request.getParameter("userName"); 
    String newUrl = "http://somehost:port/ServletB"; 

    response.addHeader("REMOTE_USER", userName); 

    response.sendRedirect(newUrl); 
} 

現在在servlet ,我試圖讓在設定的頭值該servlet 一個

public void doPost(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 

    String userid = request.getHeader("REMOTE_USER"); 
} 


但這裏用戶ID的值來爲null。請讓我知道我在這裏錯過了什麼。

+0

@Nambari,可否請你讓我知道如果我想發送userid信息給ServletB,那麼我將如何使用現有的頭來設置它? –

+0

因爲我想發送userinfo的另一個應用程序,它接受SSO實現的標頭或cookie。 –

回答

7

首先,你必須瞭解的

response.sendRedirect(newUrl); 

這是給客戶端(瀏覽器)與URL 302 HTTP響應代碼的性質。 瀏覽器然後在該URL上發出單獨的GET請求。 並且該請求沒有第一個標題的知識。

,如果你需要如果你想這個代碼工作通過從Servlet中生成一個頭Servlet的B.

這樣的sendRedirect將無法正常工作 - 在Servlet的A(代替的sendRedirect)使用的RequestDispatcher。另外,使用相對路徑總是更好。

public void doPost(HttpServletRequest request, HttpServletResponse response) 
throws ServletException, IOException 
{ 
    String userName=request.getParameter("userName"); 
    String newUrl = "ServletB"; 
    response.addHeader("REMOTE_USER", userName); 
    RequestDispatcher view = request.getRequestDispatcher(newUrl); 
    view.forward(request, response); 
} 

========================

public void doPost(HttpServletRequest request, HttpServletResponse response) 
{ 
    String sss = response.getHeader("REMOTE_USER"); 
} 
0

標題字段不會複製到後續請求。您應該爲此(addCookie方法)使用任一cookie或在會話中存儲「REMOTE_USER」(您可以使用getSession方法獲取該值)。所有的

+0

或者使用請求屬性... – dwegener

相關問題