软件设计之JavaWeb(4)

news2024/9/20 16:11:45

软件设计之JavaWeb(4)

此篇应在MySQL之后进行学习:
路线图推荐:
【Java学习路线-极速版】【Java架构师技术图谱】
尚硅谷全新JavaWeb教程,企业主流javaweb技术栈
资料可以去尚硅谷官网免费领取
此章节最好学完JDBC观看

学习内容:

  1. 会话管理
  2. 三大域对象
  3. 过滤器

1、会话管理

在会话管理中,CookieSession都用于保持用户状态。基本流程如下:
1、客户端发起请求:用户访问网站,服务器生成一个唯一的 Session ID。
2、Session 保存在服务器:服务器将用户信息(如登录状态)存储在服务器端的 Session 中,用这个 Session ID 关联用户。
3、Cookie 储存 Session ID:服务器通过响应头将 Session ID 发送给浏览器,浏览器将这个 Session ID 存储在 Cookie 中。
4、后续请求中传递 Cookie:每次用户请求时,浏览器会自动将 Cookie 中的 Session ID 发送给服务器。
5、服务器验证:服务器接收 Session ID,从服务器端的 Session 中检索对应用户数据,验证用户身份。

Cookie

1、服务端创建cookie,将cookie放入响应对象中,Tomcat容器将cookie转化为set-cookie响应头,响应给客户端
2、客户端在收到cookie的响应头时,在下次请求该服务的资源时,会以cookie请求头的形式携带之前收到的Cookie

在这里插入图片描述

Cookie时效性

访问互联网资源时不能每次都需要把所有Cookie带上。访问不同的资源时,可以携带不同的cookie,我们可以通过cookie的setPath(String path) 对cookie的路径进行设置
在这里插入图片描述

Session

1、服务端在为客户端创建session时,会同时将session对象的id,即JSESSIONID以cookie的形式放入响应对象
2、后端创建完session后,客户端会收到一个特殊的cookie,叫做JSESSIONID
3、客户端下一次请求时携带JSESSIONID,后端收到后,根据JSESSIONID找到对应的session对象
4、通过该机制服务端通过session就可以存储一些专门针对某个客户端的信息了

Session原理图

在这里插入图片描述

req.getSession()获取session流程图

在这里插入图片描述

2、三大域对象

1、请求域对象是HttpServletRequest ,传递数据的范围是一次请求之内及请求转发
2、会话域对象是HttpSession,传递数据的范围是一次会话之内,可以跨多个请求
3、应用域对象是ServletContext,传递数据的范围是本应用之内,可以跨多个会话
在这里插入图片描述

区分两次请求、会话

