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

JAVA Web_定义Servlet_处理POST请求【练习】

题目

有一个登录页面(login.html),其登录表单的HTML代码如下:

</form action="doLogin" method = "post">
用户名:<input type="text" name="userName"><br>密码:   <input type="password" name="pwd"><br><input type="submit" value="登录">
</form>

定义一个Servlet(类名自定义)实现登录验证,具体要求如下:
     1、获取表单中的用户名密码;(30%)
     2、验证登录用户提交的用户名是否为xx,密码为123456,如果验证通过,则将用户名添加为HttpSession的一个属性,再将请求内部派发到home.html;(60%)
    3、如果用户名和密码不正确,则将请求重定向到login.html;(10%)


 不知大家现在处理POST请求的功力如何。如今,正巧有一题,不妨一试?

前文链接:JAVA Web_定义Servlet2_学生登录验证Servlet-CSDN博客 - POST请求处理

JAVA Web_定义Servlet_1 欢迎考生-CSDN博客 - GET请求处理

经过前文的铺垫,代码也算是入门。接下来,我们刷题的节奏可要提起来了:


目录

题目

分析题意:

处理POST请求: 

获取获取表单中的用户名和密码:

验证登录:

重定向方法:

添加属性: 

获取HttpSession对象:

将请求内部派发到指定地址:

1.getRequestDispatcher(path)

2.forward(request,  response);

完整参考代码: 

分析题意:

没问题,项目先创建上:

再看: 

题目一来就给我们表单代码——method = "post"赤果果告诉我们:所要定义的servlet是继承HttpServlet类重写doPost方法

public class servlet01 extends HttpServlet {protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
//重写doPost方法}
}

且这份表单会收集数据,交给url路径为"doLogin"的servlet——那我们就要注解配置servlet

@WebServlet("/doLogin")

那么现在的代码就是这样:

@WebServlet("/doLogin")//注解配置servlet路径
public class servlet01 extends HttpServlet {protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
//重写doPost方法}
}

处理POST请求: 

那么怎么处理POST请求?我们先根据以往的知识——这首当其冲的,便是设置编码

//1.设置编码 只要是重写doPost方法,第一步一定是设置编码(其实doGet也是)
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");

 然后呢?接下来就得结合题意了:

获取获取表单中的用户名和密码:

 基本方法:

Object request.getParameter(String);
//参数为键 返回为值——故此方法又为:获取请求参数的值

根据表单信息很容易知道:用户名和密码它们的键名

且二者键名的值类型为String ,于是有了两行对应代码:

//2.获取请求参数值String uname = request.getParameter("userName");String pwd = request.getParameter("pwd");

验证登录:

 要验证登录:即判断用户名和密码是否正确——如果正确,则balabala;反之,则balabala;

呼之欲出的if-else判断:

if()//如果用户名和密码正确
{}
else//反之
{}

那么if的括号里怎么判断呢?已知我们从表单里获得了用户名和密码的值——类型都是String;还已知正确的用户名为“xx”、密码为“123456”

代码逻辑便是:两个字符串是否相等: "xx"是否等于 uname "123456"是否等于 pwd

if("xx".equals(uname) && "123456".equals(pwd))//判断用户名和密码是否正确,使用String类的成员方法equals
{}
else
{}

接下来,进入执行体;我们先使用伪代码,把能写的代码解决~~~

if("xx".equals(uname) && "123456".equals(pwd))//判断用户名和密码是否正确,使用String类的成员方法equals
{//验证通过,则将用户名添加为HttpSession的一个属性,//再将请求内部派发到home.html;
}
else
{//如果用户名和密码不正确,则将请求重定向到login.html;
}

添加属性” 这我们在上一节也提到过(详细地)但是没说过——添加为HttpSession的一个属性啊JAVA Web_定义Servlet2_学生登录验证Servlet-CSDN博客;

"请求内部派发"也提到过(这里也得详谈了)。

"重定向"?我们也说过,虽然没归纳具体的方法(这里就得详谈了),但刷了上一道的小伙伴,应该有点印象。看else语句应该比较少,我们先写else:

 重定向方法:

sendRedirect() 方法定义在 HttpServletResponse 接口中,具体方法签名如下:

