Servlet笔记(9):Cookie处理

news2024/10/3 0:26:24

一、Cookies处理
1、Cookies概念
Cookies是存储在客户端计算机上的文本文件,并保留各种跟踪信息。

识别返回用户的三个步骤

  • 服务器脚本向浏览器发送一组Cookies。例如姓名、年龄或识别号码等。
  • 浏览器将这些信息存储在本地计算机上。
  • 当下一次浏览器向Web服务器发送任何请求时,浏览器会把这些Cookies信息发送到服务器,服务器将使用这些来识别用户。

中文的编码与解码

String str = java.net.URLEncoder.encode("中文");            //编码
String str = java.net.URLDecoder.decode("编码后的字符串");   // 解码

2、Cookies 剖析
Set-Cookie头包含一个键值对、一个有效期【expires】、一个路径【文件路径】和一个域【主机地址】

获取Cookies

Cookie[] HttpServletRequest.getCookies();

3、Cookies操作方法

序号方法 & 描述
1public void setDomain(String pattern)
该方法设置 cookie 适用的域,例如 w3cschool.cn。
2public String getDomain()
该方法获取 cookie 适用的域,例如 w3cschool.cn。
3public void setMaxAge(int expiry)
该方法设置 cookie 过期的时间(以秒为单位)。如果不这样设置,cookie 只会在当前 session 会话中持续有效。
4public int getMaxAge()
该方法返回 cookie 的最大生存周期(以秒为单位),默认情况下,-1 表示 cookie 将持续下去,直到浏览器关闭。
5public String getName()
该方法返回 cookie 的名称。名称在创建后不能改变。
6public void setValue(String newValue)
该方法设置与 cookie 关联的值。
7public String getValue()
该方法获取与 cookie 关联的值。
8public void setPath(String uri)
该方法设置 cookie 适用的路径。如果您不指定路径,与当前页面相同目录下的(包括子目录下的)所有 URL 都会返回 cookie。
9public String getPath()
该方法获取 cookie 适用的路径。
10public void setSecure(boolean flag)
该方法设置布尔值,表示 cookie 是否应该只在加密的(即 SSL)连接上发送。
11public void setComment(String purpose)
该方法规定了描述 cookie 目的的注释。该注释在浏览器向用户呈现 cookie 时非常有用。
12public String getComment()
该方法返回了描述 cookie 目的的注释,如果 cookie 没有注释则返回 null。

4、设置Cookies的步骤
(1) 创建Cookie对象

Cookie cookie = new Cookie("key","value");

key与value不能包含以下字符

[ ] ( ) = , " / ? @ : ;

(2)设置最大生存周期
使用 setMaxAge 方法来指定 cookie 能够保持有效的时间(以秒为单位)。

cookie.setMaxAge(60*60*24);

(3)发送Cookie到HTTP响应头

response.addCookie(cookie);

5、Cookie实例

HelloForm.java

/**
 * 包名:SelectTest
 * 作者:章恩光
 * 时间:2023/2/24 1:38 周五
 */

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;
import java.io.PrintWriter;

public class HelloForm extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Cookie firstName = new Cookie("first_name",req.getParameter("first_name"));
        Cookie lastName = new Cookie("last_name",req.getParameter("last_name"));

        firstName.setMaxAge(60*60*24);
        lastName.setMaxAge(60*60*24);

        resp.addCookie(firstName);
        resp.addCookie(lastName);

        resp.setContentType("text/html;charset=UTF-8");
        PrintWriter out = resp.getWriter();
        String title = "设置 Cookies 实例";
        String docType =
                "<!doctype html public \"-//w3c//dtd html 4.0 " +       "transitional//en\">\n";
        out.println(docType +
                "<html>\n" +
                "<head><title>" + title + "</title></head>\n" +
                "<body bgcolor=\"#f0f0f0\">\n" +
                "<h1 align=\"center\">" + title + "</h1>\n" +
                "<ul>\n" +
                "  <li><b>名字</b>:"
                + req.getParameter("first_name") + "\n" +
                "  <li><b>姓氏</b>:"
                + req.getParameter("last_name") + "\n" +
                "</ul>\n" +
                "</body></html>");
    }
}

