web路径专题+会话技术

news2025/5/16 11:09:02

目录

    • 自定义快捷键
  • 1. 工程路径问题及解决方案
    • 1.1 相对路径
    • 1.2 相对路径缺点
    • 1.3 base标签
    • 1.4 作业1
    • 1.5 作业2
    • 1.6注意细节
    • 1.7 重定向作业
    • 1.8 web工程路径优化
  • 2. Cookie技术
    • 2.1 Cookie简单示意图
    • 2.2 Cookie常用方法
    • 2.2 Cookie创建
    • 2.3 Cookie读取
      • 2.3.1 JSESSIONID
      • 2.3.2 读取指定Cookie
    • 2.4 Cookie修改
    • 2.5 Cookie生命周期
    • 2.6 Cookie的有效路径
    • 2.7 Cookie作业布置
    • 2.8 Cookie注意事项
      • 2.8.1 Cookie中文乱码问题
  • 3. Session技术
    • 3.1 Session原理示意图
    • 3.2 Session常用方法
    • 3.2 Session底层机制
    • 3.3 Session生命周期
      • 3.3.1 Session生命周期说明
      • 3.3.2 Session生命周期实例
    • 3.4 Session作业

自定义快捷键

自定义idea快捷键

  1. 首先找到你想做的快捷键的位置, 鼠标停留上去, 浮出一个标签, 根据②和③来找到该按钮在keymap(键映射)中的位置
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

1. 工程路径问题及解决方案

问题:
在这里插入图片描述

1.1 相对路径

使用相对路径来解决, 有一个非常重要的原则: 页面所有的相对路径, 在默认情况下, 都会参考当前浏览器地址栏的路径http://ip:port/工程路径/资源 来进行跳转
在这里插入图片描述

1.2 相对路径缺点

  1. …/的困扰
    在这里插入图片描述
    在这里插入图片描述
  2. 相对路径总是会依赖浏览器的地址栏, 所有不推荐使用. 如果需要指定页面相对路径参考的路径, 可以使用base标签来指定

1.3 base标签

  1. base标签是HTML语言中的基准网址标记, 它是一个单标签, 位于网页头部文件的head标签内
  2. 一个页面最多只能使用一个base元素, 用来提供一个指定的默认目标, 是一种表达路径和连接网址的标记
  3. 常见的url路径形式分别有相对路径和绝对路径, 如果base标签指定了目标, 浏览器将通过这个目标来解析当前文档中所有的相对路径, 包括的标签有(a标签, img标签, link标签, form标签)
  4. 也就是说, 浏览器解析时会在路径前加上base给的目标, 而页面中的相对路径也都转换成了绝对路径. 使用了base标签就应带上href属性和target属性

浏览器对首位 / 的解析规则
在这里插入图片描述

服务器对首位 / 的解析规则
在这里插入图片描述

1.4 作业1

题目1: 由login.html跳转到user.html的所有方法
在这里插入图片描述

  1. 不借助Servlet
    在这里插入图片描述
  2. 借助Servlet
    在这里插入图片描述
    在这里插入图片描述

1.5 作业2

题目2: 由user.html返回到login.html的所有方法
在这里插入图片描述
解决方案:
在这里插入图片描述
在这里插入图片描述

1.6注意细节

  1. web工程的相对路径和绝对路径
  • 相对路径
    • .表示当前目录
    • …表示上一级目录
  • 资源名
    • 表示当前目录 / 资源名
  • 绝对路径
    • http://ip:port/工程路径 / 资源路径
  1. 在实际开发中, 路径都是用绝对路径, 而不是相对路径
  2. 在web中, / 斜杠如果被浏览器解析, 得到的地址是: http://ip[域名]:port/, 比如<a href=“/”>fds</a>
  3. 在web中, / 斜杠如果被服务器解析, 得到的地址是: /工程路径/, 你也可以理解为http://ip[域名]:port/工程路径/, 下面几种情况就是如此:
  • <url-pattern>/servletUrl<url-pattern>
  • servletContext.getRealPath(“/”)
  • request.getRequestDispatcher(“/”)
    在这里插入图片描述
  1. 在javaWeb中, 路径最后带 / 和不带 / 含义不同, 一定要小心
    比如<a href=“/a/servlet03”>网址</a> servlet03表示资源; <a href=“/a/servlet03/”>网址</a> servlet03表示路径
    在这里插入图片描述
  2. 特别说明: response.sendRedirect(“/”); 这条语句虽然是在服务器执行的, 但是服务器把斜杠 / 发送给浏览器解析. 因此得到地址 http://ip[域名]:port/

