2017-10-11 47 views
1

我想在使用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 它顯示的是相同的內容,而不是輸入的名稱。

回答

0

您正在迭代(並打印)入站HttpServletRequest中包含的cookie列表,但是您將新Cookie添加到HttpServletResponse。

儘管HttpServletResponse有一個addCookie()方法,但它沒有匹配的getCookies(),所以如果您希望查看已添加到響應對象的Cookie,則需要解決此問題。有幾個帖子可以說明這一點,例如herehere

+0

但它現在似乎工作!不是Cookie應該是一回事。我的意思是在響應對象中添加cookie之後,將響應(包含cookie)發送到客戶端並存儲在那裏。現在,來自客戶端的每個進一步請求都應包含爲該特定網頁設置的所有Cookie。 即,當我點擊刷新頁面時,doGet方法被調用,但現在Cookie已經存在! –

+0

Yup - 對客戶端的同一個servlet的後續請求將包含早期響應中設置的cookie。 –

相關問題