Jsp addHeader()和setHeader()不工作

Jsp addHeader()和setHeader()不工作,jsp,servlets,Jsp,Servlets,我正在为OCPJWCD做准备。我对addHeader和setHeader方法有点着迷。我愿意 理解差异,但是当我试图在代码中实现它并检索 这些值可以通过getHeader()或getHeader()读取。它将值显示为null。我补充说 代码在这里。有人能检查一下,让我知道到底出了什么问题 import java.io.IOException; import java.io.PrintWriter; import java.util.Enumeration; import javax.servle

我正在为OCPJWCD做准备。我对addHeader和setHeader方法有点着迷。我愿意 理解差异,但是当我试图在代码中实现它并检索 这些值可以通过getHeader()或getHeader()读取。它将值显示为null。我补充说 代码在这里。有人能检查一下,让我知道到底出了什么问题

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Created with IntelliJ IDEA.
 * User: Ben
 * Date: 7/14/13
 * Time: 1:51 PM
 * To change this template use File | Settings | File Templates.
 */
public class TestHeaderServlet extends HttpServlet {

  @Override
  protected void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse)
      throws ServletException, IOException {
    doPost(httpServletRequest,httpServletResponse);
  }


  @Override
  protected void doPost(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse)
      throws ServletException, IOException {
    httpServletResponse.setContentType("text/html");
    PrintWriter out = httpServletResponse.getWriter();
    httpServletResponse.setHeader("ben","value1");
    /*httpServletResponse.addHeader("ben","value1");
    httpServletResponse.addHeader("ben","value2");
    httpServletResponse.addHeader("ben","value3");
    httpServletResponse.addHeader("ben","value4");*/
    String value = httpServletRequest.getHeader("ben");
    out.println("value is: " + value)    ;
   /* Enumeration<String> enumeration = httpServletRequest.getHeaders("ben");
    while(enumeration.hasMoreElements()) {
      System.out.println("It has elements");

    }*/


  }
}
import java.io.IOException;
导入java.io.PrintWriter;
导入java.util.Enumeration;
导入javax.servlet.ServletException;
导入javax.servlet.http.HttpServlet;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
/**
*使用IntelliJ IDEA创建。
*用户:本
*日期:2013年7月14日
*时间:下午一时五十一分
*要更改此模板,请使用文件|设置|文件模板。
*/
公共类TestHeaderServlet扩展了HttpServlet{
@凌驾
受保护的无效数据集(HttpServletRequest HttpServletRequest,HttpServletResponse HttpServletResponse)
抛出ServletException、IOException{
doPost(httpServletRequest,httpServletResponse);
}
@凌驾
受保护的void doPost(HttpServletRequest HttpServletRequest,HttpServletResponse HttpServletResponse)
抛出ServletException、IOException{
httpServletResponse.setContentType(“text/html”);
PrintWriter out=httpServletResponse.getWriter();
setHeader(“ben”,“value1”);
/*httpServletResponse.addHeader(“ben”,“value1”);
httpServletResponse.addHeader(“ben”,“value2”);
httpServletResponse.addHeader(“ben”,“value3”);
httpServletResponse.addHeader(“ben”,“value4”)*/
字符串值=httpServletRequest.getHeader(“ben”);
out.println(“值为:”+value);
/*枚举枚举=httpServletRequest.getHeaders(“ben”);
while(枚举.hasMoreElements()){
System.out.println(“它有元素”);
}*/
}
}

任何帮助都会很好

问题在于,您正在将头添加到
响应中,并试图在同一HTTP请求-响应周期内从
请求
对象获取头。它不会工作,因为调用这个Servlet的初始
请求
没有这个头。它被添加到
响应
并发送回客户端,您无法从
请求
对象中检索它。如果需要在
响应
中设置某些内容,并从
请求
对象中检索它,则可以使用。

问题在于,您正在将头添加到
响应
,并尝试在同一HTTP请求-响应周期中从
请求
对象中获取该头。它不会工作,因为调用这个Servlet的初始
请求
没有这个头。它被添加到
响应
并发送回客户端,您无法从
请求
对象中检索它。如果您需要在
响应中设置一些内容
并从
请求
对象中检索它,那么您可以使用。

?从什么时候开始,客户端/网络浏览器自动复制并设置响应头作为后续请求的头?@BalusC感谢您让我知道。请回答问题。你已经回答了那部分。你只是添加了一个错误的假设。另一种方法是发送一个带有查询参数的重定向(或者只使用HTTP会话;它也有cookie支持)。@TheNewIdiot我知道,在相同的请求和响应周期中,我们无法检索头。我没有的是最后一部分。我可以使用来自请求对象的Cookie。我想检索头,我可以更新代码使其具有sendRedirect()并使用请求对象检索头。我有点糊涂了,你能再简单介绍一下你的最后一部分吗?从什么时候开始,客户端/网络浏览器自动复制并设置响应头作为后续请求的头?@BalusC感谢您让我知道。请回答问题。你已经回答了那部分。你只是添加了一个错误的假设。另一种方法是发送一个带有查询参数的重定向(或者只使用HTTP会话;它也有cookie支持)。@TheNewIdiot我知道,在相同的请求和响应周期中,我们无法检索头。我没有的是最后一部分。我可以使用来自请求对象的Cookie。我想检索头,我可以更新代码使其具有sendRedirect()并使用请求对象检索头。我有点困惑,你能再简单介绍一下你的最后一部分吗?