java Web(cookie)会话技术
1.理解
1.会话技术
客户端(浏览器)和服务端进行交互(会话)
当浏览器关闭的时候 这次交互(会话)结束
2.cookie(客户端技术)
cookie是保存在浏览器中的缓冲数据
当我发起一个请求 请求一个servlet
然后进行逻辑处理
处理完成后给客户端(浏览器)一个响应
响应中携带着记录了cookie数据
然后浏览器保存起来 可以保存在内存当中(结束会话 cookie被清除)
也可以保存在硬盘中(结束会话 依然存在 就是个文件)
当用浏览器再一次访问这个页面的时候
会携带着之前保存的cookie数据
3.每个网站可以保存20个cookie 整个浏览器可以保存 300个
4.注意:第一次访问服务器的时候 是不会携带cookie去访问的
因为cookie还没有产生,只有当第一次请求后的响应中可以把cookie
写回到浏览器中
2.添加cookie
获取客户端的Cookie时,只能获取name与value属性,其它属性都不会被提交。
Cookie c = new Cookie("username","peter");// 新建一个Cookie对象
c.setMaxAge(24*60*60); // 设置过期时间1天,以秒为单位
response.addCookie(c); // 保存cookie到客户端
3.删除cookie
删除某个Cookie时,只需要新建一个只有maxAge和value不一样的同名Cookie,然后添加到response中覆盖原来的Cookie
Cookie cookie = new Cookie("username","peter");// 新建Cookie
cookie.setMaxAge(0); // 设置生命周期为0,表示将要删除
response.addCookie(cookie); // 执行添加后就从response里删除了
4.修改cookie
修改某个Cookie时,只需要新建一个只有value属性不一样的同名Cookie,然后添加到response中覆盖原来的Cookie
Cookie cookie = new Cookie("username","joker");// 新建Cookie
cookie.setMaxAge(24*60*60); // 设置生命周期
response.addCookie(cookie); // 执行添加后就从response里覆盖修改了
设置xml配置信息
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>Cookie</display-name>
<servlet>//设置selvlet
<servlet-name>demo01</servlet-name>//servlet别名
<servlet-class>Demo01</servlet-class>//全类名
</servlet>
<servlet-mapping>//设置servlet映射关系
<servlet-name>demo01</servlet-name>//设置关联映射的selvlet名字
<url-pattern>/demo01</url-pattern>//设置这个关联映射的地址
</servlet-mapping>
<servlet>
<servlet-name>demo02</servlet-name>
<servlet-class>Demo02</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>demo02</servlet-name>
<url-pattern>/demo02</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>demo03</servlet-name>
<servlet-class>Demo03</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>demo03</servlet-name>
<url-pattern>/demo03</url-pattern>
</servlet-mapping>
</web-app>
1.设置上次访问时间
import java.io.IOException;
import java.text.SimpleDateFormat;
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 Demo01 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//获取cookie
Cookie[] cookies = request.getCookies();
for (Cookie cookie : cookies) {
if (cookie.getName().equals("lastTime")) {
//取出cookie的值
String value = cookie.getValue();
//字符串转long类型 字符串为数值
long parseLong = Long.parseLong(value);
//转为日期 Date
Date date = new Date(parseLong);
//创建一个显示的日期格式
SimpleDateFormat dateFormat= new SimpleDateFormat("yyyy-MM-dd HH:mm:dd");
//格式化时间
String format = dateFormat.format(date);
//响应浏览器显示
response.getWriter().write("上次访问时间:"+format);
}
}
//第一次访问创建的cookie
//1.存入一个当前时间的字符串
Cookie cookie = new Cookie("lastTime", System.currentTimeMillis()+"");
//2.设置cookie的储存路径 只有在这个路径下的cookie才能被找到
//如果储存路径没有一级目录整个所有网址都能访问到cookie.setPath("/")
cookie.setPath("/Cookie/demo01");
//3.设置cookie存活时间Integer.MAX_VALUE 最长存活时间
//负值 浏览器关闭 cookie消失
//正值表示存活的时间
//0表示删除cookie
cookie.setMaxAge(60*5);//时间单位为秒
//4.存入cookie
response.addCookie(cookie);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
2.设置表单,完成自动登录
import java.io.IOException;
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 Demo02 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//告诉服务器 请求的内容是什么编码格式
String name = "";
//读取cookie
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
if (cookie.getName().equals("username")) {
name = cookie.getValue();
System.out.println("cookie.getName()是表单name值");
}
}
}
System.out.println(name);
response.getWriter().write("<form action='demo03' method='post'>");
response.getWriter().write("用户名:<input type=\"text\" name=\"username\"><br/>");
response.getWriter().write("密码:<input type=\"text\" name=\"password\"><br/>");
response.getWriter().write("记住:<input type=\"checkbox\" name=\"remember\" value=\"\"><br/>");
response.getWriter().write("<input type=\"submit\" value= \"登录\">");
response.getWriter().write("</form>");
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
3.接受表单数据,记录用户cookie
import java.io.IOException;
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 Demo03 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//获取请求的参数
String username = request.getParameter("username");
String password = request.getParameter("password");
String remember = request.getParameter("remember");
//将信息存入cookie
Cookie cookie = new Cookie("username", username);
//设置cookie路径
cookie.setPath("/Cookie/demo03");
Cookie[] cookies = request.getCookies();
for (Cookie cookie2 : cookies) {
if (cookie2.getName().equals("username")) {
username = cookie2.getValue();
password = "123";
}
}
//处理业务逻辑
if(username.equals("wangl")
&& password.equals("123")){
//判断是否点记住按钮
if (remember != null) {
System.out.println(remember + "123123123");
//需要记住(设置存活时间)
cookie.setMaxAge(Integer.MAX_VALUE);
}else {
//删除原来的cookie
cookie.setMaxAge(0);
}
//添加到响应中
response.addCookie(cookie);
response.getWriter().write("登录成功");
}else {
response.getWriter().write("登录失败");
//3秒后回去登录页面
response.setHeader("refresh", "1;url=demo02");
}
//请求分发
//通过demo实例可尝试
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}