写了两个java文件,一个用于写入Cookies一个用于读取显示Cookies,但是在读取时request始终为空,到底问什么呢,代码如下:
SetCookies.java
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class SetCookies extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
for(int i = 0; i < 3; i++) {
Cookie cookie = new Cookie("Cookie-ID:" + i, "Cookie-value:" + i);
response.addCookie(cookie);
cookie = new Cookie("Cookie-ID(M)" + i, "Cookie-value(M):" + i);
cookie.setMaxAge(3600);
response.addCookie(cookie);
}
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html><head><title>Set the Cookies</title></head>");
out.println("<body>");
out.println("<a href=\"ShowCookies\">Click to show cookies</a>");
out.println("</body></html>");
}
}
ShowCookies.java
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ShowCookies extends HttpServlet{
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html><head><title>Show all the parameters</title></head>");
out.println("<body>");
out.println("<div align='center'>Show all of the cookies</div>");
out.println("<form id='form1' name='form1' method='get'>");
out.println("<table width='215' height='42' border='2' align='center' cellpadding='0' cellspacing='0'>");
Cookie[] cookies = request.getCookies();
if(cookies == null) {
return;
} else {
for(Cookie cookie : cookies) {
out.println("<tr>");
String name = cookie.getName();
String value = cookie.getValue();
out.println("<td width='91'><div align='center'>"+ name + "</div></td>");
out.print("<td width='262'>" + value + "</td>");
out.println("</tr>");
}
}
out.println("</table></form></body></html>");
}
}
配置没有问题,SetCookies可以显示,但是ShowCookies始终显示不出结果,Debug了一下,在ShowCookies的doGet()方法中,形参request始终为空,但是用chrome查看网页信息的时候可以查看到所有的Cookies,表示Cookies已经加载到网页,但是为什么不能读取呢???
------解决思路----------------------
因为你把cookie写入到响应中,这个响应是相对于 out.println("<html><head><title>Set the Cookies</title></head>"); 这个页面的请求。
你再次点击链接等于重新发送了一个请求,那么这个请求自然为空的。因为你
"<a href=\"ShowCookies\">Click to show cookies</a>这个请求中没有添加任何参数。