标签:String ToplistAll 44 req cookie Cookie 值中 id
在写一个购物网站的小项目,在完成浏览商品信息记录模块时,出现错误,错误代码及错误截图如下:
//当前窗口可以查询单个商品对应信息,并且可以记录浏览情况,存入cookie中
String idstr = req.getParameter("id");
String ToplistAll = "";
//获取浏览记录列表,防止因再次访问而丢失信息
Cookie[] cookies = req.getCookies();
for (Cookie cookie:cookies){
if(cookie.getName().equals("listViewCookie")){
ToplistAll = cookie.getValue() ;
}
}
//在更新信息之前先查看当前列表的信息数量,如果超过1000则清零
String[] arr = ToplistAll.split(",");
if(arr.length>=1000){
ToplistAll = "";
}
//更新浏览记录
ToplistAll += req.getParameter("id")+",";
Cookie cookie = new Cookie("listViewCookie", ToplistAll);
//重新保存
resp.addCookie(cookie);
//将前五条记录保存到浏览器中,以便用户查看
req.setAttribute("Toplist",myshoppingRepsitory.SelectTop5(ToplistAll));
//以下是根据ID查找对应商品信息
Integer id = Integer.parseInt(idstr);
req.setAttribute("item",myshoppingRepsitory.FindById(id));
// System.out.println(myshoppingRepsitory.FindById(id).toString());
req.getRequestDispatcher("details.jsp").forward(req,resp);
从报错信息可以发现,是获取到的cookie值中存在不能识别的字符,即不能识别 ","。可以使用URLEncoder.encode() 进行编码,统一编码格式,再用URLDecoder.decode()解码,就可以解决问题。
修改后的代码如下:
//当前窗口可以查询单个商品对应信息,并且可以记录浏览情况,存入cookie中
String idstr = req.getParameter("id");
String ToplistAll = "";
//获取浏览记录列表,防止因再次访问而丢失信息
Cookie[] cookies = req.getCookies();
for (Cookie cookie:cookies){
if(cookie.getName().equals("listViewCookie")){
// 修改部分
ToplistAll = URLDecoder.decode(cookie.getValue()) ;
}
}
//在更新信息之前先查看当前列表的信息数量,如果超过1000则清零
String[] arr = ToplistAll.split(",");
if(arr.length>=1000){
ToplistAll = "";
}
//更新浏览记录
/**
* 需特别注意的是: "," 该分隔符在cookie中属于特殊字符,编码时可能出现 Cookie值中存在无效字符[44] 提示
* 为解决此问题,可以使用 URLEncoder.encode 进行编码,要记得使用时用 URLDecoder.decode 解码
*/
ToplistAll += req.getParameter("id")+",";
// 修改部分
Cookie cookie = new Cookie("listViewCookie", URLEncoder.encode(ToplistAll));
//重新保存
resp.addCookie(cookie);
//将前五条记录保存到浏览器中,以便用户查看
req.setAttribute("Toplist",myshoppingRepsitory.SelectTop5(ToplistAll));
//以下是根据ID查找对应商品信息
Integer id = Integer.parseInt(idstr);
req.setAttribute("item",myshoppingRepsitory.FindById(id));
// System.out.println(myshoppingRepsitory.FindById(id).toString());
req.getRequestDispatcher("details.jsp").forward(req,resp);
当然还可能遇到其他无效字符,可以通过查看ASCII表,用cookie.setValue()去排除无效字符,不过事先统一编码,会更有效地避免这一错误。
标签:String,ToplistAll,44,req,cookie,Cookie,值中,id 来源: https://blog.csdn.net/a1024978453/article/details/115772264
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。