小结: 在编写资源路径时, 要考虑这么几点:

  1. 这个路径 前面有没有 /
  2. 如果有, 这个路径是在哪里被解析的, 是在服务器还是在浏览器. 如果是在浏览器端被解析的, 被解析成 http://ip:port/; 如果是在服务器端被解析的, 被解析成 /工程路径/.
  3. 如果没有 / , 并且在浏览器被解析, 则以浏览器当前的地址栏 去掉 资源部分作为一个相对路径的参考路径.
  4. 这个路径 最后有没有 / , 如果最后有 / , 表示一个路径; 如果没有 / , 表示定位一个资源

1.7 重定向作业

题目: 写出login.html在通过Servlet重定向情况下, 如何通过表单提交,找到user.html, 写出所有方法
在这里插入图片描述
解决方案:
在这里插入图片描述

1.8 web工程路径优化

在这里插入图片描述

2. Cookie技术

2.1 Cookie简单示意图

  1. Cookie是服务器在客户端保存的用户信息, 比如登录名, 浏览历史等, 就可以以cookie的方式保存
  2. Cookie信息就像是小甜饼(cookie)一样, 数据量并不大, 服务器端在需要的时候可以从客户端读取
    在这里插入图片描述

位置
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2.2 Cookie常用方法

  1. Cookie有点像一张表(K-V), 分两列, 一个是名字, 一个是值, 数据类型都是String, 都是小量的数据, 如图
    在这里插入图片描述
  2. 如果创建一个Cookie(在服务端创建)
    Cookie cookie = new Cookie(String name, String val);
    cookie.setMaxAge();//保存时间
  3. 如何将一个Cookie添加到客户端
    response.add Cookie(cookie);
  4. 如何读取cookie(在服务端读取cookie信息)
    request.getCookies();

2.2 Cookie创建

新建一个Web工程->添加Web框架->新建lib, 引入servlet包Add as Library->配置tomcat->创建Servlet->浏览器抓包
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.3 Cookie读取

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

