java 记录cookies_java学习(八)cookie完成记录上次访问时间

当用户第一次登陆的时候,提示,你是第一次登陆,且记录该次访问的时间,下一次访问的时候,获取上一次访问事件并且展示出来。

完成记录功能需要会话技术、cookie和jsp技术。

1.jsp

jsp(java server pages),即,java服务器页面,本质上就是一个servlet,在HTML代码中嵌套java代码,运行在服务器端,处理请求,生成动态的内容。其对应的java和class文件在tomcat目录下的work目录中。

1.1 执行流程

1)浏览器发送请求,访问jsp页面;

2)服务器接受请求,jspServlet查找对应的jsp文件;

3)服务器将jsp页面翻译为java文件;

4)jvm将java编译成.class文件;

5)服务器运行class文件,生成动态内容;

6)将内容发送给服务器;

7)服务器组成相应信息,发送给浏览器;

8)浏览器接受数据,解析展示。

1.2 jsp脚本

有如下形式

java程序的片段;

生成在jsp的service方法中;

输出表达式;

生成在jsp的service方法中,相当于在java中调用out.print();

声明成员

生成在成员位置

2.会话技术

当用户打开浏览器访问不同的资源,直到用户将浏览器关闭,可以认为这是一次会话。

因为http协议是一种无状态的协议,它记录用户上次访问的内容,用户在访问过程中难免会产生一些数据,通过会话技术能够将其进行保存。

例如:用户登录、验证码、购物车以及访问记录等等;

会话技术分为:

cookie:浏览器端会话技术;

session:服务器端会话技术

3.cookie

cookie是由服务器端生成,通过respnse将cookie写回浏览器(Set-cookie),保留在浏览器上,下一次访问,浏览器根据一定的规则携带不同的cookie(通过request的头 cookie),服务器就可以接受cookie。

cookie的api为

new Cookie(String key, String value)

写回浏览器

response.addCookie(Cookie c);

获取cookie

Cookie[] arr = request.getCookies();

cookie常用方法

getName():获取cookie的key(名称);

getValue:获取制定cookie的值;

setMaxAge(int 秒):设置cookie在浏览器端的存活时间,以秒为单位;

若设置为0,便是删除该cookie(前提必须路径一致);

setPath(String path):设置cookie的路径,当我们访问的路径包含此cookie的path,则通过request携带。

默认路径:访问servlet的路径,从“/项目名称”开始,到最后一个“/”结束。例如访问的servlet的路径为/day/a/b/hello,那么默认路径为:/day/a/b

手动设置路径:以“/项目名:开始,以”/“结尾。

4.步骤分析

1.创建一个servlet Remservlet,路径为/rem;

2.在servlet中: 1)获取制定cookie,例如名称为lastTime

request.getCookies()

2)判断cookie是否为空。若为空,提示信息,第一次访问。若不为空,获取cookie的value,展示信息为:您上次访问事件为...... 3)将访问事件记录,写回浏览器

(1)创建cookie

(2)写回浏览器

5.代码实现

package com.itcast.rem;

import java.io.IOException;

import java.io.PrintWriter;

import java.util.Date;

import javax.servlet.ServletException;

import javax.servlet.http.Cookie;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

/**

* 记录访问的事件

*/

public class RemServlet extends HttpServlet {

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

//设置编码

response.setContentType("text/html;charset=utf-8");

PrintWriter w = response.getWriter();

//获取制定cookie

Cookie c = getCookieByName("lastTime",request.getCookies());

//判断是否为空

if(c == null) {

w.print("您是第一次登陆");

}else {

String value = c.getValue();

long time = Long.parseLong(value);

Date date = new Date(time);

w.print("您上次访问的时间为"+date.toLocaleString());

}

//将当前访问事件记录

//创建cookie,末尾加空格是为了转化为字符串

c = new Cookie("lastTime", new Date().getTime()+"");

//写回

response.addCookie(c);

}

/**

* 通过名称在cookie素组获取指定的cookie

* @param name cookie名称

* @param cookies 数组

* @return

*/

private Cookie getCookieByName(String name, Cookie[] cookies) {

if(cookies!=null) {

for(Cookie c:cookies) {

if(name.equals(c.getName())) {

return c;

}

}

}

return null;

}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

doGet(request, response);

}

}

6.实现持久化

实现cookie的持久化,并更改路径。

//将当前访问事件记录

//创建cookie,末尾加空格是为了转化为字符串

c = new Cookie("lastTime", new Date().getTime()+"");

//持久化cookie,保存时间为1个小时

c.setMaxAge(3600);

//设置路径,为“0831/”

c.setPath(request.getContextPath()+"/");

//写回浏览器

response.addCookie(c);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值