当前位置: 首页 > news >正文

Cookie和Session的API、登录页面

目录

一、Cookie 和 Session

1、HttpServletRequest 类中的相关方法

2、HttpServletResponse 类中的相关方法

3、HttpSession 类中的相关方法

4、Cookie 类中的相关方法

二、网页登录

1、约定前后端交互接口

2、编写一个简单的登录页面

3、编写一个Servlet 来处理这个登录请求。

4、编写服务器端返回主页的逻辑

5、效果展示


一、Cookie 和 Session

        在请求响应(header)中介绍过。HTTP详细介绍

        在Servet 中,对于 Cookie 和 Session 都有很好的支持,因此就可以通过这些API来完成会话管理的操作。以下介绍几个核心方法。

1、HttpServletRequest 类中的相关方法

方法描述
HttpSession getSession()

在服务器中获取会话。

参数若为 true,则当不存在会话时新建会话

参数若为false,则当不存在会话时返回 null。

Cookie[] getCookies()

返回一个数组,包含客户端发送该请求的所有 Cookie 对象。

会自动把 Cookie 中的格式解析成键值对。

在调用 getSession 时具体做的事情:

(1)创建会话

        首先先获取到请求中 cookie 里面的 session 字段(相当于会话的身份标识),判定这个 session 是否在当前服务器上存在,如果不存在,则进入创建会话逻辑。

        创建会话,会创建一个 HttpSession 对象,并且生成一个 session(是一个很长的数字,通常用十六进制来表示,能够保证唯一性), 接下来就会把这个 session 作为 key,把这个 HttpSession 对象作为 value ,把这个键值对给保存到 服务器内存 的一个 “ 哈希表 ” 这样的结构中。(实际的实现不一定真是哈希表,但是一定是类似的能存储键值对的结构,并且这个数据是在内存中的)

(2)获取会话

        先获取到请求中的 cookie 里面的 session 字段(也就是会话的身份标识),判定这个 session 是否在当前服务器上存在(也就是在这个哈希表中是否有),如果有,就直接查询出这个 HttpSession 对象,并通过返回值返回。

getCookie

        返回值是一个 Cookie 类型的数组,每个元素是一个 Cookie 对象,每个 Cookie 对象有包含了两个属性 name 和 value 。(还是键值对)

        Http 请求中的 cookie 字段就是按键值对的方式在组织的,这里的键值对使用 来分割多个键值对,使用 = 来分割键和值。 这些键值对都会在请求中通过 cookie 字段传给服务器,服务器收到请求后,就会进行解析,解析成上述看到的 Cokkie[] 这样的形式。

2、HttpServletResponse 类中的相关方法

方法描述
void addCookie(Cookie cookie)把指定的 cookie 添加到响应中

响应中就可以根据这个 addCookie 这个方法,来添加一个 Cookie 信息到响应中。这里添加进来的键值对,就会作为 HTTP 响应中的 Set-Cookie 字段来表示。 

3、HttpSession 类中的相关方法

        一个 HttpSession 对象里包含多个键值对(key:String;value:Object),我们可以往 HttpSession 中存任何我们需要的信息。

方法描述
Object getAtttribute(String name)

该方法返回在该 session 会话中具有指定名称的对象。

如果没有指定名称的对象,则返回 null

(取键值对)

void setAttribute(String name, Object value)

该方法使用指定的名称绑定一个对象到该 session 对象

(存键值对)

boolean isNew()

判断当前是否是新创建出的会话

4、Cookie 类中的相关方法

        每个Cookie 对象就是一个键值对。

方法描述
String getName()

该方法返回 cookie 的名称。

名称在创建后不能改变(这个值是 Set-Cookie 字段设置给浏览器的)

String getValue()该方法获取与 cookie 关联的值
void setValue(String newValue)该方法设置与 cookie 关联的值

Cookie 这里是可以保存任意自定制的键值对的。

如果是一般的键值对,直接通过 getCookies 来获取。

