A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

计软小哥向前冲

初级黑马

  • 黑马币:

  • 帖子:

  • 精华:

在练习cookie知识点时,新建一个cookie对象,想将日期设置为cookie对象的value值时,出现以下问题
java.lang.IllegalArgumentException: An invalid character [32] was present in the Cookie value


IllegalArgumentException:非法参数异常
character [32]:ASCII码代表空格的意思

从网上搜索得知,Tomcat9.0版本以上,对Cookie对象设置value值时,包含空格字符便会抛出此异常。具体原因以及还有哪些字符不能包含还未清楚。所以需要修改日期的格式。

修改前的代码:
[AppleScript] 纯文本查看 复制代码
Cookie c=new Cookie("LastVisit",date.toLocaleString());[/color][/font][/color]
   response.addCookie(c);


由于toLocaleString()方法被抛弃,然后修改成如下:
[AppleScript] 纯文本查看 复制代码
Date date = new Date();
   DateFormat df = DateFormat.getDateTimeInstance();
   Cookie c = new Cookie("LastVisit",df.format(date));
   response.addCookie(c);



Java官方推荐使用DateFormat对日期类型Date进行格式化,常见的日期格式类型可通过DateFormat中的方法获得。但是由于DateFormat的自带方法得到的格式(显示时分秒)都包含空格,所以使用继承了DateFormat的子类SimpleDateFormat,自定义输出格式类型。

SimpleDateFormat的参数定义如下:


日期格式化类格式参数

G  Era 标志符  Text  AD  
y  年  Year  1996; 96  
M  年中的月份  Month  July; Jul; 07  
w  年中的周数  Number  27  
W  月份中的周数  Number  2  
D  年中的天数  Number  189  
d  月份中的天数  Number  10  
F  月份中的星期  Number  2  
E  星期中的天数  Text  Tuesday; Tue  
a  Am/pm 标记  Text  PM  
H  一天中的小时数(0-23)  Number  0  
k  一天中的小时数(1-24)  Number  24  
K  am/pm 中的小时数(0-11)  Number  0  
h  am/pm 中的小时数(1-12)  Number  12  
m  小时中的分钟数  Number  30  
s  分钟中的秒数  Number  55  
S  毫秒数  Number  978  
z  时区  General time zone  Pacific Standard Time; PST; GMT-08:00  
Z  时区  RFC 822 time zone  -0800

最后使用SimleDateFormat解决日期中包含空格的问题(使用/代替 空格 作为连接 年-月-日/时-秒-分):
[Java] 纯文本查看 复制代码
Date date = new Date();
SimpleDateFormat fm = new SimpleDateFormat("yyyy-MM-dd/HH:mm:ss");
Cookie c=new Cookie("LastVisit",fm.format(date));
response.addCookie(c);


最后结果如下:




总结:1.tomcat9.0以上不支持Cookie的value中出现空格Space字符
2.DateFormat中自带了几种定义好的时间格式
3.DateFormat的子类SimpleDateFormat可以使用参数自定义时间格式
4.使用其他字符代替空格字符,问题解决

1 个回复

倒序浏览
太强啦!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马