Servlet 存一个list到cookie,跳转到另一个页面取不出来,值为nll
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String productIDStr = request.getParameter("productID");//获取商品ID
int productID = (productIDStr != null)?Integer.parseInt(productIDStr):0;
LinkedList<String> list = new LinkedList<String>();
Cookie [] cookies = request.getCookies();
String history = null;
String [] array = new String[5];
if(cookies != null){
for (int i = 0; i < cookies.length; i++) {
if(cookies[i].getName().equals("productID")){//获取历史浏览信息
history = cookies[i].getValue();
break;
}
}
}
if(history != null){
//分解信息
history = history.replace("[", "");
history = history.replace("]", "");
array = history.split(",");
if(array.length > 4){//最多可以保存5个历史记录超出则把后面的舍弃
for (int i = 0; i < array.length-1; i++) {
list.addLast(array[i]);
}
}else{
list.add(history);
}
}
list.addFirst(productID +"");
Cookie cookie = new Cookie("productID",list.toString());
cookie.setMaxAge(60*60*24);//设置保存时间
response.addCookie(cookie);
另一边取出来值为NULL或者取出来的值中没有我存的,但是查看cookie源文件却存在
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Cookie []cookies = request.getCookies();
String history=null;
if(cookies !=null){
for (int i = 0; i < cookies.length; i++) {
if(cookies[i].getName().equals("productID")){//获取历史浏览记录
history = cookies[i].getValue();
break;
}
}
if(history != null){
//将信息分解
history = history.replace("[", "");
history = history.replace("]", "");
String [] array = history.split(",");
List<String> productList = new ArrayList<String>();
for (int i = 0; i < array.length; i++) {
productList.add(array[i].trim());
}
ProductDao pd = new ProductDao();
List<EasyBuy_Product> list = pd.getAllHistoryProduct(productList);//读取历史记录
if(list != null){
request.setAttribute("getAllHistoryProduct", list);
request.getRequestDispatcher("history.jsp").forward(request, response);
}
}
}
}
如果直接手写一个值加入到cookie可以去到,用list存进去的就取不到 Servlet Cookie Java list --------------------编程问答-------------------- 好像cookie只能存字符串而不能存其它类型的 --------------------编程问答-------------------- 你可以把你的List里面的东西,先拼接成字符串,然后再获取,分割。 --------------------编程问答-------------------- 你要先问一下cookie是否有list这种数据结构,
并且list.toString()之后是什么你有看过吗?hashCode呀亲是一串无意义的字符串也可以理解为内存地址
cookie只能存简单的数据类型不能存接口或对象 --------------------编程问答-------------------- 哦但是我老师用list写了一个就好使,我写就不好使奇怪呀! --------------------编程问答-------------------- 是cookie的路径问题
cookie的路径必须是要访问的路径的上层目录戒者是不要访问的路径相等,浏览器 才会将cookie发送给服务器。
一般可以设置setPath("/appname"),表示访问该应用下的所有地址,均会发送
cookie
1.在第一段代码中存入cookie信息后 加入
cookie.setPath("/yourweb");
yourweb是你的项目名称
--------------------编程问答-------------------- 这代码写得。。。
所以他是老师,你是学生。 --------------------编程问答-------------------- 你用ie浏览器的话,查看一下cookie信息存不存在。。不过貌似ie8没有这个功能。。用google浏览器的话,按F12看到Reshources选项,展开Cookies就可以看到。不过存在就说明是保存的代码有错,存在就说明是读的代码有错。 --------------------编程问答--------------------
IE8 开发人员工具有。 --------------------编程问答-------------------- 用session试试吧 --------------------编程问答-------------------- 改为这句试试: getServletConfig().getServletContext().getRequestDispatcher("/"history.jsp").forward(request, response); --------------------编程问答-------------------- 你们老师不是存到cookie吧 --------------------编程问答-------------------- 拼成字符串分割。 --------------------编程问答-------------------- cookie存list?
牛人啊!为什么不用session? --------------------编程问答-------------------- 5楼应该是正解 --------------------编程问答--------------------
servlet 到 下一个页面 你用 session啊。。。呵呵 。。。。 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- if(cookies !=null){
for (int i = 0; i < cookies.length; i++) {
if(cookies[i].getName().equals("productID")){//获取历史浏览记录
history = cookies[i].getValue();
break;
}
}
把if(cookies[i].getName().equals("productID")){//获取历史浏览记录
改成"productID".equals(cookies[i].getName())
补充:Java , Web 开发