1、 问题描述

Servlet中执行下面一段代码:

   public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        response.setContentType("text/html;charset=utf-8");
System.out.println( new Date().toString()); Cookie cookie = new Cookie("lasttime", new Date().toString());
response.addCookie(cookie); String s = "欢迎您首次访问该网站!~";
Cookie[] cookies = request.getCookies();
if (cookies != null)
for (Cookie cs : cookies) {
if (cs.getName().equals("lasttime")) {
s = "您上次登录的时间为:" + cs.getValue().replace("-", " ");
}
} response.getWriter().print(s);
}

抛出如下异常:

2、 追根溯源

出现上述问题觉得很奇怪,因为程序编译通过,至少证明没有语法错误,根据编译器提示,定位问题到:

Cookie cookie = new Cookie("lasttime",  new Date().toString());
response.addCookie(cookie);

查看JAVAEE-API,发现有如下

回过去看代码,发现

输入:

System.out.println( new Date().toString());
输出:

Fri Apr 20 21:56:39 CST 2018

很明显输出字符串中存在 空格 ,所以程序会报错,存在无效字符。

3、解决方案

解决问题的方法其实很简单,只要字符串中不存在空格即可成功,下面将给出几种具体的解决办法,程序修改如下:

法一

思路:用“-”代替“ ”,之后记得换回来即可,程序成功运行。

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        response.setContentType("text/html;charset=utf-8");
System.out.println( new Date().toString()); Cookie cookie = new Cookie("lasttime", new Date().toString().replace(" ", "-"));
cookie.setMaxAge(60*60);
response.addCookie(cookie); String s = "欢迎您首次访问该网站!~";
Cookie[] cookies = request.getCookies();
if (cookies != null)
for (Cookie cs : cookies) {
if (cs.getName().equals("lasttime")) {
s = "您上次登录的时间为:" + cs.getValue().replace("-", " ");
}
} response.getWriter().print(s);
}

法二

思路:进行URL编码,然后把编码后的字符串放到Cookie中,之后进行URL解码即可。

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        response.setContentType("text/html;charset=utf-8");
System.out.println( new Date().toString()); Cookie cookie = new Cookie("lasttime", URLEncoder.encode(new Date().toString(), "UTF-8"));
cookie.setMaxAge(*);
response.addCookie(cookie); String s = "欢迎您首次访问该网站!~";
Cookie[] cookies = request.getCookies();
if (cookies != null)
for (Cookie cs : cookies) {
if (cs.getName().equals("lasttime")) {
s = "您上次登录的时间为:" + URLDecoder.decode(cs.getValue(), "UTF-8");
}
}
response.getWriter().print(s);
}

程序运行正常,符合预期值。

java中Cookie使用问题(message:invalid character [32] was present in the Cookie value)的更多相关文章

  1. 【Cookie】java.lang.IllegalArgumentException An invalid character [32] was present in the Cookie value

    创建时间:6.30 java.lang.IllegalArgumentException: An invalid character [32] was present in the Cookie va ...

  2. cookie实例---显示上一次访问的时间与java.lang.IllegalArgumentException: An invalid character [32] was present in the Cookie value

    创建Cookie,名为lasttime,值为当前时间,添加到response中: 在A.jsp中获取请求中名为lasttime的Cookie: 如果不存在输出“您是第一次访问本站”,如果存在输出“您上 ...

  3. 异常java.lang.IllegalArgumentException: An invalid character [32] was present in the Cookie value

    通过HttpServletResponse的addCookie(Cookie cookie)向客户端写cookie信息,这里使用的tomcat版本是8.5.31,出现如下报错: java.lang.I ...

  4. An invalid character [32] was present in the Cookie value 错误

    今天在做cookie部分的demo的时候出现了一个错误Servlet部分的代码如下 Date data=new Date(); SimpleDateFormat format=new SimpleDa ...

  5. An invalid character [32] was present in the Cookie value

    系统安装Tomcat版本为:tomcat8,登录时报错"An invalid character [32] was present in the Cookie value" 处理方 ...

  6. java.lang.IllegalArgumentException: An invalid character [34] was present in the Cookie value

    java.lang.IllegalArgumentException: An invalid character [34] was present in the Cookie value at org ...

  7. exception 'DOMException' with message 'Invalid Character Error' Php + Mongodb

    问题描述: 项目属于MVC设计模式,技术和框架采用了php5.6 + Yii2.0 + MongoDB. 在我从Controller中调用Model 的 findAll([]) 方法获取数据打印到屏幕 ...

  8. Eclipse 中 Syntax error on token "Invalid Character", delete this token 的解决

    eclipse中遇到了Syntax error on token "Invalid Character", delete this token(令牌“无效字符”上的语法错误,删除此 ...

  9. 理解Java中的字符串类型

    1.Java内置对字符串的支持: 所谓的内置支持,即不用像C语言通过char指针实现字符串类型,并且Java的字符串编码是符合Unicode编码标准,这也意味着不用像C++那样通过使用string和w ...

随机推荐

  1. BZOJ 2580: [Usaco2012 Jan]Video Game

    2580: [Usaco2012 Jan]Video Game Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 142  Solved: 96[Subm ...

  2. Missing $ inserted解决方法

    目录 问题描述 解决 参考 问题描述 在学习LaTex Tutorial的时候,按照教程输入矩阵的时候发现出现了 ! Missing $ inserted的错误. 解决 在矩阵前后要加上$,如图所示 ...

  3. Alpha 冲刺 —— 十分之五

    队名 火箭少男100 组长博客 林燊大哥 作业博客 Alpha 冲鸭鸭鸭鸭鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 协调各成员之间的工作 协助测试的进行 测试项目运行的服务器环境 ...

  4. 洛谷 P3797 妖梦斩木棒 解题报告

    P3797 妖梦斩木棒 妖梦是住在白玉楼的半人半灵,拥有使用剑术程度的能力. 题目描述 有一天,妖梦正在练习剑术.地面上摆放了一支非常长的木棒,妖梦把它们切成了等长的\(n\)段.现在这个木棒可以看做 ...

  5. 【uoj125】 NOI2013—书法家

    http://uoj.ac/problem/125 (题目链接) 题意 在网格上写“NOI”,每个格子上有一些权值,要求覆盖的权值最大.书写有一些规则. Solution 将“NOI”分成11个部分, ...

  6. 【bzoj2555】 SubString

    http://www.lydsy.com/JudgeOnline/problem.php?id=2555 (题目链接) 题意 给出一个初始串,维护两个操作.在原串后面加入一个字符串:询问某个字符串在原 ...

  7. linux内核分析 第七周 Linux内核如何装载和启动一个可执行程序

    一.编译链接的过程和ELF可执行文件格式 vi hello.c gcc -E -o hello.cpp hello.c -m32 //预处理.c文件,预处理包括把include的文件包含进来以及宏替换 ...

  8. 【2018北京集训(六)】Lcm

    Portal --> 出错啦qwq(好吧其实是没有) Description 给定两个正整数\(n,k\),选择一些互不相同的正整数,满足这些数的最小公倍数恰好为\(n\),并且这些数的和为\( ...

  9. 1082 线段树练习 3 && 树状数组区间修改区间查询

    1082 线段树练习 3 题意: 给定序列初值, 要求支持区间修改, 区间查询 Solution 用树状数组, 代码量小, 空间占用小 巧用增量数组, 修改时在 \(l\) 处 $ + val$ , ...

  10. ROI align解释

    转自:blog.leanote.com/post/afanti.deng@gmail.com/b5f4f526490b ROI Align 是在Mask-RCNN这篇论文里提出的一种区域特征聚集方式, ...