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");
c.setMaxAge(24*60*60);
response.addCookie(c);
3.删除cookie
删除某个Cookie时,只需要新建一个只有maxAge和value不一样的同名Cookie,然后添加到response中覆盖原来的Cookie
Cookie cookie = new Cookie("username","peter");
cookie.setMaxAge(0);
response.addCookie(cookie);
4.修改cookie
修改某个Cookie时,只需要新建一个只有value属性不一样的同名Cookie,然后添加到response中覆盖原来的Cookie
Cookie cookie = new Cookie("username","joker");
cookie.setMaxAge(24*60*60);
response.addCookie(cookie);
设置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[] cookies = request.getCookies();
for (Cookie cookie : cookies) {
if (cookie.getName().equals("lastTime")) {
String value = cookie.getValue();
long parseLong = Long.parseLong(value);
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 cookie = new Cookie("lastTime", System.currentTimeMillis()+"");
cookie.setPath("/Cookie/demo01");
cookie.setMaxAge(60*5);
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 = new Cookie("username", username);
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.setMaxAge(0);
}
response.addCookie(cookie);
response.getWriter().write("登录成功");
}else {
response.getWriter().write("登录失败");
response.setHeader("refresh", "1;url=demo02");
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}