求教在jsp页面中获取Cookie的问题
问题描述:在登录主页index.jsp之前增加了一个Filter,在Filter中添加了一个Cookie,然后在页面index.jsp中读取cookie中的内容。结果发现在第一次登录的时候页面读取不到Cookie的内容,而刷新一次后才能读取到。通过查看浏览器Cookie和页面上alert(document.cookie);都能发现第一次访问这个页面的时候是有Cookie的。
代码如下:
Filter中:
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletResponse httpResponse=(HttpServletResponse) response;
Cookie cookie=new Cookie("com.login.name","yjm");
cookie.setPath("/");
httpResponse.addCookie(cookie);
chain.doFilter(request, response);
}
web.xml中:
LoginFilter
com.filter.LoginFilter
LoginFilter
/*
页面:
String name="";
System.out.println(request.getCookies());//第一次访问时,后台输出null,刷新一次即能输出相应内容
if(null != request.getCookies()){
Cookie[] cookie = request.getCookies();
for(int i = 0; i
{
if(cookie[i].getName().equals("com.login.name"))
{
name = cookie[i].getValue();
break;
}
}
}
%>
alert(document.cookie);
" />
求教高人指点,如何解决这个问题,让其第一次访问的时候即能读取到cookie内容
Cookie
JSP
Filter
HTML
分享到:
------解决方案--------------------
你这个问题你首先得理解http协议的工作机制。
你第一步在你的filter里面写入cookie,实际上这时候cookie被写入response对象中,但是在当前这个请求中(当前request的生命周期中)还是访问不到cookie的,所有你在你的jsp中访问request是访问不到cookie内容的。但是到了浏览器中又有了,是因为浏览器中显示的是response中的内容,那当然有了。第二次访问的时候浏览器会把cookie通过request传回服务器端,所以又有了。