Pak*_*ira 14 java servlets http http-headers
我有一个servlet A,我在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);
}
Run Code Online (Sandbox Code Playgroud)
现在在servlet B中,我试图获取在servlet A中设置的头值:
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String userid = request.getHeader("REMOTE_USER");
}
Run Code Online (Sandbox Code Playgroud)
但是这里userid的价值即将到来null
.请让我知道我在这里缺少什么.
pub*_*bsy 10
首先,你必须了解其本质
response.sendRedirect(newUrl);
Run Code Online (Sandbox Code Playgroud)
它通过URL给客户端(浏览器)302 http代码响应.然后,浏览器在该URL上发出单独的GET请求.并且该请求在第一个请求中不知道标题.
因此,如果需要将标头从Servlet A传递到Servlet B,sendRedirect将不起作用.
如果您希望此代码有效 - 请在Servlet A中使用RequestDispatcher(而不是sendRedirect).此外,使用相对路径总是更好.
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);
}
Run Code Online (Sandbox Code Playgroud)
========================
public void doPost(HttpServletRequest request, HttpServletResponse response)
{
String sss = response.getHeader("REMOTE_USER");
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
89995 次 |
最近记录: |