【JavaEE】Cookie 和 Session

news2024/11/19 21:24:52

努力经营当下,直至未来明朗!

文章目录

  • 【Cookie和Session】
  • 相关方法
    • 1. HttpServletRequest类的相关方法
    • 2. HttpServletRespon类的相关方法
    • 3. HttpSession类中相关的方法:
    • 4. Cookie类中相关的方法:
  • 写一个模拟登录的案例
  • 上传文件
  • Servlet相关代码
    • pom.xml
    • web.xml
  • 小结


坚持一定很酷!

【Cookie和Session】

  1. Cookie是浏览器在本地持久化保存数据的一种方案。

  2. Cookie一个典型的使用方式就是存储登录信息。

  3. 流程
    60

  4. Cookie在浏览器中工作,Session是在服务器这边工作的。

  5. Cookie 和 Session 的区别:

① Cookie 是客户端的机制,Session 是服务器端的机制.。
② Cookie 和 Session 经常会在一起配合使用,但是不是必须配合。

  • 完全可以用 Cookie 来保存一些数据在客户端,这些数据不一定是用户身份信息,也不一定是token / sessionId
  • Session 中的 token / sessionId 也不需要非得通过 Cookie / Set-Cookie 传递.

相关方法

在Servlet中也提供了相关的API让我们来操作Cookie和Session,以下介绍核心方法:

1. HttpServletRequest类的相关方法

HttpServletRequest类的相关方法:
70
① HttpSession getSession(参数);

① 如果参数为false,判定当前会话是否存在,如果不存在直接返回null;存在则返回对应的HttpSession对象。
② 如果参数为true,判定当前会话是否存在,如果不存在就创建一个新的键值对并保存到哈希表中,然后把生成的sessionId(身份标识)返回到浏览器这里;存在则返回对应的HttpSession对象。

② getCookies(); 直接把请求中的Cookie都获取到,Cookie本身也是键值对结构,可以通过getName()、getValue()来获取。请求里的Cookie可能有多组键值对,直接使用Cookie类型的数组表示。

2. HttpServletRespon类的相关方法

HttpServletRespon类的相关方法:
61

① addCookie(); 返回响应,你想给浏览器返回哪些cookie都可以通过该方法进行添加。
(可以手动构造cookie对象,需要name、value)
② 在这里添加的键值对都会体现在HTTP响应报文的SetCookie字段上。

3. HttpSession类中相关的方法:

  1. HttpSession类中相关的方法:
    62
    getAttribute、setAttribute都是键值对。

  2. HTTP这块所涉及到的键值对:

① query string
② 请求/响应中的header
③ Cookie里的内容
④ form表单里提交的body
⑤ json格式的body
⑥ 服务器存储若干个sessionId和HttpSession对象
⑦每个HttpSession对象本身里面又可以保存多个键值对,方便程序员自定义存储的数据。

4. Cookie类中相关的方法:

Cookie类中相关的方法:
63
Name不可以改,但Value可以改。


写一个模拟登录的案例

  1. 登录页面:用户可以填写用户名+密码
  2. Servlet来处理登录请求
  3. 使用另一个Servlet来生成主要内容(登录成功后跳转到的页面)

65
66

  • 这里的用户点击提交的时候,就会把input框里的name作为key,把input框里用户的输入作为value,然后把这个键值对放到body中提交给服务器
  • 此处的name属性决定了键值对的键,也就决定了服务器这边的getParameter怎么写。

67

提交form必须得有一个submit这样的标签。

  1. userName.equals(“xxx”); 这样写如果在userName是null的时候会触发空指针异常;所以一般写为”xxx”.equals(userName);的形式,”xxx”是字符串常量,肯定不会出现空指针异常。(equals在方法内部对参数null单独进行处理了)

  2. 如果后期我们需要调用同事写的方法时,一般是自己判空+提醒同事判空 =》 double check

  3. 响应中的Set-Cookie:通过getSession操作创建会话的同时生成sessionId,并且把这个sessionId通过set-Cookie返回给浏览器,浏览器收到的请求中就会带有Cookie,其存储的就是sessionId。(每个sessionId都是不同的)
    70
    71

  4. 如果想要让响应跳转到某个页面,得使用sendRedirect重定向报文。

  5. SetAttribute方法根据需求想存啥就存啥。

  6. 会话默认是保存在内存中的,一重启服务器就会重置数据。
    10.参考代码:登录+跳转


上传文件

  1. 前端搭配form表单。form中: input type=”file” ,允许通过浏览器选中一个文件上传给服务器。
  2. Servlet就支持处理这种上传文件的请求,把这个请求到的文件在后端进行获取。
  3. HttpServletRequest 类方法:
    72

