request.getCookies() 返回值始终为空问题

zeko075 2013-06-10 06:35:26
写了两个java文件,一个用于写入Cookies一个用于读取显示Cookies,但是在读取时request始终为空,到底问什么呢,代码如下:

SetCookies.java

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class SetCookies extends HttpServlet {

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
for(int i = 0; i < 3; i++) {
Cookie cookie = new Cookie("Cookie-ID:" + i, "Cookie-value:" + i);
response.addCookie(cookie);

cookie = new Cookie("Cookie-ID(M)" + i, "Cookie-value(M):" + i);
cookie.setMaxAge(3600);
response.addCookie(cookie);
}
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html><head><title>Set the Cookies</title></head>");
out.println("<body>");
out.println("<a href=\"ShowCookies\">Click to show cookies</a>");
out.println("</body></html>");
}

}


ShowCookies.java

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class ShowCookies extends HttpServlet{

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html><head><title>Show all the parameters</title></head>");
out.println("<body>");
out.println("<div align='center'>Show all of the cookies</div>");
out.println("<form id='form1' name='form1' method='get'>");
out.println("<table width='215' height='42' border='2' align='center' cellpadding='0' cellspacing='0'>");
Cookie[] cookies = request.getCookies();

if(cookies == null) {
return;
} else {
for(Cookie cookie : cookies) {
out.println("<tr>");
String name = cookie.getName();
String value = cookie.getValue();
out.println("<td width='91'><div align='center'>"+ name + "</div></td>");
out.print("<td width='262'>" + value + "</td>");
out.println("</tr>");
}
}

out.println("</table></form></body></html>");
}

}


配置没有问题,SetCookies可以显示,但是ShowCookies始终显示不出结果,Debug了一下,在ShowCookies的doGet()方法中,形参request始终为空,但是用chrome查看网页信息的时候可以查看到所有的Cookies,表示Cookies已经加载到网页,但是为什么不能读取呢???
...全文
4996 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
sinat_32530997 2015-11-03
  • 打赏
  • 举报
回复
我今天也遇到这种情况,在火狐的控制台发现他们的路径不一样,我就在addCookie之前用cookie.setPath("/*/");保持他们的路径一致,然后就解决问题了,自己也觉得非常不可思议
looc 2015-09-07
  • 打赏
  • 举报
回复
我也遇到同样的情况 , 已经调一下午了……我是对着老师讲的代码敲的,老师敲一个我敲一个,老师的没问题,我的就不行……
AlexChowKey 2013-06-12
  • 打赏
  • 举报
回复
//创建cookie public static void createCookie(HttpServletResponse response, Hashtable<String, String> nameValues, int days) { Set<String> set = nameValues.keySet(); Iterator<String> it = set.iterator(); for (; it.hasNext();) { String name = (String) it.next(); String value = (String) nameValues.get(name); // 生成新的cookie Cookie cookie = new Cookie(name, value); // 设置有效日期 cookie.setMaxAge(days * 24 * 60 * 60); // 设置路径(默认) cookie.setPath("/"); // 把cookie放入响应中 response.addCookie(cookie); } } //读取cookie public static Hashtable<String, String> getCookies( HttpServletRequest request) { Cookie[] cookies = request.getCookies(); Hashtable<String, String> cookieHt = new Hashtable<String, String>(); if (cookies.length > 0) { for (int i = 0; i < cookies.length; i++) { Cookie cookie = cookies[i]; cookieHt.put(cookie.getName(), cookie.getValue()); } } return cookieHt; }
失落夏天 2013-06-12
  • 打赏
  • 举报
回复
引用 2 楼 zeko075 的回复:
[quote=引用 1 楼 AA5279AA 的回复:] 因为你把cookie写入到响应中,这个响应是相对于 out.println("<html><head><title>Set the Cookies</title></head>"); 这个页面的请求。 你再次点击链接等于重新发送了一个请求,那么这个请求自然为空的。因为你 "<a href=\"ShowCookies\">Click to show cookies</a>这个请求中没有添加任何参数。
但是Cookie不是只要是在一个web-application中就是可以访问的吗?访问SetCookies之后在IE存放cookie的文件夹里可以看到新建的cookie文件,但是就是读取不能读取,既然是在同一web-app下的应该是可以读取的啊[/quote] cookie是本地的,与cookie相对应的是服务器端的seesion。 这两个想对应起来才起作用。 可以这么想 一个application下面有很多的request 一个request下面有很多session
zeko075 2013-06-11
  • 打赏
  • 举报
回复
引用 1 楼 AA5279AA 的回复:
因为你把cookie写入到响应中,这个响应是相对于 out.println("<html><head><title>Set the Cookies</title></head>"); 这个页面的请求。 你再次点击链接等于重新发送了一个请求,那么这个请求自然为空的。因为你 "<a href=\"ShowCookies\">Click to show cookies</a>这个请求中没有添加任何参数。
但是Cookie不是只要是在一个web-application中就是可以访问的吗?访问SetCookies之后在IE存放cookie的文件夹里可以看到新建的cookie文件,但是就是读取不能读取,既然是在同一web-app下的应该是可以读取的啊
失落夏天 2013-06-10
  • 打赏
  • 举报
回复
因为你把cookie写入到响应中,这个响应是相对于 out.println("<html><head><title>Set the Cookies</title></head>"); 这个页面的请求。 你再次点击链接等于重新发送了一个请求,那么这个请求自然为空的。因为你 "<a href=\"ShowCookies\">Click to show cookies</a>这个请求中没有添加任何参数。

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