如果是特殊的键值对(表示 session 的键值对),不需要使用 getCookies,直接使用 getSession 就自动帮我们从 Cookie 中取 session 了。

二、网页登录

        先创建 Servlet 项目,并创建好目录。

1、约定前后端交互接口

        有两组交互:登录,获取主页

登录的交互:

请求:

POST/login HTTP/1.1

Content-Type:application/x-www-form-urlencoded

username=zhangsan&password=123

响应:

HTTP/1.1 302

Location:index

获取主页的交互:

请求:

GET/index HTTP/1.1

响应:

HTTP/1.1 200 OK

Content-Type:text/html

[ body 中时一个简单的 html 片段,直接有浏览器进行展示] 

2、编写一个简单的登录页面

        使用 form 表达来构造post请求。

<!doctype html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport"content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>登录</title>
</head>
<body><form action="login" method="post"><input type="text" name="username"><input type="password" name="password"><input type="submit" value="登录"></form></body>
</html>

3、编写一个Servlet 来处理这个登录请求。

loginServlet.java:

处理第一个登录交互的请求。保证跳转到主页(index)的时候,服务器要能够获取到当前用户的身份信息,因此要创建好一个 Session 对象,并填入身份信息。

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;/*** Created with IntelliJ IDEA.* Description:实现登录页面* User: WangWZ* Date: 2023-05-05* Time: 15:57*/
@WebServlet("/login")
public class LoginServlet extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//处理用户请求String username = req.getParameter("username");String password = req.getParameter("password");//判定用户名和密码是否正确//正常来说这个判定操作是要放在数据库中进行存取的//此处为了简单,就直接在代码里写死了,假设有效的用户名和密码是:“zhangsan” 和 “123”if ("zhangsan".equals(username) && "123".equals(password)) {//登录成功!//创建会话,并保存必要的身份信息HttpSession httpSession = req.getSession(true);//往会话中存储键值对,必要的身份信息httpSession.setAttribute("username",username);httpSession.setAttribute("count",0);resp.sendRedirect("index");} else {//登录失败!resp.getWriter().Writer("登录失败!");}}
}

4、编写服务器端返回主页的逻辑

IndexServlet.java:

        第二次交互。

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;/*** Created with IntelliJ IDEA.* Description:* User: WangWZ* Date: 2023-05-05* Time: 17:25*/
@WebServlet("/index")
public class IndexServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//返回一个主页(主页就是一个简单的 html 片段)//此处需要得到用户名是啥,从 HttpSession 中就能拿到//此处的 getSession 的参数必须是 false,前面在登录的过程中,已经创建过会话了,此处要直接获取到之前的会话HttpSession session = req.getSession(false);String username = (String) session.getAttribute("username");Integer count = (Integer) session.getAttribute("count");count += 1;session.setAttribute("count",count);resp.setContentType("text/html;charset=utf8");resp.getWriter().write("<h3>欢迎你 " + username +"这是你访问的第 " + count + "次 </h3>");}
}

5、效果展示

点击页面刷新

第一次交互:

请求 

响应

第二次交互:

请求

响应

相关文章:

Cookie和Session的API、登录页面

目录 一、Cookie 和 Session 1、HttpServletRequest 类中的相关方法 2、HttpServletResponse 类中的相关方法 3、HttpSession 类中的相关方法 4、Cookie 类中的相关方法 二、网页登录 1、约定前后端交互接口 2、编写一个简单的登录页面 3、编写一个Servlet 来处理这个…...

C++数据结构:手撕红黑树

目录 一. 红黑树的概念及结构 二. 红黑树节点的定义 三. 红黑树节点的插入 3.1 初步查找插入节点的位置并插入节点 3.2 红黑树结构的调整 3.3 红黑树节点插入完整版代码 四. 红黑树的结构检查 4.1 检查是否为搜索树 4.2 检查节点颜色是否满足要求 附录&#xff1a;红黑…...

Spring IoC 深度学习