① Part getPart(String name) ; 参数name就是input标签中的name属性(和getParameter类似)
② Part表示一个文件。一次上传可以包含多个文件(可以有多个input type=”file”),每个文件都是一个Part对象。

  1. Part类方法:
    77

  2. 注:下载文件的话就只要将返回的Content-Type设置为一些类型就行,如zip。

  3. 写一个实例:upload.html

上传文件方法必须是post!
80

① 通过form表单的方式上传文件,务必使用post方法。
② Enctype:按照特定的body格式来构造请求。
81
82
参考代码:上传文件

  1. 各大网站中,比如上传个简历、图片等都是类似的操作。

  2. 在请求中会有:
    83

① Content-Type: multipart/form-data; 使用form上传图片专属类型。
② boundary=----WebKitFormBoundaryXpoLUU0oPzGr2Shp
边界:后面是浏览器随机生成的字符串,在body的始末位置会出现,作为分隔符使用。


Servlet相关代码

pom.xml

具体的依赖可以修改

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>MessageWall</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>
        <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.13.4.2</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.49</version>
        </dependency>


    </dependencies>

</project>

web.xml

  1. 目录结构:
    1

  2. 代码:

<!DOCTYPE web-app PUBLIC
        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
    <display-name>Archetype Created Web Application</display-name>
</web-app>

小结

  1. Cookie和Session的相关方法
  2. Cookie和Session的流程
  3. 模拟登录(页面跳转)
  4. 上传文件
  5. Servlet相关代码片段

yyy

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

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

相关文章

开源工具系列1:Cloud Custodian

对云安全的检测中&#xff0c;最重要的一个组成部分就是对配置的验证&#xff0c;今天来介绍一个开源的规则检测引擎项目&#xff0c;Cloud Custodian。 一、Cloud Custodian 是什么 Cloud Custodian 是用于管理公有云帐户和资源的规则引擎。规则策略用简单的 YAML 格式&#x…

【TypeScript】class类型讲解

目录 class类型 构造函数 class类的继承 可见修饰符 只读修饰符 class类型 TypeScript支持ES引入的class关键字&#xff0c;并为其添加了类型注解和其他语法(例如&#xff1a;可见性修饰符)。 class person {// 声明初始值&#xff0c;可省略类型注解(TS类型推论为strin…

艾美捷超氧化物歧化酶检测试剂盒,活性检测说明

细胞和细胞外环境中大量的超氧化物歧化酶&#xff08;SOD&#xff09;对于预防与氧化应激相关的疾病至关重要。SOD突变约占家族性肌萎缩侧索硬化症&#xff08;ALS&#xff09;病例的20%。SOD在预防其他神经退行性疾病&#xff08;如阿尔茨海默氏症、帕金森氏症和亨廷顿舞蹈症&…

美丽田园ipo上市,它的底气从何而来?

美丽田园医疗健康产业有限公司(简称美丽田园)&#xff0c;中国最大的传统美容服务提供商&#xff0c;成立近三十年来&#xff0c;一直致力于美与健康的发展&#xff0c;坚持系统化标准化管理和美与健康一站式服务&#xff0c;为顾客提供舒适的美与健康新体验。近日&#xff0c;…

Matter理论介绍-通用-1-04:桥接器-其他功能

【源码、文档、软件、硬件、技术交流、技术支持&#xff0c;入口见文末】 【所有相关IDE、SDK和例程源码均可从群文件免费获取&#xff0c;免安装&#xff0c;解压即用】 持续更新中&#xff0c;欢迎关注&#xff01; 一、桥接器的配置流程 我们已经知道&#xff0c;桥接器和…

【QT】PySide6安装与运用

一、什么是PyQt 简单来说&#xff0c;PyQt就是用Python重构的Qt&#xff0c;一个强大的&#xff0c;创建跨平台GUI(Graphical User Interface)的工具包。开发者为Phil Thompson。 二、PySide与PyQt PyQt和PySide都是基于Python语言对Qt的实现&#xff0c;PyQt的推出时间要比…

paddle nlp taskflow 全家桶 包括代码生成与AIGC图片生成 一起探索paddle nlp 开包即用的能力吧

paddle nlp作为自然语言处理领域的全家桶&#xff0c;具有很多的不错的开箱即用的nlp能力。今天我们来一起看看基于paddle nlp中taskflow开箱即用的能力有哪些。 第一步先升级aistudio中的paddlenlp 保持最新版本。 pip install -U paddlenlpLooking in indexes: https://pypi…

ERP外网访问,快解析助力企业远程办公

ERP系统是现代信息技术和先进管理经验的有效结合&#xff0c;实现对企业经营活动的自动、完整的记录&#xff0c;替代重复劳动&#xff0c;对企业人力资源、物流、资金流、票据流和信息流等的科学管理&#xff0c;实现业务管理数据和财务数据高度统一&#xff0c;实现对企业业务…

论文导读 | 正则路径查询