ReadForm.java

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 java.io.IOException;
import java.io.PrintWriter;

/**
 * 包名:SelectTest
 * 作者:章恩光
 * 时间:2023/2/24 19:11 周五
 */
public class ReadForm extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Cookie cookie = null;
        Cookie[] cookies = null;

        cookies = req.getCookies();

        resp.setContentType("text/html;charset=UTF-8");

        PrintWriter out = resp.getWriter();
        String title = "Reading Cookies Example";
        String docType ="<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//zh\">\n";
        out.println(docType +
                "<html>\n" +
                "<head><title>" + title + "</title></head>\n" +
                "<body bgcolor=\"#f0f0f0\">\n" );
        if( cookies != null ) {
            out.println("<h2>查找 Cookies 名称和值</h2>");
            for (int i = 0; i < cookies.length; i++){
                cookie = cookies[i];
                out.print("名称:" + cookie.getName() + ",");
                out.print("值:" + cookie.getValue()+" <br/>");
            }
        } else {
            out.println(
                    "<h2 class=\"tutheader\">未找到 Cookies</h2>");
        }
        out.println("</body>");
        out.println("</html>");
    }
}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <servlet>
        <servlet-name>HelloForm</servlet-name>
        <servlet-class>HelloForm</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>HelloForm</servlet-name>
        <url-pattern>/HelloForm</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>ReadForm</servlet-name>
        <servlet-class>ReadForm</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>ReadForm</servlet-name>
        <url-pattern>/ReadForm</url-pattern>
    </servlet-mapping>
</web-app>

效果图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6、删除Cookies
步骤:

  • 读取现有cookie,并创建Cookie对象
  • 使用setMaxAge()方法设置cookie周期为0
  • 添加cookie添加到响应头

实例:

// 导入必需的 java 库
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

// 扩展 HttpServlet 类
public class DeleteCookies extends HttpServlet {

  public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      Cookie cookie = null;
      Cookie[] cookies = null;
      // 获取与该域相关的 Cookies 的数组
      cookies = request.getCookies();
      
      // 设置响应内容类型
      response.setContentType("text/html");
 
      PrintWriter out = response.getWriter();
      String title = "Delete Cookies Example";
      String docType = "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
      out.println(docType +
              "<html>\n" +
              "<head><title>" + title + "</title></head>\n" +
              "<body bgcolor=\"#f0f0f0\">\n" );
      if( cookies != null ){
          out.println("<h2>Cookies 名称和值</h2>");
          for (int i = 0; i < cookies.length; i++){
              cookie = cookies[i];
              //会话中。firstname不一致时删除cookie,并添加删除的cookie到响应头,以修改浏览器中的cookie状态
              if((cookie.getName()).compareTo("first_name") == 0 ){
                  cookie.setMaxAge(0);
                  response.addCookie(cookie);
                  out.print("已删除的 cookie:" + cookie.getName() + "<br/>");
              }
          out.print("名称:" + cookie.getName() + ",");
          out.print("值:" + cookie.getValue()+" <br/>");
          }
      }else{
          out.println(
              "<h2 class="tutheader">No cookies founds</h2>");
      }
      out.println("</body>");
      out.println("</html>");
   }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/369641.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SSM+HTML搭建(小白教学)

最近做项目,觉得还是有意义记录以下前后端框架是怎么搭建的,今天给大家介绍介绍SSM:SpringBootSpringMVCMyBatis后端搭建:SpringBoot快速搭建的网站(Spring Initializr)选择创建之后,会下载到一个zip压缩包,对压缩包进行解压(包地址一般选择后端项目的放的文件夹中)用idea打开项…