重定向方法:
void sendRedirect(String location) throws IOException

 参数 :字符串类型的参数,这个参数是个地址。表示要重定向到的目标 URL。它可以是相对路径或绝对路径

没有返回值。

使用示例:如果说用户登录失败,那么就可以将网址(url)重定向到指定地网站如:login.html

那么此处的代码逻辑也是恰好同理:

 //将请求重定向到login.html;
response.sendRedirect("login.html");
//这里可千万记住是:重定向是response的方法(别问作者为什么强调,某些同学不熟容易迷糊)
//好理解,验证获取到的参数值不对,那就直接响应回去到login.html,示意用户重新提交表单
if("xx".equals(uname) && "123456".equals(pwd))//判断用户名和密码是否正确,使用String类的成员方法equals
{//验证通过,则将用户名添加为HttpSession的一个属性,//再将请求内部派发到home.html;
}
else
{//如果用户名和密码不正确,则将请求重定向到login.html;response.sendRedirect("login.html");
}

添加属性: 

上一节是将某某属性添加到request的作用域 —— 我们曾拆解“作用域”——理解为一个存储容器,“添加属性”——理解为添加一对键值对。

JAVA Web_定义Servlet2_学生登录验证Servlet-CSDN博客

request.setAttribute(String,Object);//添加属性到request作用域
//参数:前者为新键名,后者为值

那么这里要求: 将用户名添加为HttpSession的一个属性

request.setAttribute("name",uname);
//别急,无论如何,我们添加了用户名属性(新键名为"name",值为uname),至于如何添加到HttpSession,就在下文

这里不再是request的作用域,而是HttpSession:其实照猫画虎,定语变了而已,那么想办法先获得这个HttpSession。

获取HttpSession对象:

request.getSession() 是 Java Servlet API 中 HttpServletRequest的一个常用方法,用于获取与当前请求相关的 HttpSession 对象

request.getSession() 方法有两种重载形式:这里我们使用第一种

HttpSession request.getSession()
//无参
//如果当前请求已经关联了一个会话,则返回该会话对象。
//如果当前请求没有关联会话,则创建一个新的会话对象,并将其与当前请求关联起来。
//返回值类型为 HttpSession。

 这里出现了新的名词“会话”,正是Session的中文。(至于Session的介绍,后面的文章会着重介绍,这里不多说)

知道这个方法会返回我们要的HttpSession对象,就找到了存储新属性的容器~

HttpSession要添加一个属性(键值对),也有个同名成员方法: setAttribute(String,Object);巧了不是?则代码:

request.getSession().setAttribute("name",uname);
//request.getSession()返回值为HttpSession
//要在HttpSession里添加属性,马不停蹄地调用它的setAttribute(String,Object)方法
if("xx".equals(uname) && "123456".equals(pwd))//判断用户名和密码是否正确,使用String类的成员方法equals
{//验证通过,则将用户名添加为HttpSession的一个属性,request.getSession().setAttribute("name",uname);//再将请求内部派发到home.html;
}
else
{//如果用户名和密码不正确,则将请求重定向到login.html;response.sendRedirect("login.html");
}

将请求内部派发到指定地址:

 “将请求内部派发到指定地址”

什么意思?好理解,就是这个Servlet处理一定的工作量,接下来的过多的内容得交给下一个Servlet或者html亦或者jsp处理。

而且,注意:“将请求内部派发”,很明显派发到下一个人处理的时候还捎带了这里的数据。

说了这么多,我们请出它的“庐山真面目”:

1.getRequestDispatcher(path)

getRequestDispatcher() 是 Java Servlet API 中 HttpServletRequest 类的一个方法,用于获取一个RequestDispatcher对象。(你想,方法都叫"getXXX",返回值为XXX也好理解)

RequestDispatcher 对象又实现了Java Servlet API 中的一个接口,即 RequestDispatcher 接口本身。用于在服务器端将请求从一个 Servlet 或 JSP 页面转发到另一个资源,(跟题意吻合check!)或者将另一个资源的内容包含到当前响应中。它是实现请求转发和资源包含的核心机制

RequestDispatcher getRequestDispatcher(String path)
// 参数path:字符串类型。表示 目标资源的路径 或者 目标资源的 URL
// 返回类型:RequestDispatcher 返回一个 RequestDispatcher 对象,用于后续的请求转发或资源包含操作。   如果路径无效或目标资源不存在,返回 null。

 使用示例

