在java servlet中,我有以下代码:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Cookie cookie = new Cookie("tom_cookies",Long.toString(new Date().getTime()));
cookie.setMaxAge(30);
cookie.setPath(request.getContextPath());
cookie.setComment("1");
cookie.setVersion(1);
System.out.println("Cookie created!");
response.addCookie(cookie);
}
在JSP index.jsp中我有以下代码:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>MyIndex</title>
</head>
<body>
<div>CookieComment: <%
Cookie[] my = request.getCookies();
for(int i=0;i<my.length;i++){
String comment = my[i].getComment();
out.println(comment);
}
%>
</div></body></html>
我的web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<servlet>
<servlet-name>Test</servlet-name>
<servlet-class>Servlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Test</servlet-name>
<url-pattern>/servlet1</url-pattern>
</servlet-mapping>
<display-name>1aaa</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
在local:8080 / servlet中,我的期望是:
CookieComment:1
但是,它只显示:
CookieComment:null
这里有什么不对吗?
答案 0 :(得分:1)
Cookie的工作方式如下:
您要做的是,从请求对象访问响应对象(步骤2)中设置的cookie(步骤1)。由于请求对象显然不知道响应中设置了cookie,因此您获得null
值。
您只能在浏览器发送的后续请求中访问Cookie(请注意,虽然<%
和%>
之间的代码是用html / jsp编写的,但它是实际上是服务器端代码,并在呈现响应之前执行。
如果您想从服务器传回内容并进行打印,则可以在response
中使用request
对象或set attributes。
答案 1 :(得分:1)
您不需要通过scriptlet代码从请求对象获取cookie,您可以通过EL使用名为'cookie'的隐式变量
${cookie.yourCookieName}
这应该在JSP页面中打印cookie的值。它在响应对象中查找cookie
希望有所帮助