按照教材例程学习用cookie保存用户信息并传递cookie值时,遇到了如下问题:
信息输入、保存界面代码:
<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<%@ page import="java.net.URLDecoder" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>通过cookie保存并读取用户信息</title>
</head>
<body>
<%
Cookie[] cookies = request.getCookies();
String user="";
String date="";
if(cookies != null){
for(int i=0;i<cookies.length;i++){
if(cookies[i].getName().equals("mrCookie")){
user=URLDecoder.decode(cookies[i].getValue().split("#")[0]);
date = cookies[i].getValue().split("#")[1];
}
}
}
if("".equals(user)&&"".equals(date)){
%>
游客您好,欢迎初次光临。
<form action="deal.jsp"method="post">
请输入姓名:<input name="user"type="text">
<input name="button"type="submit"value="确定">
</form>
<% }else{
%>
欢迎[<b><%= user%></b>]再次光临<br>
您注册的时间是:<%= date %>
<%
}
%>
</body>
</html>
信息处理页面代码:
<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<%@ page import="java.net.URLEncoder" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>写入cookies</title>
</head>
<body>
<%
request.setCharacterEncoding("GB18030");
String user=URLEncoder.encode(request.getParameter("user"),"utf-8");
Cookie cookie = new Cookie("mrCookie",user+"#"+new java.util.Date().toLocaleString());
cookie.setMaxAge(60*60*24*30);
response.addCookie(cookie);
%>
<script type="text/javascript">window.location.href="index.jsp"</script>
</body>
</html>
错误信息如下:
严重: Servlet.service() for servlet [jsp] in context with path [/第六章JSP内置对象] threw exception [An exception occurred processing JSP page [/deal.jsp] at line [17]
14: String user=URLEncoder.encode(request.getParameter("user"),"utf-8");
15: Cookie cookie = new Cookie("mrCookie",user+"#"+new java.util.Date().toLocaleString());
16: cookie.setMaxAge(60*60*24*30);
17: response.addCookie(cookie);
18: %>
19: <script type="text/javascript">window.location.href="index.jsp"</script>
20: </body>
Stacktrace:] with root cause
java.lang.IllegalArgumentException: An invalid character [32] was present in the Cookie value
at org.apache.tomcat.util.http.Rfc6265CookieProcessor.validateCookieValue(Rfc6265CookieProcessor.java:182)
at org.apache.tomcat.util.http.Rfc6265CookieProcessor.generateHeader(Rfc6265CookieProcessor.java:115)
at org.apache.catalina.connector.Response.generateCookieString(Response.java:1010)
at org.apache.catalina.connector.Response.addCookie(Response.java:962)
at org.apache.catalina.connector.ResponseFacade.addCookie(ResponseFacade.java:385)
at org.apache.jsp.deal_jsp._jspService(deal_jsp.java:127)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:443)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:475)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:625)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:498)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:796)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1372)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
Internet选项中关于cookie使用的权限已全部设置为允许,请各位帮帮忙