日期:2014-05-17  浏览次数:20749 次

求教在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 IOExceptionServletException {
HttpServletResponse httpResponse=(HttpServletResponse) response;

Cookie cookie=new Cookie("com.login.name","yjm");
cookie.setPath("/");
httpResponse.addCookie(cookie);

chain.doFilter(request, response);
}


web.xml中:
  <filter>
   <filter-name>LoginFilter</filter-name>
   <filter-class>com.filter.LoginFilter</filter-class>
  </filter>
  <filter-mapping>
   <filter-name>LoginFilter</filter-name>
   <url-pattern>/*</url-pattern>
  </filter-mapping>


页面:

 <%
String name="";
  System.out.println(request.getCookies());//第一次访问时,后台输出null,刷新一次即能输出相应内容
if(null != request.getCookies()){
Cookie[] cookie = request.getCookies();
for(int i = 0; i < cookie.length; i++)
{
if(cookie[i].getName().equals("com.login.name"))
{
name = cookie[i].getValue();
break;
}
}
}
%> 



<script type="text/javascript">
alert(document.cookie);
</script>
<body>

<input type="text" name="" value="<%=name %>" /><br/>
<%=name %><br/>
<%=request.getCookies()%>
</body>


求教高人指点,如何解决这个问题,让其第一次访问的时候即能读取到cookie内容
Cookie JSP Filter HTML

------解决方案--------------------
你这个问题你首先得理解http协议的工作机制。

你第一步在你的filter里面写入cookie,实际上这时候cookie被写入response对象中,但是在当前这个请求中(当前request的生命周期中)还是访问不到cookie的,所有你在你的jsp中访问request是访问不到cookie内容的。但是到了浏览器中又有了,是因为浏览器中显示的是response中的内容,那当然有了。第二次访问的时候浏览器会把cookie通过request传回服务器端,所以又有了。