假设我们要实现一份问卷调查收集,第一页(交给servlet01)是处理收集到的用户的姓名和密码;第二页(交给“servlet02”)就处理收集到的用户的爱好和头像、个人简介——很明显,我们转发到第二页问卷的时候的代码:

request.getRequestDispatcher("servlet02");

当然,现在已经内部转发到servlet02了。但是在处理“爱好”、“头像”和“个人简介”也得有对应那个用户的姓名,密码(可不添加)。不然这“爱好”、“头像”和“个人简介”处理的时候,找不到是哪个用户的所填:

2.forward(request,  response);

 请求转发(Forward)是 Java Servlet API 中 RequestDispatcher 接口(上个方法的返回值实现的同名接口)的一个核心功能

请求转发在服务器端完成,客户端不会感知到目标资源的变更,浏览器地址栏中的 URL 也不会改变。

void forward(ServletRequest request, ServletResponse response) throws ServletException, IOException
// 此方法是RequestDispatcher的成员方法,所以调用使用"."

参数
request:ServletRequest 对象,表示当前的请求。
response:ServletResponse 对象,表示当前的响应。 
没有返回值。

大家想必也看出来,这两个方法可谓是环环相扣。forward(request,response)是一个成员方法,谁的成员?正是getRequestDispatcher("某个地址/资源地址")的返回值。

所以想要实现请求转发—— 先明确要转发到哪里,再调用forward();(括号里为当前的request和response)

使用场景:

假设我们要实现一份问卷调查收集,第一页(交给servlet01)是处理收集到的用户的姓名和密码;第二页(交给“servlet02”)就处理收集到的用户的爱好和头像、个人简介。

那么在servlet01请求内部派发/请求转发时,代码:

request.getRequestDispatcher("servlet02").forward(request,response);
//当前的request能获得调用forward()的对象,顺便参数里填要转发的映射地址(字符串类型)
//再调用forward,完成请求转发。包含当前请求和响应;可以将请求转发到下一步,同时保留用户已经填写的数据。

那么回看题干:再将请求内部派发到home.html

request.getRequestDispatcher("home.html").forward(request,response);
// 请求转发在服务器端完成,用户端不会收到新的请求(表单),所以浏览器(客户端)的url不会变
// 说白了请求转发就是流水线上的几个servlet分工处理数据,是服务端的事
if("xx".equals(uname) && "123456".equals(pwd))//判断用户名和密码是否正确,使用String类的成员方法equals
{//验证通过,则将用户名添加为HttpSession的一个属性,request.getSession().setAttribute("name",uname);//再将请求内部派发到home.html;request.getRequestDispatcher("home.html").forward(request,response);
}
else
{//如果用户名和密码不正确,则将请求重定向到login.html;response.sendRedirect("login.html");
}

那么我们综合代码来看:

@WebServlet("/doLogin")
public class servlet01 extends HttpServlet {private static final long serialVersionUID = 1L;protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{//1.设置编码request.setCharacterEncoding("UTF-8");response.setContentType("text/html;charset=UTF-8");//2.获取请求参数值String uname = request.getParameter("userName");String pwd = request.getParameter("pwd");//3.判断if("xx".equals(uname) && "123456".equals(pwd)){request.getSession().setAttribute("name", uname);request.getRequestDispatcher("home.html").forward(request, response);}else{response.sendRedirect("login.html");}}
}

运行验证一下:

