Jsp addHeader()和setHeader()不工作
我正在为OCPJWCD做准备。我对addHeader和setHeader方法有点着迷。我愿意 理解差异,但是当我试图在代码中实现它并检索 这些值可以通过getHeader()或getHeader()读取。它将值显示为null。我补充说 代码在这里。有人能检查一下,让我知道到底出了什么问题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
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()并使用请求对象检索头。我有点困惑,你能再简单介绍一下你的最后一部分吗?