一、遇到的问题
Cookie报错:
An invalid character [32] was present in the Cookie value
原因:
- 格式化输出日期时报错:
yyyy年MM月dd日 HH:mm:ss
- Tomecat8之后, 虽然支持中文输出, 但是对于一些特殊字符还是不支持,
[32]
表示空格
二、 解决方法:
1. 在输出之前, 使用`URLEncoder`进行编码
+ `dateString = URLEncoder.encode(dateString, "utf-8");`
2. 对于编码的数据, 如果要从浏览器中获取到服务端, 要对其进行解码
+ `String dateString = URLDecoder.decode(cookie.getValue(), "utf-8");`
示例:
//创建Cookie
Cookie cookie = new Cookie(URLEncoder.encode("姓名","utf-8"),URLEncoder.encode("小明","utf-8"));
response.addCookie(cookie);
//该格式的时间有空格
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date date = new Date();
String loginTime = sdf.format(date);
//使用下面的方式即可解决
cookie = new Cookie("loginTime",URLEncoder.encode(loginTime,"utf-8"));
response.addCookie(cookie);
out.println("Cookie已经存在浏览器中");