每日学术速递2.24

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.LG 1.BUAA_BIGSCity: Spatial-Temporal Graph Neural Network for Wind Power Forecasting in Baidu KDD CUP 2022 标题&#xff1a;BUAA_BIGSCity&#xff1a;百度KDD CUP 2022风电预测…

警惕!黑客正疯狂实施网络攻击,网站该如何防范?

自2021年以来&#xff0c;ATW组织宣称披露涉我国重要信息系统源代码、数据库等敏感信息70余次&#xff0c;涉及国家重要政府部门、航空、基础设施等100余家单位的300余个信息系统&#xff0c;尤其2022年以来&#xff0c;ATW组织滋扰势头加剧&#xff0c;持续对中国的网络目标实…

数据结构预算法之买股票最好时机动态规划(可买卖多次)

一.题目二.思路在动规五部曲中&#xff0c;这个区别主要是体现在递推公式上&#xff0c;其他都和上一篇文章思路是一样的。所以我们重点讲一讲递推公式。这里重申一下dp数组的含义&#xff1a;dp[i][0] 表示第i天持有股票所得现金。dp[i][1] 表示第i天不持有股票所得最多现金如…

【Http1.0和Http1.1的区别?Http1.1和Http2.0的区别?】

计算机网络面试的相关知识你可不能不知道呀&#xff01;Http1.0和Http1.1的区别&#xff1f;Http1.1和Http2.0的区别&#xff1f; Http1.0和Http1.1的区别&#xff1f; 连接方式 : HTTP 1.0 为短连接&#xff0c;HTTP 1.1 支持长连接。状态响应码 : HTTP/1.1中新加入了大量的状…

小型水库大坝安全监测的主要对象

一、监测背景 大坝监测的目的分成两个大的方面&#xff0c;一方面是为了验证设计、指导施工、为科研提供必要的资料&#xff1b;另一方面&#xff0c;也可以说是更重要的方面&#xff0c;就是为了长期监视大坝的安全运行。因此&#xff0c;一个成功的监测设计者不仅要能充分领会…

Vmware 虚拟机无法联通主机

问题描述&#xff1a;今天使用Vmware Workstation 创建CentOS-7 虚拟机&#xff0c;基于CentOS-7 搭建Hadoop3 伪分布式版本&#xff0c;CentOS-7 测试Hadoop 3 服务正常启动&#xff0c;通过主机连接Hadoop 3的管理平台&#xff0c;提示如下错误信息&#xff1a;尝试解决办法&…

Android---Handler 源码解析

在 android 开发中&#xff0c;经常会在子线程中进行一些操作&#xff0c;当操作完后会通过 handler 发送一些数据给主线程&#xff0c;通知主线程做响应的操作。原理&#xff1a;子线程 handler 主线程&#xff0c;其实构成了线程模型中的经典问题&#xff0c;生产者-消费者模…

HHDESK文本对比功能

对比文件夹和图片而言&#xff0c;文本的更改更加频繁且琐碎&#xff1b;个别词语的更改更是让人“健忘”。 如果有一款工具能够直观的对文本进行对比&#xff0c;并且清晰的划分显示&#xff0c;那么便可以大量节约办公人员的精力和时间。 1 文本对比功能简介 版本更新&…

Ubuntu20.04配置深度学习环境

Ubuntu20.04配置深度学习环境 对于一台新Ubuntu20.04主机&#xff0c;想要直接进行深度学习模型的训练&#xff0c;需要进行一些常规配置。本文针对的情况包括物理机和虚拟机。安装部分本文不介绍&#xff0c;只介绍配置环境部分。 1. 安装中文输入法 参考如下博客&#xff…

Web安全最详细学习路线指南,从入门到入职(含书籍、工具包)

在这个圈子技术门类中&#xff0c;工作岗位主要有以下三个方向&#xff1a; 安全研发 安全研究&#xff1a;二进制方向 安全研究&#xff1a;网络渗透方向 下面逐一说明一下. 第一个方向&#xff1a;安全研发 你可以把网络安全理解成电商行业、教育行业等其他行业一样&#x…

