2013-10-23 18 views
9

Ho un servlet Un dove sto impostando un colpo di testa nella risposta HTTP:Come impostare un'intestazione in una risposta 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); 
} 

Ora, in un servlet B, sto cercando di ottenere il valore di intestazione che è stato impostato in il servlet A:

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

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


Ma qui il valore di userid è venuta come null. Per favore fatemi sapere cosa mi manca qui.

+0

@Nambari, la prego di farmi sapere se voglio invia le informazioni userid a ServletB allora come dovrei impostare usando l'intestazione esistente? –

+0

perché un'altra applicazione che voglio inviare userinfo, accetta intestazione o cookie per l'implementazione SSO. –

risposta

7

Prima di tutto si deve capire la natura del

response.sendRedirect(newUrl); 

Si sta dando il client (browser) risposta di codice 302 http con un URL. Il browser quindi effettua una richiesta GET separata su quell'URL. E quella richiesta non ha alcuna conoscenza delle intestazioni nel primo.

Così sendRedirect non funziona se è necessario passare un colpo di testa da Servlet A alla B. Servlet

Se si desidera che questo codice per lavorare - utilizzare RequestDispatcher in Servlet A (invece di sendRedirect). Inoltre, è sempre meglio usare il percorso relativo.

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

I campi intestazione non vengono copiati nelle richieste successive. È necessario utilizzare entrambi i cookie per questo metodo (metodo addCookie) o memorizzare "REMOTE_USER" nella sessione (che è possibile ottenere con il metodo getSession).

+0

O meglio usa gli attributi di richiesta ... – dwegener

Problemi correlati