#问题:今天上午踩了一个坑,首先,这个小案例的运行结果是应该是在前端页面出现一个当前时间的,当然如果是首次登陆的话应该是显示"第一次登陆",第二次则会显示上次的登录时间,但是却没有显示,首先看tomcat,会报一个异常IllegeArgumentException, 即非法参数异常, 

#总结:1)tomcat8.5及以上的版本不允许有空格,而空格在对应的ASCII是32;

2)习惯看tomcat日志以及debug ;

#以下是具体的DEMO:

Servlet文件:

package cn.itcast.chapter05.cookie.example;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date; /**
* 需求:当用户访问某些Web应用时,经常会显示该用户上一次的访问时间。
* 实现:用Cookie技术实现显示用户上次的访问时间的功能。
* 本类:用于实现获取Cookie信息并将当前时间作为Cookie的值发送给客户端。
* */
public class LastAccessServlet extends HttpServlet {
private static final long serialVersionUID=1L;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8"); String lastAccessTime=null; //获取所有的cookie,并将这些cookie存放当数组中
Cookie[] cookies=request.getCookies(); //遍历cookies数组
for (int i = 0; cookies!=null&&i<cookies.length; i++) {
if ("lastAccess".equals(cookies[i].getName())){
lastAccessTime=cookies[i].getValue();
break;
}
} //判断是否存在名称为lastAccess的cookie
if(lastAccessTime==null){
response.getWriter().print("你是首次访问本站!");
}else {
response.getWriter().print("你上次访问的时间是:"+lastAccessTime);
}
//创建cookie,将当前时间作为cookie的值发送给客户端
String currentTime=
new SimpleDateFormat("yyyy-MM-dd-hh:mm:ss").format(new Date());
Cookie cookie=new Cookie("lastAccess",currentTime);
cookie.setMaxAge(60*60);
response.addCookie(cookie);
} }

web.xml文件,配置servlet路径。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5"> <servlet>
<servlet-name>LastAccess</servlet-name>
<servlet-class>cn.itcast.chapter05.cookie.example.LastAccessServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LastAccess</servlet-name>
<url-pattern>/LastAccess</url-pattern>
</servlet-mapping> </web-app>

#Cookie回忆:

1)概念:Cookie是保存在浏览器端的数据。

当浏览器访问服务器,服务器会发送一个set-cookie消息头给浏览器,当再次访问服务器时,会将

该消息头发送给服务器。

2)使用:

           1.添加Cookie
             Cookie c = new Cookie(String name,String value);
             注:
             Cookie只能存放字符串。
             response.addCookie(c);
           2.读取Cookie
             Cookie[] request.getCookies();
             String cookie.getName();
             String cookie.getValue();
             注: 有可能返回null。
             一个Cookie对象封装了一个Cookie中的数据。
 
#说明:

1.学会重复,与其敲三万行代码,不如把一万行代码敲三遍。

2.学会在集体中成长,学会借助外力。

