会话的技术
会话:打开浏览器,多次访问WEB资源,最后关闭浏览器的过程。
cookie技术(客户端技术)
Cookie通过在客户端记录信息确定用户身份。
方法:
addCookie(Cookie cookie):回写到浏览器 response下面的
Cookie[] getCookies():获取所有cookie的内容,Request下面的
Cookie(String name,String value):cookie的构造方法
String getName():获取cookie的名称
String getValue():获取cookie的值
void setMaxAge(int expiry):设置有效时间,以秒为单位
void setPath(String url):设置有效路径
void setDomain(String pattern):设置有效域名
会话级别的cookie:默认保存到浏览器的内存中
持久性的cookie:把cookie存储到磁盘中,使用setMaxAge()进行设置。
删除持久性cookie的话,将cookie设置为0。删除的时候,虚拟路径必须一致,否则不会删除。
cookie案例:显示上次浏览时间
package com.cn.Cookie;
import java.io.IOException;
import java.sql.Date;
import java.text.SimpleDateFormat;
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 com.cn.Utils.CookieUtil;
public class LastServletcookie extends HttpServlet {
/**
* 1、获取所有的cookie,判断是否是第一次访问
2、如果是第一次访问 输出欢迎
3、如果不是第一次访问 获取当前的时间,输出到浏览器
* 4、记录当前的时间,回写到浏览器
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 设置字符中文乱码问题
response.setContentType("text/html;charset=UTF-8");
// 记录当前时间
java.util.Date date = new java.util.Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String s = sdf.format(date);
// 回写到浏览器 使用cookie回写
Cookie c2 = new Cookie("last", s);
response.addCookie(c2);
// 获取所有的cookie
Cookie[] cookies = request.getCookies();
/*
* 通过指定名称来查找cookie 最好编写一个方法,方便多次使用,这里用的是工具类
*/
Cookie c = CookieUtil.getCookieByName(cookies, "last");
// 判断,如果cookie为空格的话,表示第一次访问,输出欢迎
if (c == null) {
response.getWriter().write("<h1>欢迎你第一次访问</h1>");
} else {
// 获取cookie的值,输出到浏览器
String value = c.getValue();
response.getWriter().write("<h1>你上次的访问时间为" + value + "</h1>");
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
package com.cn.Utils;
import javax.servlet.http.Cookie;
/**
* cookie的工具类
*
* @author Administrator
*
*/
public class CookieUtil {
/**
* 通过指定名称查找指定的cookie
*
* @param c
* @param name
* @return
*/
public static Cookie getCookieByName(Cookie[] cookies, String name) {
if (cookies == null) {
return null;
} else {
/*
* 循环遍历。目的:获取cookie的name和传递的 name进行匹配, 如果匹配成功,返回当前的cookie。
*/
for (Cookie cookie : cookies) {
if (cookie.getName().equals(name)) {
return cookie;
}
}
}
return null;
}
}