Io回顾 IoC 是 Inversion of Control 的简写&#xff0c;译为“控制反转”&#xff0c;它不是一门技术&#xff0c;而是一种设计思想&#xff0c;是一个重要的面向对象编程法则&#xff0c;能够指导我们如何设计出松耦合、更优良的程序。 Spring 通过 IoC 容器来管理所有 Jav…...

C语言从入门到精通第17天(指针和数组联用)

指针和数组联用 不同类型指针变量之间的区别数组的指针指针数组 不同类型指针变量之间的区别 在了解数组和指针联用之前&#xff0c;我们先对指针变量进行补充。我们对比一下int *p1和char *p2的区别&#xff1f; 相同点&#xff1a; 都是指针变量都是用来保存一个内存地址编…...

Android9.0 原生系统SystemUI下拉状态栏和通知栏视图之锁屏通知布局

1.前言 在9.0的系统rom定制化开发中,对于系统原生systemui的锁屏界面的功能也是非常重要的,所以在锁屏页面布局中,也是有通知栏布局的,所以接下来对于息屏亮屏 通知栏布局的相关流程分析,看下亮屏后锁屏页面做了哪些功能 2.原生系统SystemUI下拉状态栏和通知栏视图之锁…...

音视频八股文(10)-- mp4结构

介绍 mp4⽂件格式⼜被称为MPEG-4 Part 14&#xff0c;出⾃MPEG-4标准第14部分 。它是⼀种多媒体格式容器&#xff0c;⼴泛⽤于包装视频和⾳频数据流、海报、字幕和元数据等。&#xff08;顺便⼀提&#xff0c;⽬前流⾏的视频编码格式AVC/H264 定义在MPEG-4 Part 10&#xff09…...

python算法中的深度学习算法之深度信念网络(详解)

目录 学习目标: 学习内容: 深度信念网络 Ⅰ. 预训练 Ⅱ. 微调 学习目标: 一分钟掌握 python算法中的深度学习算法之深度信念网络 入门知识...

SPSS如何绘制常用统计图之案例实训?

文章目录 0.引言1.绘制简单条形图2.绘制分类条形图3.绘制分段条形图4.绘制简单线图5.绘制多重线图6.绘制垂直线图7.绘制简单面积图8.绘制堆积面积图9.绘制饼图10.绘制直方图11.绘制简单散点图12.绘制重叠散点图13.绘制矩阵散点图14.绘制三维散点图15.绘制简单箱图16.绘制分类箱…...

打动人心的故事 | 如何利用文案在Facebook上塑造品牌形象

在当今的数字营销时代&#xff0c;文案已经成为各大平台上不可或缺的元素之一。在Facebook上&#xff0c;一个好的文案能够为品牌带来巨大的曝光率和用户黏性&#xff0c;甚至可以改变用户对品牌的看法。那么&#xff0c;如何利用文案在Facebook上打动人心&#xff0c;塑造品牌…...

什么是模糊控制?

模糊控制设计原理 1、传统控制系统和模糊控制系统 传统控制系统结构&#xff1a; 控制目的&#xff1a;通过控制器调节控制信号u&#xff0c;使输出信号y达到要求 模糊控制系统结构&#xff1a; 与传统控制系统的差异&#xff1a;用模糊控制器FC&#xff08;Fuzzy Controller&…...

仿抖音开发需要注意的问题

一、版权问题 仿抖音开发需要注意版权问题&#xff0c;包括内容的版权和软件的版权。在开发的过程中&#xff0c;不要直接抄袭他人的作品&#xff0c;应该注重保护知识产权。 二、安全性问题 仿抖音开发需要重视应用的安全性问题&#xff0c;避免应用在使用过程中发生安全漏…...

如何根据期刊缩写查找期刊?

英文论文写作中&#xff0c;经常会插入参考文献。参考文献中的期刊名称&#xff0c;时常需要使用缩写。或者是手头有期刊缩写后的名称&#xff0c;但是有时候&#xff0c;查了半天也查不到期刊期刊全称&#xff0c;费时费力让人崩溃。今天就给各位学者老师总结一些查询期刊缩写…...

