为什么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,则需要解决此问题。有几个帖子可以说明这一点,例如herehere

+0

但它现在似乎工作!不是Cookie应该是一回事。我的意思是在响应对象中添加cookie之后,将响应(包含cookie)发送到客户端并存储在那里。现在,来自客户端的每个进一步请求都应包含为该特定网页设置的所有Cookie。 即,当我点击刷新页面时,doGet方法被调用,但现在Cookie已经存在! –

+0

Yup - 对客户端的同一个servlet的后续请求将包含早期响应中设置的cookie。 –