<%@ page language="java" import="java.util.* , javax.net.*" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<%
String username = request.getParameter("value");
System.out.println("Email got in cookieSet = " + username);
if(username==null) username="";
Date now = new Date();
String timestamp = now.toString();
Cookie cookie = new Cookie("username",username);
cookie.setMaxAge(365 * 24 * 60 * 60);
response.addCookie(cookie);
%>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>DashBoard-Cookie</title>
</head>
<body>
</body>
</html>
现在使用Http服务请求参数我将用户名'Value'传递给此jsp。我正在从 getValueCookie.jsp 中读取cookie值
<%
String cookieName = "username";
Cookie cookies [] = request.getCookies ();
Cookie myCookie = null;
String result;
if (cookies != null)
{
for (int i = 0; i < cookies.length; i++)
{
if (cookies [i].getName().equals (cookieName))
{
myCookie = cookies[i];
break;
}
}
}
%>
<data>
<status><%=myCookie.getValue().toString()%></status>
</data>
通过我得到的httpservice值,但如果我打开一个新窗口或任何新的选项卡cookie值没有得到我怎么能解决这个问题?提前谢谢。
答案 0 :(得分:1)
即使发布的代码非常繁琐且令人讨厌(第二个示例可以通过简单的${cookie.username.value}
在EL中完成, scriptlet 也是禁止的,这应该是(in)直接在HttpServlet
或Filter
)中,代码看起来是合法的。
有两个可能的原因:
Cookie绑定到当前请求协议,域和(默认情况下)上下文路径。因此,如果您按其中任何一个切换,那么其他请求中的cookie将无法访问。
修改响应标头(需要在响应标头中设置cookie)JSP文件中途要求IllegalStateException: Response already committed
例外。检查服务器日志。如果他们在那里,那么只需将 scriptlet 移动到JSP页面的顶部或 - 最好 - ,只需轻轻地使用HttpServlet
或Filter
。 JSP是这种逻辑的错误位置。
那就是说,您考虑过使用HttpSession
吗?它提供了相同的功能,但更容易,更少问题,因为您不需要麻烦松散的cookie。按request.getSession()
抓取会话,并使用session.setAttribute(key, value)
在会话中存储对象,并使用session.getAttribute(key)
从会话中检索对象。在那里会话是,它又由cookie支持,但你不需要自己管理它。服务器将透明地为您完成。