2.3.1 JSESSIONID

  1. 提示: 访问Servlet(比如 http://localhost:8088/cs/updateCookie)不会生成JSESSIONID, 访问http://localhost:8088/cs/才会生成
  2. 要关闭浏览器再开一个新的, 才能产生一个新的session绘画

在这里插入图片描述

2.3.2 读取指定Cookie

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

2.4 Cookie修改

在这里插入图片描述

2.5 Cookie生命周期

  1. Cookie的生命周期是指如何管理Cookie什么时候被销毁(删除)
  2. setMaxAge()
  1. 正数, 表示在指定的秒数后过期, 但仍存在于浏览器中
    在这里插入图片描述
  2. 0表示马上在浏览器端删除Cookie
    在这里插入图片描述
    在这里插入图片描述
  3. 负数, 表示浏览器关闭, Cookie就会被删除(默认值是-1)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

2.6 Cookie的有效路径

规则如下:
cookie1.setPath = /工程路径
cookie2.setPath = /工程路径/aaa
请求地址: http://ip:端口/工程路径/资源
cookie1 会发送给浏览器
cookie2 不会发送给浏览器
请求地址: http://ip:端口/工程路径/aaa/资源
cookie1 会发送给服务器
cookie2 会发送给服务器

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

2.7 Cookie作业布置

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

2.8 Cookie注意事项

  1. 一个Cookie只能标识一种信息, 它至少含有一个标识该信息的名称(Name)和设置值(Value)
  2. 一个Web站点可以给一个浏览器发送多个Cookie, 一个浏览器也可以存储多个Web站点提供的Cookie
    在这里插入图片描述
  3. Cookie总的数量没有限制, 但是每个域名的Cookie数量和每个Cookie的大小是有限制的(不同的浏览器限制不同), Cookie不适合存放数据量大的信息

2.8.1 Cookie中文乱码问题

如果存放中文的cookie, 会报错, 可以通过url编码和解码解决
在这里插入图片描述
在这里插入图片描述

3. Session技术

  1. Session是服务器端技术, 服务器在运行时会为每一个用户的浏览器创建一个其独享的session对象/集合
  2. 由于session为各个用户浏览器独享, 所以用户在访问浏览器的不同页面时, 可以从各自的session中读取/添加数据, 从而完成相应任务

3.1 Session原理示意图

  1. 当用户打开浏览器, 访问某个网站, 操作session时, 服务器就会在内存(在服务端)为该浏览器分配一个session对象, 该session对象被这个浏览器独占
  2. 这个session对象也可看作是一个容器/集合, session对象默认存在时间30min(Tomcat的conf/web.xml中配置的), 也可修改
    在这里插入图片描述
  • session可以做什么?
    • 网上商城的购物车
    • 保存登陆用户的信息
    • 将数据放入到Session中, 供用户在访问不同页面时, 实现跨页面访问数据
    • 防止用户非法登录到某个页面
  • Session存储结构示意图

在这里插入图片描述

  1. 你可以把Session看作是一种容器类似HashMap, 有两列(K-V), 每一行就是session的一个属性.
  2. 每个属性包含有两个部分, 一个是该属性的名字(String), 另一个是该属性的值(Object)

3.2 Session常用方法

  1. 创建和获取Session
    HttpSession hs = request.getSession()
    第一次调用是创建Session会话, 之后调用是获取创建好的Session对象
  2. 向session添加属性
    js.setAttribute(String name, Object obj)
  3. 从session得到某个属性
    Object obj = hs.getAttribute(String name)
  4. 从session删除某个属性
    hs.removeAttribute(String name)
  5. isNew();
    判断是不是刚创建出来的Session
  6. 每个Session都有1个唯一标识Id值. 通过getId() 得到 Session的会话 id值

3.2 Session底层机制

项目重新发布Session会清空
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.3 Session生命周期

3.3.1 Session生命周期说明

  1. public void setMaxInactiveInterval(int interval), 设置Session的超时时间(以秒为单位), 超过指定的时长, Session就会被销毁
  2. 值为正数的时候, 设定Session的超时时长
  3. 负数表示永不超时
  4. public int getMaxInactiveInterval()获取Session的超时时间
  5. public void invalidate() 让当前Session会话立即无效
  6. 如果没有调用setMaxInactiveInterval()来指定Session的生命时长, Tomcat会以Session的默认时长为准, Session的默认超时时间为30min, 可以在tomcat的web.xml中配置
    在这里插入图片描述
  7. Session的生命周期指的是: 客户端/浏览器两次请求的最大间隔时长, 而不是累积时长, 即当客户端访问了自己的session, session的生命周期将从0开始重新计算
  8. 底层: Tomcat用一个线程来轮询会话状态, 如果某个会话的空闲时间超过设定的最大值, 则将该会话销毁

3.3.2 Session生命周期实例

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
解读: Session的生命周期

  1. 指的是两次访问session的最大间隔时间
  2. 如果你在session没有过期的情况下, 操作session, 则会重新开始计算生命周期
  3. session是否过期, 是由服务器来维护和管理
  4. 如果我们调用了invalidate(), 会直接将该session删除/销毁
  5. 如果希望删除session对象的某个属性, 使用removeAttribute(“xx”)

3.4 Session作业

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

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

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

相关文章

Linux文件目录操作命令

目录 Linux常用的基础命令 使用技巧 1. ls命令&#xff1a;查看当前目录所有内容 ls 命令的多种使用方法&#xff1a; 注&#xff1a;假如执行乱码&#xff0c;则执行以下两步的代码&#xff1a; 2. cd命令&#xff1a;切换当前工作目录&#xff0c;即进入指定目录 3. …

网络-IP地址(嵌入式学习)

IP地址基本概念IPv4 五类&#xff1a;A B C D E特殊地址子网掩码子网号概念IPv6优势举个栗子基本概念 IP地址是Internet中主机的标识 IP地址&#xff08;Internet Protocol Address 互联网国际地址&#xff09;是一种在Internet上的给主机编址的方式&#xff0c;它主要是为互…

Java Web 开发技术的演进:从 Servlet、Spring MVC 到 WebFlux 及其竞品分析

前言 随着互联网技术的快速发展&#xff0c;Web 应用程序在处理海量用户访问和大数据时面临着巨大的挑战。在这个过程中&#xff0c;Java Web 开发技术经历了从 Servlet 到 Spring MVC 再到 WebFlux 的演变。在这篇文章中&#xff0c;我们将探讨这三个技术的发展历程、痛点及解…

Go的IO -- Go语言设计与实现

Go合IO的不解之缘 协程是Go的很大的一个优势。Go天然支持高并发&#xff0c;那么我们来研究一下这个高并发的秘诀在哪里&#xff1f; 执行体调度得当。CPU 不停的在不同的执行体&#xff08; Goroutine &#xff09;之间反复横跳&#xff01;CPU 一直在装填和运行不同执行体的…

数字化坚鹏:金融数据治理、数据安全政策解读及银行数字化转型

金融数据治理、数据安全政策解读及银行数字化转型课程背景&#xff1a; 很多银行存在以下问题&#xff1a; 不知道如何准确理解金融数据治理及数据安全相关政策 不清楚金融数据治理及数据安全相关政策对银行有什么影响&#xff1f; 不清楚如何进行银行数字化转型&#xff1f…

Azure DevOps Pipelines

Azure DevOps主要通过管理代码、管理服务器、管理发布的管道来实现一体化解决方案 发布流程&#xff1a; 1、代码上传Repos仓储 略 2、DevOps连接并管理发布服务器 2.1、Deployment Groups配置 2.2、服务器执行连接指令 2.3、服务器状态查看 3、创建 Pipline(构建代码) 3.1…

前端中font的使用

知识点&#xff1a; 运行截图&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta http-equiv"X-UA-Compatible" content"IEedge"> <meta name&…

【RabbitMQ】SpringBoot整合RabbitMQ、实现RabbitMQ五大工作模式(万字长文)

目录 一、准备 1、创建SpringBoot项目 2、添加配置信息 3、创建配置类 二、RabbitMQ的配置类里创建队列 三、RabbitMQ的配置类里创建交换机及绑定队列 四、SpringBoot整合RabbitMQ入门案例 1、生产者 2、消费者 四、SpringBoot里实现RabbitMQ五大工作模式 1、简单模式…

Linux--进程多线程(上)

前言 精神内耗一方面可能是消极的&#xff0c;人好像一直在跟自己过不去&#xff0c;但其实它也是一种积极的情绪。精神内耗在某种程度上&#xff0c;是在寻找一种出口&#xff0c;寻找他自己人生的出口&#xff0c;寻找我今天的出口&#xff0c;或者寻找我一觉醒来明天的出口。…

【k8s完整实战教程5】网络服务配置(nodeport/loadbalancer/ingress)

系列文章&#xff1a;这个系列已完结&#xff0c;如对您有帮助&#xff0c;求点赞收藏评论。 读者寄语&#xff1a;再小的帆&#xff0c;也能远航&#xff01; 【k8s完整实战教程0】前言【k8s完整实战教程1】源码管理-Coding【k8s完整实战教程2】腾讯云搭建k8s托管集群【k8s完…

恐怖的ChatGPT!

大家好&#xff0c;我是飞哥&#xff01;不知道大家那边咋样。反正我最近感觉是快被ChatGPT包围了。打开手机也全是ChatGPT相关的信息&#xff0c;我的好几个老同学都在问我ChatGPT怎么用&#xff0c;部门内也在尝试用ChatGPT做一点新业务出来。那就干脆我就趁清明假期这一天宝…

AB测试基本原理

AB测试基本原理AB测试AB测试的基本步骤1、AB测试的基本步骤①选取指标指标的分类②建立假设③选取实验单位④计算样本量⑤流量分割⑥实验周期计算⑦线上验证⑧数据检验AB测试 所谓的AB测试就是使用实验组和对照组&#xff0c;通过控制变量法保证实验组和对照组基本条件一致&am…

NumPy 数组学习手册:6~7

原文&#xff1a;Learning NumPy Array 协议&#xff1a;CC BY-NC-SA 4.0 译者&#xff1a;飞龙 六、性能分析&#xff0c;调试和测试 分析&#xff0c;调试和测试是开发过程的组成部分。 您可能熟悉单元测试的概念。 单元测试是程序员编写的用于测试其代码的自动测试。 例如&…

AI —— 一看就懂的代码助手Copilot获取教程

背景 随着chatgpt的发布&#xff0c;人工智能领域近期站上了风口浪尖。GitHub Copilot由github与 OpenAI 合作创建&#xff0c;是世界上第一个使用 OpenAI 的 Codex 模型&#xff08;GPT-3 的后代&#xff09;制作的大规模生成式 AI 开发工具。GitHub Copilot 作为 AI 结对程序…

【条件判断】

目录知识框架No.0 筑基No.1 条件判断题目来源&#xff1a;PTA-L1-031 到底是不是太胖了题目来源&#xff1a;PTA-L1-063 吃鱼还是吃肉题目来源&#xff1a;PTA-L1-069 胎压监测题目来源&#xff1a;PTA-L1-077 大笨钟的心情题目来源&#xff1a;PTA-L1-083 谁能进图书馆知识框架…

Day15-二维数组字符串

文章目录一 二维数组二 字符串案例1案例2案例3-随堂练习案例4-输入-类型转换案例5案例6案例7一 二维数组 <script>// 书:编号 名称 描述 价格/*** 二维数组* */let arr [ [1001,"HTML","网页设计",100],[1002,"CSS","样式设计"…

Leetcode刷题之环形链表

莫等闲&#xff0c;白了少年头&#xff0c;空悲切。 --岳飞 目录 1.环形链表 2.环形链表Ⅱ 1.环形链表 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next …

Stable Diffusion扩散模型

1 GAN到Stable Diffusion的改朝换代 随着人工智能在图像生成&#xff0c;文本生成以及多模态生成等生成领域的技术不断累积&#xff0c;生成对抗网络&#xff08;GAN&#xff09;、变微分自动编码器&#xff08;VAE&#xff09;、normalizing flow models、自回归模型&#xf…

Android Textview Button 等基础组件学习

一 Textview 1 基本使用 <?xml version"1.0" encoding"utf-8"?><LinearLayout android:layout_height"match_parent"android:layout_width"match_parent"android:orientation"vertical"xmlns:android"http…

vue中的pinia使用和持久化 - 粘贴即用

学习关键语句&#xff1a; pinia怎么用 写在前面 pinia 作为 vuex 的替代品好像变得不得不学习了&#xff0c;学起来一用发现 vuex 是什么麻烦的东西&#xff0c;我不认识 这篇文章一共包含的内容有&#xff1a; 安装 pinia读取数据修改数据数据持久化 其中&#xff0c;修…