//servlet中的代码
Cookie c=new Cookie(“userlogin”, ul.toString());//ul是一个实体类的实例,我重写了该类的toString()方法返回的将是”用户名,密码”的字符串
c.setMaxAge(60);
response.addCookie(c);
request.getRequestDispatcher(“../shopPage.jsp”).forward(request, response);//转发方式跳转至shopPage.jsp
//jsp中的代码
if(cookies!=null&& cookies.length>0){
for(Cookie c:cookies){
if(c.getName().equals(“userlogin”)){
userlogin=c.getValue();
String[] uLogin=userlogin.split(“,”);
username=uLogin[0];
password=uLogin[1];
}
====问题1====
在jsp中我想获取servlet中设置的cookie完成自动登录的功能,但是发现得不到name是”userlogin”的cookie,最后原因是:
在servlet中设置的cookie只在该servlet所在的目录及其子目录下有效,而很不幸要获取cookie的那个.jsp文件所在的目录不在其中,所以根本获取不到
解决方法:
在servlet中设置cookie时多加一句 c.setPath(“/”),这样这个cookie的有效范围就可以扩充到整个项目了(”/”代表项目根目录)
====问题2====
但是在给cookie设置了path后,页面转发到shopPage.jsp中还是没有得到cookie,不过第二次进入shopPage.jsp页面cookie就获取到了,这个是因为:
我在servlet中使用的是转发的方式来跳转到shopPage.jsp页面,转发是服务端的行为(即服务端向服务端发送请求),而对cookie的赋值只有等下一次客户端向服务端请求时才能生效,所以第一次使用request.getCookies();时servlet中设置的cookie还没生效,而第二次便可以获取到了
解决方法:
在servlet中使用重定向的方式跳转到shopPage.jsp页面
即:response.sendRedirect(“../shopPage.jsp”);//重定向是客户端行为哦!
最后代码:
//servlet中的代码
Cookie c=new Cookie(“userlogin”, ul.toString());
c.setMaxAge(60);
c.setPath(“/”);//此处添加了一句
response.addCookie(c);
response.sendRedirect(“../shopPage.jsp”);//此处改为重定向方式跳转至shopPage.jsp页面
//jsp中的代码
if(cookies!=null&& cookies.length>0){
for(Cookie c:cookies){
if(c.getName().equals(“userlogin”)){
userlogin=c.getValue();
String[] uLogin=userlogin.split(“,”);
username=uLogin[0];
password=uLogin[1];
}
参考资料:
1、http://blog.csdn.net/z69183787/article/details/17396227
2、http://bbs.csdn.net/topics/390067857 (看二楼和三楼的解析)