JavaWeb学习笔记(8)__Cookie篇

Cookie

本文章基于B站UP主:楠哥教你学Java 的课程《Java Web从入门到实战【完整版】》进行整理补充,本文章仅用于个人学习交流使用。

目录结构

  • Cookie
        • 1.基本概念
        • 2.创建使用
        • 3.常用方法
        • 4.Cookie 和 Session 的区别
        • 5.登录案例

1.基本概念

Cookie是存储在浏览器里面的一个东西,不属于JSP内置对象,是一个全新的内容。

实现会话的一种机制,Cookie存储在客户端/浏览器,seeion存储在服务端。

Cookie 是服务端在 HTTP 响应中附带传给浏览器的⼀个⼩⽂本⽂件,⼀旦浏览器保存了某个 Cookie,在之后的请求和响应过程中,会将此 Cookie 来回传递,这样就可以通过 Cookie 这个载体完成客户端和服务端的数据交互。

用 key-value 的方式存储。

2.创建使用

  • 创建cookie
Cookie cookie=new Cookie("name","zhangsan");//创建
response.addCookie(cookie);//响应到客户端
  • 读取cookie
Cookie[] cookies=request.getCookies();//一次性获取所有的cookie,用cookie数组存放
        for (Cookie cookie2:cookies){
            out.write(cookie2.toString()+"
"
); out.write(cookie2.getName()+"
"
);//读取key out.write(cookie2.getValue()+"
"
);//读取value out.write("---------"+"
"
); }
JavaWeb学习笔记(8)__Cookie篇_第1张图片

现在cookie只存储在打开当前项目的浏览器中,如果用新的浏览器打开 cookie.jsp 会报空指针异常,因为不同的浏览器都有着自己的cookie。如果关闭浏览器,再打开,cookie信息不会显示,因为默认情况下cookie的生命周期直到当前浏览器关闭。

3.常用方法

void setMaxAge(int age) 设置 Cookie 的有效时间,单位为秒

int getMaxAge() 获取 Cookie 的有效时间

String getName() 获取 Cookie 的 name

String getValue() 获取 Cookie 的 value

Cookie[] cookies=request.getCookies();
        out.write(cookies[0].getMaxAge());//?输出一个奇怪的符号 
        System.out.println(cookies[0].getMaxAge());//-1 默认值 直到浏览器关闭

4.Cookie 和 Session 的区别

session:

保存在服务器

保存的数据是 Object

会随着会话的结束⽽销毁

保存重要信息 **例如:**账号密码信息,如果保存在cookie,能通过cookie的本地文件获取到

cookie:

保存在浏览器

保存的数据是 String

可以⻓期保存在浏览器中,⽆会话⽆关

保存不重要信息 **例如:**视频观看记录,再次打开上一次没看完的视频时会从断点处播放

存储⽤户信息方面:

session:

setAttribute(“name”,“admin”)

getAttribute(“name”)

⽣命周期:

服务端:只要 WEB 应⽤重启就销毁,

客户端:只要浏览器关闭就销毁。

退出登录: session.invalidate()

cookie:

response.addCookie(new Cookie(name,“admin”))

取:

Cookie[] cookies=request.getCookies();//一次性获取所有的cookie,用cookie数组存放
        for (Cookie cookie:cookies){  //只能通过遍历+条件判断的方式获取
            if (cookie.getName().equals("name"))
                out.write("用户名:"+cookie.getValue()+"
"
); }

⽣命周期:

不随服务端的重启⽽销毁,

客户端:默认是只要关闭浏览器就销毁,我们通过 setMaxAge()⽅法设置有效期,⼀旦设置了有效期,则不随浏览器的关闭⽽销毁,⽽是由设置的时间来决定。

退出登录: setMaxAge(0)

5.登录案例

描述:用cookie实现用户登录验证,使浏览器能够保存用户信息,即关闭浏览器再回到 welcome 界面时能够正常显示,并实现登出功能,即销毁session.

  • 登录界面:cookie_login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Titletitle>
head>
<body>
<form action="/cookielogin" method="post">
    <table>
        <tr>
            <td>用户名:td>
            <td><input type="text" name="username"/>td>
        tr>
        <tr>
            <td>密码:td>
            <td><input type="password" name="password">td>
        tr>
        <tr>
            <td><input type="submit" value="登录">td>
            <td><input type="reset" value="重置">td>
        tr>

    table>
form>
body>
html>

  • 登录验证:验证用户名密码并设置cookie CookieLoginServlet.java
package com.lut.session;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;


@WebServlet("/cookielogin")
public class CookieLoginServlet extends HttpServlet {

    private String myusername="admin";
    private String mypassword="123456";

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String username=req.getParameter("username");
        String password=req.getParameter("password");
        if (username.equals(myusername)&&password.equals(mypassword)){
            Cookie cookie=new Cookie("name",username);
            Cookie cookie1=new Cookie("password",password);
            cookie.setMaxAge(60*60*24);//生命周期设为1day
            cookie1.setMaxAge(60*60*24);
            resp.addCookie(cookie);
            resp.addCookie(cookie1);
            resp.sendRedirect("cookie_welcome.jsp");
        }else {
            resp.sendRedirect("cookie_login.jsp");
        }

    }
}
  • 欢迎界面:接收cookie信息,显示欢迎信息----cookie_welcome.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


    

欢迎回来

<% Cookie[] cookies=request.getCookies();//一次性获取所有的cookie,用cookie数组存放 for (Cookie cookie:cookies){ //只能通过遍历+条件判断的方式获取 if (cookie.getName().equals("name")){ out.write("用户名:"+cookie.getValue()+"
"); } if (cookie.getName().equals("password")){ out.write("密 码:"+cookie.getValue()+"
"); } } %> 退出登录

注: 登出功能跳转时发生405异常,等待处理…

  • 登出设置:销毁cookie,回到主界面----CookieLoginServlet.java
package com.lut.session;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;


@WebServlet("/cookielogin")
public class CookieLoginServlet extends HttpServlet {

    private String myusername="admin";
    private String mypassword="123456";

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String username=req.getParameter("username");
        String password=req.getParameter("password");
        if (username.equals(myusername)&&password.equals(mypassword)){
            Cookie cookie=new Cookie("name",username);
            Cookie cookie1=new Cookie("password",password);
            cookie.setMaxAge(60*60*24);//生命周期设为1day
            cookie1.setMaxAge(60*60*24);
            resp.addCookie(cookie);
            resp.addCookie(cookie1);
            resp.sendRedirect("cookie_welcome.jsp");
        }else {
            resp.sendRedirect("cookie_login.jsp");
        }

    }
}
  • 界面展示

JavaWeb学习笔记(8)__Cookie篇_第2张图片

JavaWeb学习笔记(8)__Cookie篇_第3张图片

注: 从cookie数组获取信息时,每一次cookie的顺序不一定相同,即下一次有可能先显示 用户名,后显示 密码。

你可能感兴趣的:(JavaWeb开发基础,session,cookie,servlet,jsp)