一个关于cookie的坑的更多相关文章

  1. 浏览器本地数据存储解决方案以及cookie的坑

    本地数据存储解决方案以及cookie的坑 问题: cookie过长导致页面打开失败 背景: 在公司的项目中有一个需求是打开多个工单即在同一个页面中打开了多个tab(iframe),但是需要在刷新时只刷 ...

  2. 本地数据存储解决方案以及cookie的坑

    本地数据存储解决方案以及cookie的坑 问题: cookie过长导致页面打开失败 背景: 在公司的项目中有一个需求是打开多个工单即在同一个页面中打开了多个tab(iframe),但是需要在刷新时只刷 ...

  3. 创建一个欢迎 cookie 利用用户在提示框中输入的数据创建一个 JavaScript Cookie,当该用户再次访问该页面时,根据 cookie 中的信息发出欢迎信息。

    创建一个欢迎 cookie 利用用户在提示框中输入的数据创建一个 JavaScript Cookie,当该用户再次访问该页面时,根据 cookie 中的信息发出欢迎信息. <html> & ...

  4. 项目中 关于localstorage、cookie的坑?明明设置了本地存储为什么没生效

    1.简单的介绍一下localStorage,sessionStorage,cookie localStorage:仅在客户端存储不参与服务器通信,存储大小一般为5M,如果不是人为清除,那么即使是关闭浏 ...

  5. 测者的测试技术手册:Junit单元测试遇见的一个枚举类型的坑(枚举类型详解)

    Enum的简介 枚举类型很早就在计算机语言中存在了,主要被用来将一组相似的值包含进一种类型中,这种类型的名称被定义成独一无二的类型描述符,这就是枚举类型. 在java语言中,枚举类型是一个完整功能的类 ...

  6. 【Java】Android EditText开发的一个容易忽略的坑

    这几天接手做一个远程控制Android application,安卓前台的EditText用来输入ip地址.端口等信息,发现EditText的使用存在着巨坑一个! 我在网上找了半天,发现仅仅有人提出这 ...

  7. 分享一个shell脚本的坑:grep匹配+wc取值 在脚本执行后的结果与手动执行结果不一致

    打算在跳板机上写一个shell脚本,批量检查远程服务器上的main进程是否在健康运行中. 先找出其中一台远程机器,查看main进程运行情况 [root@two002 tmp]# ps -ef|grep ...

  8. 一个Flex 对话框的坑

    最近在项目中遇到一个问题,在Flex中使用Alert.show("this is content!", "title");发现对话框可以弹出来,但是文本始终不显 ...

  9. 一个.net Cookie组件的bug引发的题外话

    在.net里,做过Http模拟发送请求的朋友们应该遇到过,有个时候无论怎么努力,都没办法让Cookie跟网页用浏览器所收集的一样,其中原因除了有些Cookie大概是ReadOnly之外,似乎另有隐情: ...

随机推荐

  1. 【thinkphp5】安全建议:隐藏后台登录入口地址

    我们都知道后台   www.test.com/admin 是我们最常用的登录入口,方便的同时也留下了隐患,如果你刚好使用了 admin/ 这种账号密码的方式,会导致我们的后台完全暴露在外. 因此我们建 ...

  2. Linux Tomcat8 启动堆内存溢出

    今天在部署一个开源项目的时候,Tomcat8启动异常,报错信息: Exception in thread "RMI TCP Connection(idle)" java.lang. ...

  3. Nestjs 设置静态文件,public

    Docs: https://docs.nestjs.com/techniques/mvc main.js import { NestFactory } from '@nestjs/core'; imp ...

  4. aes 和 Md5 分析

    高级加密标准(英语:Advanced Encryption Standard,缩写:AES). 密码的设计力求满足以下3条标准: ① 抵抗所有已知的攻击. ② 在多个平台上速度快,编码紧凑. ③ 设计 ...

  5. ubuntu安装python3.6

    环境: ubuntu18.04 64位,python3.6.5 安装过程 1.打开终端 首先创建安装目录, sudo mkdir /usr/local/python3 2.然后下载安装包,解压,并且进 ...

  6. tuple的基本使用

    常用如下所示: # 元祖,tuple-->不可变,但元祖里面的数据可以变化 # 当元祖只有一个元素时,需加’,‘,否则类型是<class 'int'> # tuple1 = (1) ...

  7. stm32f769ni-discovery编译例程需要修改

    找不到cmsis_os.h: 方法:在pack文件夹下找cmsis_os.h文件,有四个,选RTOS2文件夹下的. 原因:cmsis_os2.h是新版本,cmsis_os.h封装了cmsis_os2. ...

  8. db2look 工具

    db2look -d sample -m > db2look_stat.out

  9. RunExecuteFile

    using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using S ...

  10. git从已有分支拉新分支开发

    开发过程中经常用到从master分支copy一个开发分支,下面我们就用命令行完成这个操作: 1. 切换到被copy的分支(master),并且从远端拉取最新版本 $git checkout maste ...