《卓有成效的管理者》系列-总结篇

作者【美】彼得-德鲁克简介书中提到&#xff0c;每一位知识工作者其实都是管理者&#xff0c;而且卓有成效是每个管理者必须做到的事。书中认为所有负责行动和决策而且能够提高机构工作效率的人&#xff0c;都应该像管理者一样工作和思考。而且&#xff0c;一位卓有成效的管理者…

自考都有哪些科目?怎么搭配报考?

第一次自考科目搭配 先报理论课&#xff0c;熟悉学习和考试套路 参考搭配模式&#xff1a; 一、全报考公共课 公共课难度较低&#xff0c;通过率高&#xff0c;复习起来比较轻松。对于不确定考什么专业&#xff0c;后期想换专业的同学&#xff0c;考过公共课&#xff0c…

记一次Binder内存不足导致的应用被杀

每个进程的可用Binder内存大小是 1M-8KB 也就是900多KB 事情的起因的QA压测过程发生进程号变更&#xff0c;怀疑APP被杀掉过&#xff0c;于是开始看日志&#xff08;实际后来模拟的时候可以发现app确实被杀掉了&#xff09; APP的压测平台会上报进程号变更时间点&#xff0c;发…

基于C++环境的gRPC安装配置:vcpkg+CMake+VS2022

前言gRPC 是 Google 提供的一个 RPC 框架&#xff0c;用于在网络上实现多个应用程序之间的通信。gRPC的优点是支持多种语言&#xff0c;因此可以轻松使用C应用程序与Go或Python应用程序进行通信。尽管CSDN、知乎有很多讲解gRPC在C环境安装的文章&#xff0c;其中最常见的是使用…

LaneAF论文解读和代码讲解

论文地址&#xff1a;https://arxiv.org/abs/2103.12040 一、论文简介 LaneAF是一个语义分割聚类后处理的一种方法。相对于之前的用聚类算法对embedding分支聚类的方法&#xff0c;该论文提出了水平和垂直两个向量场&#xff0c;用来取缔之前的普通聚类。根据向量场就可以完成…

HashMap红黑树源码解读

链表转换为红黑树节点当往hashMap中添加元素&#xff0c;在同一个hash槽位挂载的元素超过8个后&#xff0c;执行treeifyBin方法。在treeifyBin方法中&#xff0c;只有当tab数组&#xff08;hash槽位&#xff09;的长度不小于MIN_TREEIFY_CAPACITY&#xff08;默认64&#xff09…

modbus协议

1 MODBUS 应用层报文传输协议 ADU应用数据单元PDU协议数据单元MBMODBUS协议MBAPMODBUS协议 ADU&#xff1a;地址域 PDU 差错校验PDU&#xff1a;功能码数据 串行链路&#xff1a; 最大RS485 ADU 256 字节PDU 256 - 服务器地址&#xff08;1字节&#xff09;- CRC&#xf…

Linux学习(7)文件权限与目录配置

目录 1. 使用者与群组 1&#xff0c;文件拥有者 2&#xff0c;群组概念 3&#xff0c;其他人 Linux 用户身份与群组记录的文件 2.Linux 文件权限概念 Linux的文件属性 第一栏代表这个文件的类型与权限(permission)&#xff1a; 第二栏表示有多少档名连结到此节点(i-no…

linux CUDAtoolkit+cudnn+tensorrt 的安装

windows上 CUDAtoolkitcudnn的安装 CUDAtoolkitcudnn的安装 须知 use command ubuntu-drivers devices查看你的显卡类型和推荐的驱动版本百度 nvidia-driver-*** 支持的 cuda 或 去文档查找驱动(比如450&#xff0c;460)匹配的cuda版本 下载 网盘下载 https://www.aliyundr…