为什么cookie名称和值分别是'http'和'proxy',而没有在eclipse中创建一个?
问题描述:
我想在使用eclipse的servlet中创建一个简单的cookie程序。为什么cookie名称和值分别是'http'和'proxy',而没有在eclipse中创建一个?
这是怎么回事: -
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("text/html");
PrintWriter out = response.getWriter();
Cookie[] cookies = request.getCookies();
if(cookies == null)
{
out.print("<b> Hello Stranger </b><br>");
}
else
{
for(Cookie cookie:cookies)
{
out.print("<b> Hello" + cookie.getValue() + "</b>");
}
}
out.print("<form action = '' method = 'post'>");
out.print("What is your name?");
out.print("<input type = 'text' name = 'username'><br>");
out.print("<br>");
out.print("<input type = 'submit'>");
out.print("</form>");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
PrintWriter out = response.getWriter();
response.setContentType("text/html");
String str = request.getParameter("username");
Cookie[] cookies = request.getCookies();
if (cookies == null)
{
Cookie c = new Cookie("username",str);
c.setMaxAge(-1);
response.addCookie(c);
}
for(Cookie cookie: cookies)
{
out.print("<b> Hello," + cookie.getName() + "</b>");
}
}
当使用eclipse 在Tomcat服务器上运行它,而不是让输出你好陌生人我甚点击提交后,得到你好HTTP 它显示的是相同的内容,而不是输入的名称。
答
您正在迭代(并打印)入站HttpServletRequest中包含的cookie列表,但是您将新Cookie添加到HttpServletResponse。
尽管HttpServletResponse有一个addCookie()方法,但它没有匹配的getCookies(),所以如果您希望查看已添加到响应对象的Cookie,则需要解决此问题。有几个帖子可以说明这一点,例如here和here。
但它现在似乎工作!不是Cookie应该是一回事。我的意思是在响应对象中添加cookie之后,将响应(包含cookie)发送到客户端并存储在那里。现在,来自客户端的每个进一步请求都应包含为该特定网页设置的所有Cookie。 即,当我点击刷新页面时,doGet方法被调用,但现在Cookie已经存在! –
Yup - 对客户端的同一个servlet的后续请求将包含早期响应中设置的cookie。 –