前言 正则路径查询&#xff08;Regular Path Query, RPQ&#xff09;为带标签的图数据上重要的查询类型之一&#xff0c;旨在找出由至少一条满足条件的路径相连接的结点对&#xff0c;其中需满足的条件以正则表达式表达。当前对 RPQ 的研究以提升查询效率为目的&#xff0c;主…

php项目管理系统 。集产品管理、项目管理、质量管理、文档管理、 组织管理和事务管理于一体,是一款专业的研发项目管理软件

介绍 一款国产的项目管理软件。它集产品管理、项目管理、质量管理、文档管理、 组织管理和事务管理于一体&#xff0c;是一款专业的研发项目管理软件&#xff0c;完整地覆盖了项目管理的核心流程。 管理思想注重实效&#xff0c;功能完备丰富&#xff0c;操作简洁高效&#x…

【Python】基础知识(列表,元组)

目录列表和元组列表创建列表访问下标切片操作遍历列表元素新增元素查找元素删除元素连接列表元组写在前面&#x1f34e;&#xff1a;码字不易&#xff0c;如果对你有帮助的话&#xff0c;给个三连或者关注一下吧&#x1f370;&#xff0c;感谢支持&#xff01;&#x1f4e3;列表…

操作手册(GB8567——88)基于协同的在线表格forture-sheet

操作手册&#xff08;GB8567——88&#xff09; 1引言 1.1编写目的 为了帮助用户更好的上手本系统&#xff0c;加快用户对forture-sheet在线表格的快速入门&#xff0c;本操作手册详细介绍使用forture-sheet的部分基础操作以及注意细节。 1.2前景 待开发系统的名称&#x…

Docker+Jenkins+Gitee+Maven构建后台jar包后通过命令备份、替换、重启docker-compose编排的java服务

场景 docker-compose入门以及部署SpringBootVueRedisMysql(前后端分离项目)以若依前后端分离版为例&#xff1a; docker-compose入门以及部署SpringBootVueRedisMysql(前后端分离项目)以若依前后端分离版为例_霸道流氓气质的博客-CSDN博客 在上面使用docker-compose编排的ja…

Keil uVision5软件的操作与编写基础(入门)

目录 &#x1f46c;一、如何新建一个空白文档 &#x1f46c;二、程序编写 &#x1f46c;三、编译程序 Keil uVision5是一款编写单片机程序的必备软件。其图标为&#xff1a; 一、如何新建一个空白文档 1.打开Keil uVision5&#xff0c;将会出现工作界面。如图所示&#xff1a;…

Android .obb 详解

1.简介 在Android APP Bundle(aab)之前&#xff0c;上架Google Play 项目都是打包成APK上传&#xff0c;但是Google 对 APK大小是有限制的&#xff0c;刚开始是50M,后来扩展到100M,但是有些APK资源比较多&#xff0c;可能会大于100M, 基于这种情况&#xff0c;Google 允许上传…

音频怎么转换成文字?推荐这几个转文字的方法给你

在平时的工作中大家通常会先利用录音工具将会议内容录制下来&#xff0c;结束以后再根据录音来整理会议纪要&#xff0c;但一边听音频一边整理的操作既麻烦又费时间&#xff0c;还有可能会因为讲述的人语速快&#xff0c;而漏掉一些内容&#xff0c;从而导致效率不高&#xff0…

上海、广州、北京德国签证申请中心即将重新启动

德国签证中心关闭2年后&#xff0c;近日传来了好消息&#xff0c;上海、广州、北京德国签证申请中心即将重新启动&#xff0c;知识人网小编根据德国驻华领馆公布的信息整理并解读相关签证情况。 目前中国公民办理赴德签证&#xff0c;可以通过两种方式进行申请&#xff1a; 1.…

算法学习指南:什么是算法?

解释算法的实现逻辑就像讲故事一样。算法会在普通的解决方案中引入新颖的思路或进行某种创新。在本文中&#xff0c;我们将讨论一个简单问题的几个解决方案&#xff0c;解释影响算法性能的一些因素。在这个过程中&#xff0c;我将介绍一些用于分析算法性能的技巧。这些技巧与算…

Spring data JPA--02

Spring data JPA spirng data jpa是spring提供的一套简化JPA开发的框架&#xff0c;按照约定好的规则进行**【方法命名】去写dao层接口&#xff0c;就可以在不写接口实现的情况下&#xff0c;实现对数据库的访问和操作。同时提供了很多除了CRUD之外的功能&#xff0c;如分页、…

Kubectl 使用详解——k8s陈述式资源管理

目录 一、kubectl 简介 二、kubectl 的使用 1.基础用法 &#xff08;1&#xff09;配置kubectl自动补全 &#xff08;2&#xff09;查看版本信息 &#xff08;3&#xff09;查看资源对象信息 &#xff08;4&#xff09;查看集群信息 &#xff08;5&#xff09;查看日…