数据发送流程

在发送模式下&#xff0c;UART 的串行数据发送电路主要包括一个发送移位寄存器(TSR)&#xff0c;TSR 功能是将数据 逐个移位送出。待发数据必须先写到发送缓冲区中。 TXIFx 是发送中断标志位&#xff0c;可配置为发送缓冲区空或TSR 空。 数据的发送支持7bit 、8bit 或9bit 数据…...

堆及其应用

堆是一种基于树结构的数据结构&#xff0c;通常用于实现优先队列。堆分为最大堆和最小堆两种类型&#xff0c;最大堆的每个节点的值都大于等于其子节点的值&#xff0c;最小堆则相反&#xff0c;每个节点的值都小于等于其子节点的值。 基础算法操作包括&#xff1a; 1. 插入元…...

MySQL数据库备份脚本

PS&#xff1a;此脚本简单易懂&#xff0c;根据实际情况修改个别参数测试后即可使用&#xff0c;如有错误请指出&#xff01; 1.MySQL数据库备份脚本 #!/bin/bashuser pw ip dateYdate "%Y" date2date "%Y%m%d" date3date "%Y%m%d %H:%M" date…...

【2023 · CANN训练营第一季】应用开发深入讲解——第三章应用调试

学习资源 日志参考文档 应用开发FAQ 日志主要用于记录系统的运行过程及异常信息&#xff0c;帮助快速定位系统运行过程中出现的问题以及开发过程中的程序调试问题。 日志分为如下两大类&#xff1a; 系统类日志&#xff1a;系统运行产生的日志。主要包括&#xff1a; Contro…...

黎曼几何与黎曼流形

目录 0.黎曼几何 1. 欧几里得几何与黎曼几何的区别 2.黎曼流形 3.黎曼距离 4.切空间 5.黎曼均值 6. SPD矩阵如何形成黎曼流型 7.切线空间映射 8.同余变换和同余不变 9.黎曼对齐 科普性笔记&#xff0c;做了解&#xff0c;不深入。 0.黎曼几何 黎曼几何是一种基于欧几…...

lua | 运算符与字符串

目录 一、运算符 算数运算符 关系运算符 逻辑运算符 其他运算符 运算符优先级 二、字符串 转义字符 方法与用途 字符串截取 字符串大小转换 字符串查找与反转 字符串格式化 字符与整数的转换 匹配模式 本文章为笔者学习分享 学习网站&#xff1a;Lua 基本语法 | …...

NetBackup 10.2 新功能介绍:PostgreSQL 和 MySQL 自动化恢复达成

NetBackup 10.2 新功能介绍&#xff1a;PostgreSQL 和 MySQL 自动化恢复达成 原文来自&#xff1a;VERITAS 中文社区 2023-04-27 在执行恢复任务时&#xff0c;手动提取、更新数据库和实例并将其附加到 PostgreSQL 和 MySQL 是常规操作。而在最新的 NetBackup 10.2 版本中&am…...

ADRV9002官方例程开发过程中遇到的问题

开发环境&#xff1a;Vivado2021.2 HDL版本&#xff1a;hdl_2021_r2 GitHub - analogdevicesinc/hdl at hdl_2021_r2 no-OS版本&#xff1a;no_OS-2021_R2 GitHub - analogdevicesinc/no-OS at 2021_R2 &#xff08;PS&#xff1a;也可以用Vivado2019.1开发&#xff0c…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式&#xff0c;避免服务器受到各种恶意攻击和网络威胁&#xff0c;那么&#xff0c;服务器硬防通常都会应用在哪些场景当中呢&#xff1f; 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言&#xff1a; 最近在做行为检测相关的模型&#xff0c;用的是时空图卷积网络&#xff08;STGCN&#xff09;&#xff0c;但原有kinetic-400数据集数据质量较低&#xff0c;需要进行细粒度的标注&#xff0c;同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

iview框架主题色的应用

1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题&#xff0c;无需引入&#xff0c;直接可…...