java Web会话技术(cookie)

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);
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值