要区分两次请求:可以通过请求方式(如GET和POST)和请求的URL来加以区分(请求转发算同一次请求)。
第二次会话:如果用户关闭浏览器或会话过期,再次访问同一网站,服务器会认为这是一个新的会话。新的Session ID会被分配,表示新的会话开始。 第一次会话:用户首次访问服务器时,没有Session ID。服务器会为该用户创建一个新的会话,并生成一个唯一的Session ID,通常通过Set-Cookie头设置到客户端的Cookie中。第二次会话:`如果用户关闭浏览器或会话过期,再次访问同一网站,服务器会认为这是一个新的会话。新的Session ID会被分配,表示新的会话开始。

3、过滤器

在这里插入图片描述

web.xml配置过滤器

<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd"
         version="6.0">

    <filter>
        <filter-name>loggingFilter</filter-name>
        <filter-class>com.atguigu.filters.LoggingFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>loggingFilter</filter-name>
<!--        url-pattern 根据请求的资源路径 对指定的请求进行过滤
            /* 过滤全部资源
            /a/* 过滤以a开头的资源
            *.html 过滤以html为后缀的资源
            /servlet1 对servlet1的请求进行过滤
            servlet-name 根据请求的servlet的别名,对指定的servlet资源进行过滤
            一个filter-mapping中可以同时存在多个url-pattern 和servlet-name-->
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

过滤器java代码

package com.atguigu.filters;

import jakarta.servlet.*;

import java.io.IOException;

/**
 * 日志过滤器 记录请求历史 将日志打印到控制台
 *
 * 1 实现filter接口
 * 2 重写过滤方法
 * 3 配置过滤器
 *   web.xml
 *   注解
 */
public class LoggingFilter implements Filter {
/*
* 过滤请求和响应的方法
*   1 请求到达目标资源之前,先经过该方法
*   2 该方法有能力控制请求是否继续向后到达目标资源 可以在该方法内直接向客户端做响应处理
*   3 请求到达目标资源后,响应之前,还会经过该方法*/
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    /*
    * 1 请求到达目标资源之前的功能代码
    * 比如:判断是否登录,校验权限是否满足
    * 2 放行代码
    * 3 响应之前 HttpServletResponse转换为响应报文之前的功能代码
    * */
    //请求到达目标资源之前的代码
    System.out.println("loggingFilter before doFilter invoked");
    //放行

    filterChain.doFilter(servletRequest,servletResponse);
    //响应之前的代码
    System.out.println("loggingFilter after.doFilter invoked");
    }
}

过滤器链

过滤器执行顺序
1、在 web.xml 文件中,过滤器的顺序由其定义的顺序决定。即,按照 filter 和 filter-mapping 标签在文件中出现的顺序依次执行。
2、如果通过注解 @WebFilter 配置过滤器,过滤器的顺序通常是由 @WebFilter 注解中的 @Order 或 @Priority 注解来控制。如果没有指定 @Order 或 @Priority 注解,容器会根据类的加载顺序来决定过滤器的执行顺序,这种情况下是无法明确控制的。

在这里插入图片描述

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

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

相关文章

CleanClip for Mac 剪切板 粘贴工具 历史记录 安装(保姆级教程,新手小白轻松上手)

CleanClip&#xff1a;革新macOS剪贴板管理体验 目录 功能概览 多格式历史记录保存智能搜索功能快速复制操作拖拽功能 安装指南 前期准备安装步骤 配置与使用 功能概览 多格式历史记录保存 CleanClip支持保存文本、图片、文件等多种格式的复制历史记录&#xff0c;为用户提…

vue 在线预览word和excel

yarn add vue-office/excel vue-office/docx <template><div><vue-office-docx:src"docx"style"height: 100%; margin: 0; padding: 0"rendered"rendered"/></div> </template><script> //引入VueOfficeDoc…

C:字符串函数(续)-学习笔记

穗 一些闲话&#xff1a; 最近玩了这款饿殍-明末千里行&#xff0c;不知大家是否有听过这款游戏&#xff0c;颇有感触&#xff01;&#xff01;&#xff01; 游戏中最让我难以忘怀的便是饿殍穗线的故事&#xff0c;生在如今时代的我之前无法理解杜甫在目睹人间悲剧时的心情&…

低级编程语言和高级编程语言

一.区分低级编程语言和高级编程语言的方法 1.低级编程语言 低级编程语言,并不是简单的编程语言,而是写起来很费事的编程语言,如所有编程语言的"祖宗":汇编语言,写起来极其麻烦,说不定一个 int a1; 它就得写好几行,甚至十几行 这样麻烦的编程语言为什么还没消失那,因…

蓝桥杯省赛真题——大臣的旅费

输入样例&#xff1a; 5 1 2 2 1 3 1 2 4 5 2 5 4 输出样例&#xff1a; 135分析&#xff1a; 本题实际上要求我们去求在图中最远两点之间的距离&#xff0c;也就是树的直径 我们先从某一个点出发&#xff0c;到达离其最远的点&#xff0c;然后再重复操作一次即可 #inclu…

1184. 公交站间的距离(24.9.16)

题目 环形公交路线上有n个站&#xff0c;按次序从 0 到n - 1进行编号。已知每一对相邻公交站之间的距离&#xff0c;distance[i]表示编号为i的车站和编号为(i 1) % n的车站之间的距离。环线上的公交车都可以按顺时针和逆时针的方向行驶。要求返回乘客从出发点start到目的地de…

C++11(3)

目录 可变参数模版 获取参数包值的方式 1.递归方式展开参数包 2.使用数组逗号表达式展开 emplace_back函数 lambda表达式 C98中的例子 lambda表达式 语法 lambda表达式和函数比较 包装器 function包装器 bind绑定器 可变参数模版 C11 的新特性可变参数模板能够让您…

Java--String类

前言&#xff1a; 在之前的学习中&#xff0c;学习了和了解了一些类的基本使用&#xff0c;例如object类等等&#xff0c;但是我们用String这个引用或者说这个类其实我们已经用了好久&#xff0c;只不过没有具体分析过&#xff01; 对于String类&#xff0c;它可以引用一个字符…

VTD激光雷达(1)——01_OptiX_RayTracing-笔记

文章目录 前言一、文档介绍1、 总结 前言 不想学习怎么办 感谢VTD官方视频指导 一、文档介绍 1、 1 2 站在光的角度上考虑问题&#xff0c;如果用光源发出的&#xff0c;好多没到传感器上&#xff0c;这样会导致计算量很大&#xff0c;我们用传感器的trace 3 4 5 6 7 8 …

如何在 Vue 3 + Element Plus 项目中实现动态设置主题色以及深色模式切换

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 一、引言二、项目依赖和环境配置1. VueUse2. use-element-plus-theme3. 安装依赖 三、实现深色模式切换1. 设置深色模式状态2. 模板中的深色模式切换按钮3. 深色模式的效果展示 四、动态切换主题色五、总结 一、引言 在现代…

平安养老险阜阳中心支公司开展金融教育宣传专项活动

为全面深入开展“金融教育宣传月”的各项工作&#xff0c;不断完善金融惠民利民举措&#xff0c;提升金融服务质效&#xff0c;帮助基层群众增强维权意识、防非反诈的自我保护能力。近日&#xff0c;平安养老保险股份有限公司&#xff08;以下“平安养老险”&#xff09;阜阳中…

神经网络_使用tensorflow对fashion mnist衣服数据集分类

from tensorflow import keras import matplotlib.pyplot as plt1.数据预处理 1.1 下载数据集 fashion_mnist keras.datasets.fashion_mnist #下载 fashion mnist数据集 (train_images, train_labels),(test_images, test_labels) fashion_mnist.load_data()print("t…

食品包装识别系统源码分享

食品包装识别检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

IDEA复制代码到MD笔记格式还手动调,赶紧试试这个功能,一步到位

你是否曾经有过这种复制代码到笔记代码块的经历&#xff0c;选中后代码左侧有一些空格 然后粘到Markdown笔记里除第一行外&#xff0c;其他几行都要手动向前缩进&#xff0c;真是逼死强迫症啊 但是&#xff0c;其实idea工具中有一个“列选择模式”的功能&#xff0c;我们可以…

51单片机-LCD1602(液晶显示屏)- 写驱动

时间永远是检验真理唯一标准&#xff01;Whappy&#xff01; 主要简单写出几个驱动 初始化、显示字符、显示字符串、显示整形数据、有符号数据、十六进制、二进制&#xff01; void LCD_Init(); void LCD_ShowChar(unsigned char Line,unsigned char Column,char Char); vo…

【网络安全的神秘世界】csrf客户端请求伪造

&#x1f31d;博客主页&#xff1a;泥菩萨 &#x1f496;专栏&#xff1a;Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 一、概述 跨站请求伪造&#xff0c;是一种挟持用户在当前已登陆的web应用程序上执行非本意操作的攻击方法&#xff0c;允许攻…

Comsol 利用多孔材料填充复合吸声器,拓宽低频完美吸声

参考文献&#xff1a;Cheng B , Gao N , Huang Y ,et al.Broadening perfect sound absorption by composite absorber filled with porous material at low frequency:[J].Journal of Vibration and Control, 2022, 28(3-4):410-424.DOI:10.1177/1077546320980214. 为了提高低…

端侧大模型系列 | 斯坦福手机端侧Agent大模型,为Android API而生!

0. 引言 峰峦或再有飞来&#xff0c;坐山门老等。泉水已渐生暖意&#xff0c;放笑脸相迎 小伙伴们好&#xff0c;我是微信公众号《小窗幽记机器学习》的小编&#xff1a;卖铁观音的小男孩。今天这篇小作文主要介绍端侧大模型中的函数调用&#xff0c;即常说的Function calling…

即插即用!高德西交的PriorDrive:统一的矢量先验地图编码,辅助无图自动驾驶

Driving with Prior Maps: Unified Vector Prior Encoding for Autonomous Vehicle Mapping 论文主页&#xff1a;https://misstl.github.io/PriorDrive.github.io/ 论文链接&#xff1a;https://arxiv.org/pdf/2409.05352 代码链接&#xff1a;https://github.com/missTL/Pr…

【数据结构】排序算法---直接插入排序

文章目录 1. 定义2. 算法步骤3. 动图演示4. 性质5. 算法分析6. 代码实现C语言PythonJavaCGo 7. 折半插入排序代码实现——C 结语 1. 定义 直接插入排序是一种简单直观的排序算法。它的工作原理为将待排列元素划分为「已排序」和「未排序」两部分&#xff0c;每次从「未排序的」…