 按理说:它会交给doLogin映射的servlet01;且我输入的用户名和密码正确,最后应该内部派发到home.html(但因为是请求转发,所以url路径还应该是doLogin

 题上并没实现home.html:这是作者简单写的一个打印html,纯纯用来验证:

	<h2> 欢迎您,xx </h2>

完整参考代码: 

@WebServlet("/doLogin")
public class servlet01 extends HttpServlet {private static final long serialVersionUID = 1L;protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{//1.设置编码request.setCharacterEncoding("UTF-8");response.setContentType("text/html;charset=UTF-8");//2.获取请求参数值String uname = request.getParameter("userName");String pwd = request.getParameter("pwd");//3.判断/*验证登录用户提交的用户名是否为xx,密码为123456,如果验证通过,则将用户名添加为HttpSession的一个属性,再将请求内部派发到home.html;(60%)3、如果用户名和密码不正确,则将请求重定向到login.html;(10%)
*/if("xx".equals(uname) && "123456".equals(pwd)){request.getSession().setAttribute("name", uname);request.getRequestDispatcher("home.html").forward(request, response);}else{response.sendRedirect("login.html");}}
}

本章新知识:重定向方法介绍 请求转发方法 获取HttpSession对象并添加属性

今天练习就到这里,如果是对POST请求处理不熟悉,以及代码陌生的同学可以移步这两篇:

 JAVA Web_定义Servlet_1 欢迎考生-CSDN博客 - GET请求处理

JAVA Web_定义Servlet2_学生登录验证Servlet-CSDN博客 - POST请求处理

相关文章:

JAVA Web_定义Servlet_处理POST请求【练习】

题目 有一个登录页面&#xff08;login.html&#xff09;&#xff0c;其登录表单的HTML代码如下&#xff1a; </form action"doLogin" method "post"> 用户名&#xff1a;<input type"text" name"userName"><br>…...

FreeRTOS任务通知

一、什么是任务通知 FreeRTOS从版本V8.2.0开始提供通知这个功能&#xff0c;每个任务都有一个32位的通知值。按照官方说法&#xff0c;使用消息通知比通过二进制信号量方式解除阻塞任务快45%&#xff0c;且更加省内存&#xff08;无需创建队列&#xff09;。 &#xff08;也就…...

NO.97十六届蓝桥杯备战|数论板块-最大公约数和最小公倍数|欧几里得算法|秦九韶算法|小红的gcd(C++)

约数和倍数 如果a 除以b 没有余数&#xff0c;那么a 就是b 的倍数&#xff0c;b 就是a 的约数&#xff0c;记作b ∣ a 。 约数&#xff0c;也称因数。 最⼤公约数和最⼩公倍数 最⼤公约数Greatest Common Divisor&#xff0c;常缩写为gcd。 ⼀组整数的公约数&#xff0c;是…...

ESP32之本地HTTP服务器OTA固件升级流程,基于VSCode环境下的ESP-IDF开发(附源码)

背景知识&#xff1a; 本实验利用编译链内Python内置的 HTTP 服务器&#xff0c;将升级包通过http发送给设备&#xff0c;实现OTA固件升级。 目录 背景知识&#xff1a; 1.创建工程 1.1 创建OTA基础工程 3.编写、修改代码 3.1 修改menuconfig配置文件 3.1.1 配置WiFi账…...

Jenkins的使用及Pipeline语法讲解

Jenkins简介 Jenkins是一个开源软件项目&#xff0c;是基于Java开发的一种持续集成工具&#xff0c;用于监控持续重复的工作&#xff0c;旨在提供一个开放易用的软件平台&#xff0c;使软件项目可以进行持续集成。 什么是持续集成&#xff08;CI&#xff09;&#xff1f; CI(…...

【MySQL】初识数据库

目录 一.什么是数据库 二.数据库和数据结构的关系 三. 数据库服务器、数据库与表之间的关系 四.关系型数据库 五. SQL介绍 SQL分类 六.MySQL架构&#xff08;面试重点&#xff09; 七. 库的基本操作 1.查看数据库 2.创建数据库 字符集编码和校验&#xff08;排序&…...

Android tinyalsa库函数剖析

1. PCM 流控制函数 打开、关闭及状态检查 pcm_open(unsigned int card, unsigned int device, unsigned int flags, struct pcm_config *config) 打开指定声卡&#xff08;card&#xff09;和设备&#xff08;device&#xff09;的 PCM 流。 flags 参数确定流的方向&#xff1…...

DFS/BFS专练-搞定图论基础!(从海岛问题过渡至图论基础应用C++/C)

:: 图论基础理论 :: 紧接着&#xff0c;图论基础理论中&#xff0c;咱们讲到&#xff0c;图论的遍历主要由&#xff08;dfs与bfs决定&#xff09; 那咱们本篇博客就来聊聊dfs与bfs。 dfs&#xff08;深度优先搜索&#xff09;、bfs&#xff08;广度优先搜索&#xff09;的区别…...

2024年RIS SCI2区:自适应天鹰算法AAO,深度解析+性能实测

目录 1.摘要2.天鹰算法AO原理3.改进策略4.结果展示5.参考文献6.代码获取 1.摘要 智能电网通过集成可再生能源并管理供需动态平衡来提高效率&#xff0c;本文提出了自适应天鹰算法&#xff08;AAO&#xff09;&#xff0c;AAO使用Sigmoid因子来平衡探索和开发&#xff0c;根据迭…...

orcad csi 17.4 DRC规则设置及检查

rCAD绘制完原理图之后总是需要开启DRC检测&#xff0c;但是DRC一般都是英文版的&#xff0c;下面基于Cadence17.4 的orCAD16.6 对DRC的界面做简单的介绍 首先&#xff0c;鼠标点击原理图&#xff0c;然后再点击右上方的小勾图标 desine rules check option选项的界面 电气规…...

前端实战:基于 Vue 与 QRCode 库实现动态二维码合成与下载功能

在现代 Web 应用开发中&#xff0c;二维码的应用越来越广泛&#xff0c;从电子票务到信息传递&#xff0c;它都扮演着重要角色。本文将分享如何在 Vue 项目中&#xff0c;结合QRCode库实现动态二维码的生成、与背景图合成以及图片下载功能&#xff0c;打造一个完整且实用的二维…...

天梯赛DFS合集

1.DFS特殊输入&#xff1a;PTA | 程序设计类实验辅助教学平台 这题其他还是蛮容易&#xff0c;直接用递归即可&#xff0c;问题在于怎么输入&#xff0c;其实可以在递归到底层时输入即可&#xff0c;也就是边递归边输入&#xff0c;另外提一嘴跟这个题没什么关系的点&#xff…...

Qt中读写结构体字节数据

在Qt中读写结构体字节数据通常涉及将结构体转换为字节数组(QByteArray)或直接从内存中读写。以下是几种常见方法&#xff1a; 方法1&#xff1a;使用QDataStream读写结构体 cpp #include <QFile> #include <QDataStream>// 定义结构体 #pragma pack(push, 1) //…...

关于yarn和hadoop

1.yarn的定义&#xff1f; YARN&#xff08;Yet Another Resource Negotiator&#xff09;是 Apache Hadoop 的一个关键组件&#xff0c;它是一个资源管理平台&#xff0c;负责管理和调度计算资源。YARN 允许多个数据处理引擎&#xff08;如 MapReduce、Spark、Flink 等&#…...

【全部更新】2025妈妈杯D题1-4问mathercupD题数学建模挑战赛D题数学建模思路代码文章教学短途运输货量预测及车辆调度问题

完整内容请看文章最下面的推广群 先进行摘要和结果的展示、再给出完整的思路 问题1&#xff1a;通过时间序列或机器学习模型预测货量&#xff0c;并按历史分布拆分到10分钟颗粒度。 问题2&#xff1a;基于货量生成运输需求&#xff0c;用贪心算法或整数规划优化车辆调度。 问…...

考研408第一章计算机系统概述——1.1-1.2操作系统的基本概念与发展历程

考研408计算机系统概述——操作系统的基本概念与发展历程 一、操作系统的基本概念 1.1 操作系统的定义与功能 1.1.1 定义 操作系统(Operating System, OS)是管理计算机硬件与软件资源的程序集合,为应用程序和用户提供接口与服务。其核心功能包括: 资源管理者:处理机、…...

《从理论到实践:CRC校验的魔法之旅》

循环冗余校验&#xff08;Cyclic Redundancy Check ,CRC &#xff09;是一种用于检测数据传输或存储过程中错误的算法。他通过计算数据的校验值&#xff08;也称为CRC码&#xff09;&#xff0c;并在数据接收端验证校验值是饭否正确&#xff0c;从而检测数据是否在传输过程中被…...

【算法笔记】整除与最大公约数(GCD)专题整理

参考文章链接&#xff08;已获得作者授权&#xff09; 一、整除&#xff1a;数学中的"完美分割" 定义 若整数 a a a能整除整数 b b b&#xff08;记作 a ∣ b a\mid b a∣b&#xff09;&#xff0c;则存在整数 k k k使得 b a ⋅ k ba\cdot k ba⋅k。 通俗理解&…...

JDBC 与 MyBatis 详解:从基础到实践

目录 一、JDBC 介绍 二、使用 JDBC 查询用户信息 三、ResultSet 结果集 四、预编译 SQL - SQL 注入问题 五、预编译 SQL - 性能更高 六、JDBC 增删改操作 插入数据&#xff1a; 更新数据&#xff1a; 删除数据&#xff1a; 七、MyBatis 介绍 八、MyBatis 入门程序 引…...

虚拟机开发环境搭建与内网迁移

以下是关于在虚拟机中搭建开发环境并迁移至内网的详细步骤及注意事项&#xff0c;适用于需要在内网隔离环境中进行开发的场景&#xff08;如企业安全要求、离线开发等&#xff09;&#xff1a; ‌一、虚拟机开发环境搭建‌ ‌1. 选择虚拟机平台‌ ‌推荐工具‌&#xff1a; ‌V…...

【HFP】蓝牙HFP协议音频连接核心技术深度解析

目录 一、音频连接建立的总体要求 1.1 发起主体与时机 1.2 前提条件 1.3 同步连接的建立 1.4 通知机制 二、不同主体发起的音频连接建立流程 2.1 连接建立触发矩阵 2.2 AG 发起的音频连接建立 2.3 HF 发起的音频连接建立 三、编解码器连接建立流程 3.1 发起条件 3.…...

PowerBI 表格显示无关联的表数据

假设有两张没有建立关联的数据表: 产品表 库存表 我们将他们放入表格里显示&#xff0c;数据会出问题。 因为 [库存表] 里的数据有除 [产品表] 以外的产品的数据&#xff0c;所以PBI无法从两张表中找到一一对应的数据。 解决方法:(不建立关联关系的情况下) 新建一个度量值&a…...

观察者模式详解与C++实现

1. 模式定义 观察者模式&#xff08;Observer Pattern&#xff09;是一种行为型设计模式&#xff0c;定义了对象间的一对多依赖关系。当一个对象&#xff08;被观察者/主题&#xff09;状态改变时&#xff0c;所有依赖它的对象&#xff08;观察者&#xff09;都会自动收到通知…...

用ffmpeg 实现拉取h265的flv视频转存成264的mp4 实现方案

1.需要对ffmpeg进行源码修改 这里使用 https://github.com/numberwolf/FFmpeg-QuQi-H265-FLV-RTMP 这位大神提供的源码 需要 x265_3.2.1.tar.gz last_x264.tar.bz2 fdk-aac-2.0.1.tar.gz FFmpeg-QuQi-H265-FLV-RTMP-master.zip 这些包 升级ubuntu18.04 apt update a…...

《AI赋能职场:大模型高效应用课》第8课 AI辅助职场沟通与协作

【本课目标】 掌握AI辅助邮件、沟通话术的优化技巧。学习利用AI快速生成高效的会议纪要。通过实操演练&#xff0c;提升职场沟通效率与协作能力。 【准备工具】 DeepSeek大模型&#xff08;deepseek.com&#xff09;百度文心一言&#xff08;yiyan.baidu.com&#xff09; 一…...

PowerBI下载安装教程

1、打开官方下载链接&#xff0c;或者Microsoft store里搜索下载&#xff08;通过官网下载可以选择安装路径&#xff0c;应用商店直接会安装到默认路径里&#xff09;。 2、等待下载成功后&#xff0c;直接点击【打开】即可。...

PowerBI如何钻取到明细

PowerBI如何钻取到明细 最近做项目领导提到一需求&#xff0c;在查看账龄的时候&#xff0c;还想查看到它的一个明细情况。 PowerBI如何钻取到明细&#xff0c;以一个案例分享下&#xff1a; 第一步&#xff1a;我们先查看账龄的一个分布情况&#xff1a; 第二步&#xff1a;…...

常见算法题

import java.util.*;class TreeNode {int val;TreeNode left;TreeNode right;TreeNode() {}TreeNode(int val) { this.val val; }TreeNode(int val, TreeNode left, TreeNode right) {this.val val;this.left left;this.right right;} }public class test_04_16 {//获取二叉…...

C语言超详细结构体知识

1.自定义类型&#xff1a;结构体的介绍 在之前的博客中&#xff0c;我们简单介绍过了关于结构体的基本知识&#xff0c;这里我们稍微复习一下。 结构体(struct)是C语言中一种重要的复合数据类型&#xff0c;它允许将不同类型的数据组合成一个整体。 1.1结构体的定义 结构体使…...

2N60-ASEMI功业控制与自动化专用2N60

编辑&#xff1a;ll 2N60-ASEMI功业控制与自动化专用2N60 型号&#xff1a;2N60 品牌&#xff1a;ASEMI 封装&#xff1a;TO-220F 批号&#xff1a;最新 最大漏源电流&#xff1a;2A 漏源击穿电压&#xff1a;600V RDS&#xff08;ON&#xff09;Max&#xff1a;5.00Ω…...

发现“横”字手写有难度,对比两个“横”字

我发现手写体“横”字“好看”程度&#xff0c;难以比得上印刷体&#xff1a; 两个从方正简体启体来的“横”字&#xff1a; 哪个更好看&#xff1f;我是倾向于左边一点。 <div style"transform: rotate(180deg); display: inline-block;"> 左边是我从方正简…...

深入解析 HTML5 Web IndexedDB 数据库:构建高效离线应用的基石

摘要 在现代 Web 应用开发中,离线访问和高效处理大量结构化数据的需求日益增长。HTML5 的 IndexedDB 作为一种强大的客户端 NoSQL 数据库,为开发者提供了可靠的解决方案。本文将全面介绍 IndexedDB 的特性、语法、方法、应用实例、使用场景,以及其优势与劣势,帮助开发者深…...

17-算法打卡-哈希表-快乐数-leetcode(202)-第十七天

1 题目地址 202. 快乐数 - 力扣&#xff08;LeetCode&#xff09;202. 快乐数 - 编写一个算法来判断一个数 n 是不是快乐数。「快乐数」 定义为&#xff1a; * 对于一个正整数&#xff0c;每一次将该数替换为它每个位置上的数字的平方和。 * 然后重复这个过程直到这个数变为 1…...

决战浏览器渲染:减少重绘(Repaint)与重排(Reflow)的性能优化策略

在现代Web开发中&#xff0c;流畅的用户体验是衡量应用质量的关键指标之一。用户与界面的每一次交互&#xff0c;背后都牵动着浏览器复杂而精密的渲染过程。当这个过程不够高效时&#xff0c;用户就会感受到卡顿、延迟&#xff0c;甚至页面“掉帧”。在众多影响渲染性能的因素中…...

深度解析生成对抗网络:原理、应用与未来趋势

在人工智能的浩瀚星空中&#xff0c;生成对抗网络&#xff08;Generative Adversarial Networks&#xff0c;GAN&#xff09;犹如一颗璀璨的明星&#xff0c;自 2014 年由 Ian Goodfellow 等人提出以来&#xff0c;便以其独特而强大的生成能力&#xff0c;在计算机视觉、自然语…...

电能质量治理解决方案:构建高效、安全的电力系统

随着“双碳”目标的推进及新型电力系统的快速发展&#xff0c;大量电力电子设备&#xff08;如光伏逆变器、充电桩、变频器等&#xff09;接入电网&#xff0c;导致谐波畸变、无功功率激增、电压波动等问题日益突出。电能质量恶化不仅威胁设备安全&#xff0c;还影响电网稳定运…...

生态篇|多总线融合与网关设计

引言 1. 车内多总线概览 2. 主流车载总线技术对比 3. 网关设计原则与架构 4. 协议转换与映射策略 5. 安全与诊断功能集成...

热门与冷门并存,25西电—电子工程学院(考研录取情况)

1、电子工程学院各个方向 2、电子工程学院近三年复试分数线对比 学长、学姐分析 由表可看出&#xff1a; 1、电子科学与技术25年相较于24年上升20分 2、信息与通信工程、控制科学与工程、新一代电子信息技术&#xff08;专硕&#xff09;25年相较于24年下降25分 3、25vs24推…...

HDFS入门】HDFS安全与权限管理解析:从认证到加密的完整指南

目录 引言 1 认证与授权机制 1.1 Kerberos认证集成 1.2 HDFS ACL细粒度控制 2 数据加密保护 2.1 传输层加密(SSL/TLS) 2.2 静态数据加密 3 审计与监控体系 3.1 操作审计流程 3.2 安全监控指标 4 权限模型详解 4.1 用户/组权限模型 4.2 umask配置原理 5 安全最佳实…...

合成数据中的对抗样本生成与应用:让AI模型更强、更稳、更安全

目录 合成数据中的对抗样本生成与应用&#xff1a;让AI模型更强、更稳、更安全 一、什么是对抗样本&#xff1f; 二、为什么要在合成数据中引入对抗样本&#xff1f; 三、对抗样本在图像合成数据中的生成方法 ✅ 方法1&#xff1a;FGSM&#xff08;Fast Gradient Sign Met…...

考研系列-计算机网络-第二章、物理层

一、通信基础 1.物理层基本概念 2.数据通信基础知识...

uni-app 安卓10以上上传原图解决方案

在Android 10及以上版本中&#xff0c;由于系统对文件访问的限制&#xff0c;使用chooseImage并勾选原图上传后&#xff0c;返回的是图片的外部存储路径&#xff0c;如&#xff1a;file:///storage/emulated/0/DCIM/Camera/。这种外部存储路径&#xff0c;无法直接转换成所需要…...

关于element的dialog的取消(关闭弹窗)方法触发两次

在这里插入图片描述 关闭的时候加个修饰符.native close.native...

vue,uniapp解决h5跨域问题

如果有这样的跨域问题&#xff0c;解决办法&#xff1a; ✅ 第一步&#xff1a;在项目根目录下创建 vue.config.js 和 package.json 同级目录。 // vue.config.js module.exports {devServer: {proxy: {/api: {target: https://app.yycjkb.cn, // 你的后端接口地址changeOrig…...

2025-04-18 李沐深度学习3 —— 线性代数

文章目录 1 线性代数1.1 标量、向量与矩阵1.2 矩阵概念1.3 按特定轴求和 2 实战&#xff1a;线性代数2.1 标量2.2 向量2.3 矩阵2.4 张量2.5 降维2.6 点积2.7 矩阵-向量积2.8 矩阵-矩阵乘法2.9 范数2.10 练习 1 线性代数 1.1 标量、向量与矩阵 标量&#xff08;Scalar&#xff…...

2026《数据结构》考研复习笔记三(C++高级教程)

C高级教程 一、文件和流二、异常处理三、命名空间四、模板五、信号处理六、多线程 一、文件和流 iostream 用于标准输入/输出&#xff08;控制台I/O&#xff09;&#xff0c;处理与终端&#xff08;键盘输入和屏幕输出&#xff09;的交互 包含以下全局流对象&#xff1a; cin&…...

python进阶: 深入了解调试利器 Pdb

Python是一种广泛使用的编程语言&#xff0c;以其简洁和可读性著称。在开发和调试过程中&#xff0c;遇到错误和问题是不可避免的。Python为此提供了一个强大的调试工具——Pdb&#xff08;Python Debugger&#xff09;。 Pdb是Python标准库中自带的调试器&#xff0c;可以帮助…...

前端资源加载失败后重试加载(CSS,JS等引用资源)

前端资源加载失败后的重试 .前端引用资源时出现了资源加载失败(这里针对的是路径引用异常或者url解析错误时) 解决这个问题首先要明确一下几个步骤 1.什么情况或者什么时候重试 2.如何重试 3.重试过程中的边界处理 这里引入里三个测试脚本&#xff0c;分别加载里三个不同的脚…...

每日算法【双指针算法】(Day 2-复写零)

双指针算法 1.算法题目(复写零)2.讲解算法原理3.编写代码 1.算法题目(复写零) 注意&#xff1a;不要越界&#xff0c;不能开额外的数组&#xff0c;只能从现有数组上进行操作&#xff0c;没有返回值。 2.讲解算法原理 解法&#xff1a;双指针操作 先根据“异地”操作&#xf…...

【C++深入系列】:模版详解(上)

&#x1f525; 本文专栏&#xff1a;c &#x1f338;作者主页&#xff1a;努力努力再努力wz &#x1f4aa; 今日博客励志语录&#xff1a; 你不需要很厉害才能开始&#xff0c;但你需要开始才能很厉害。 ★★★ 本文前置知识&#xff1a; 类和对象&#xff08;上&#xff09; …...