JAVA Web_定义Servlet2_学生登录验证Servlet
题目
页面StudentLogin.html中有一HTML的表单代码如下:
<form action="studentLogin" method="post">学生姓名:<input type="text" name="stuName" value=""><br>登录密码:<input type="password" name="stuPwd" value=""><br><input type="submit" name= "" value="登录">
</form>
现按下面的要求定义一个Servlet:
1)定义一个Servlet,将StudentLogin.html的表单数据提交到这个Servlet,根据StudentLogin页面表单中的设置来配置本Servlet的访问路径,要求采用注解方式配置访问路径;
2)本Servlet中获取StudentLogin.html表单提交的学生姓名、登录密码,若姓名为“赵钱孙”,且密码为“123456”,则将该学生姓名添加为request对象以实现数据流转,再将请求内部派发home.jsp;反之则显示“登录失败,3秒钟后请重新登录”,并在3秒后自动跳转StudentLogin.html页面;
3)设置输出Servlet的响应数据类型为html。
注释:
1)设置request作用域:
request.setAttribute(String,Object);
2)页面请求内部派发:
request.getRequestDispatcher(url).forward(request,response);
3)3秒后页面自动跳转
response.setHeader("Refresh","3;URL=路径");
注意:只用编写Servlet文件,不用编写jsp和html文件。
本章知识重点:
目录
HTML里的表单元素
解读表单代码:###
1.定义Servlet:
1.2 方便验证——创建一个html文件 ##
1.3 编写Servlet_注解方式配置Servlet路径
2. doPost方法重写(重载)#####
2.1 分析题意: #####
2.2 设置request作用域:###
请求作用域是何物
2.3 将请求内部派发:
2.4 3秒后页面自动跳转
完整代码参考 :
前文链接:JAVAWeb_Servlet初识与代码入门-CSDN博客
JAVAWeb_Servlet初识与代码入门-CSDN博客
我们本节重中之重,便是学会处理POST请求。但是先来看“题目”一上来,给了我们一段代码——“StudentLogin.html中有一HTML的表单代码”。这段代码是什么,对于我们处理的POST请求有什么关系?
HTML里的表单元素
<form ......>......
</form>
<form>一出现,而</form>一结尾(体现标签成对出现的特点),就表示两个标签中间的代码是表单代码。
表单代码一般放在HTML文件里。因为:HTML是一种用于构建网页的标记语言,它包含多种元素,用于定义网页的结构、内容和布局。表单只是HTML中众多元素之一,用于收集用户输入的数据并提交到服务器。
表单代码收集用户数据?这就很妙了,请求正是要收集(服务器所需的)用户数据:GET请求里我们通过URL的查询字符串的方法收集用户数据;POST请求里我们就用表单收集用户数据。
解读表单代码:
接下来,我们通过解读这段表单代码来了解表单代码怎么收集用户信息。
<form action="studentLogin" method="post">...
</form>
<form>
标签成对出现。所以一头为<form>,末尾</form>。
我们再着重看第一行:
<form action="studentLogin" method="post">
// 在写form代码时,就要规定action和method,这是<form> 标签的属性,它们定义了表单提交时的行为。
// action="studentLogin" ,指定表单数据提交的目标URL ——因为这里的表单数据不是为了收集而收集,而是为了交给服务器处理。服务器怎么处理,自然是交给能处理的POST请求的Servlet。所以这个URL,正是Servlet的URL映射路径,表单收集到的数据都会通过URL,找到并交给能处理这段数据的Servlet。//指定表单数据提交的方式为HTTP POST方法。POST方法通常用于提交敏感数据(如登录信息),因为它不会将数据暴露在URL中。
若读者通过了GET请求那一题,便知道GET请求传数据是直接在URL里传参数的键值对(可谓是光明正大,密码都是通过明文并且不加修饰直接交给Servlet。客户敢用,我们都不敢这么写)。
现在来看:<form>标签里的代码,为了更好理解,我们结合运行.html文件出的表单。
学生姓名:<input type="text" name="stuName" value=""><br>
登录密码:<input type="password" name="stuPwd" value=""><br><input type="submit" name= "" value="登录">
先来直观理解<form>生成的表单内容:
可以看到:
①:“学生姓名:”就直接显示,后面"<input ......>"对应了网页里生成的输入框。
②:“登录密码:”也直接显示,后面"<input ......>"对应了网页里生成的输入框。
③:因为只有<input......>它其实也是输入框,不过它已经被赋值了“登录”。所以这个框直接显示“登录”。
这里大家会注意新的标签<input>:介绍如下
<input type="text" name="username" value="default value"><br>
//<input>也有三个关键属性:在定义时会让我们初始化
// 1. type 属性定义了输入字段的类型。text:普通文本输入框,用户可以输入任意文本。
// 2. name 属性为输入字段指定一个名称,这个名称在表单提交时用于标识该输入字段(说人话,就是该输入框的名称&&参数的键值对中的“键”)
// 3. value 属性定义了输入字段的默认值或当前值。(说人话,就是输入框里的数据 && 参数键值对中的“值”)// <br>是换行
那么此处这三句代码就好理解了:
学生姓名:<input type="text" name="stuName" value=""><br>
// 学生姓名:直接打印输出在页面
// <input> 为HTML输入元素,用于创建一个输入框
// type="text" 表示为一个文本输入框,用户可以在其中输入任意文本。
// name="stuName" 为输入框指定一个名称,服务器端可以通过这个名称来获取对应的值
// value="" 指定输入框的默认值。这里默认值为空,表示用户需要手动输入学生姓名。
登录密码:<input type="password" name="stuPwd" value=""><br>
// 这是一个密码输入框,类型(type)为"password"。其特点:输入时会以隐藏形式显示(通常显示为圆点或星号),以保护用户输入的敏感信息。
// 输入框名称为stuPwd (键值对中的键)
// 默认输入值为空,等待学生输入密码 (键值对中的值)
<input type="submit" name= "" value="登录">
//这个输入框,前面就不显示什么文本信息了。
//类型为"submit",name=""为按钮指定一个名称。这里名称为空,表示该按钮没有特定的名称。
// 但这个按钮(输入框)默认值为“登录”,于是在网页上就会在这个按钮上浮现这个值
// submit类型的输入框:用户点击后触发表单提交操作。
也就是说,提交的表单包含了两个参数对(学生姓名 和登录密码 与其对应的值们) 当点击submit类型的按钮,就会提交表单。表单会提交到我们编写的servlet里(因为收集用户端数据,就是为了交给服务器端处理)。为了处理这种以表单形式收集数据的请求,我们将这种请求称为POST请求,于是Servlet编写的处理请求的方法—— 正是doPost(一种专门处理POST请求)方法。
1.定义Servlet:
接下来,我们开始写代码。
首先得创建JAVA Web项目,作者这里就创建好了:
接着需要新建一个Servlet文件:
Servlet名字也没规定,作者自定义了。
Eclipse生成的代码,我删了些(锻炼代码能力嘛)
1.2 方便验证——创建一个html文件
如标题所示,就是为了方便验证。接下来展示怎么创建一个html文件。
自动生成的HTML File具有以下代码:
这里我们需要编写的HTML代码是一段表单,因为题上已经给出,我们直接copy上去(呵呵)
(忽略.html的名字,就按照题意取名,作者是后面发现不对劲的 T_T)
1.3 编写Servlet_注解方式配置Servlet路径
使用注解方式配置Servlet,我们都会采用@WebServlet(),这是前面提过的以及Servlet的代码开头、整体框架,我就直接开头喽~
@WebServlet("/")
public class stuLoginservlet extends HttpServlet
{// 继承HttpServlet,是为了什么?为了保证自己写的Servlet在语法上实现Servlet所有方法;语法上实现,意味着我们开发者不需要写那些代码// 而又可以继承HttpServlet提供的doGet和doPost方法,根据我们的需要进行改写
}
类名须于.java文件名一致。
我们现在来思考:用户可以通过哪个URL访问到我们的Servlet,这也是@WebServlet注释的作用。
再看一眼题意:
根据我们前面“表单代码” 以及这里不断明示,为Servlet配置的路径,正是表单要提交的URL("studentLogin"),而表单提交的方式"method = "post"",也意味着这份表单要交给能处理post请求的servlet。
@WebServlet("/studentLogin")//表单根据action的值找到g该值映射的这个servlet
public class stuLoginservlet extends HttpServlet
{//为了处理post请求,我们得改写doPost方法protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{}
}
2. doPost方法重写(重载)
2.1 分析题意:
在分析题意中,我们会把整体代码逻辑和能写的代码完成~
本Servlet获取StudentLogin.html表单提交的学生姓名、登录密码
很明显,我们需要先获取参数,没问题—— request.getParameter();
String name = request.getParameter("stuName");//传进去的参数,一定是参数对的键。因为要获取用户输入的值:这里获取的是stuName的值
String pwd = request.getParameter("stuPwd");//这里pwd获取的是:用户对应stuPwd这个输入框的值
“若则”关系,那么需要使用if-else :
//获取参数的值
String name = request.getParameter("stuName");
String pwd = request.getParameter("stuPwd");
//若则关系
if()
{}
else
{}
//若姓名为"赵钱孙",密码为"123456"
if("赵钱孙".equals(name) && "123456".equals(pwd))
//String.equals(String) 判断两个字符串是否相等,第一个String不能为null否则会抛出异常
接下来写伪代码:
//获取参数的值
String name = request.getParameter("stuName");
String pwd = request.getParameter("stuPwd");
//若则关系
if("赵钱孙".equals(name) && "123456".equals(pwd))
{//将该学生姓名添加为request对象以实现数据流转,再将请求内部派发home.jsp
}
else
{//反之则显示“登录失败,3秒钟后请重新登录”,并在3秒后自动跳转StudentLogin.html页面;
}
在浏览器上显示页面信息?这我们学过啊,直接写:
//在浏览器上显示信息//1.获取响应输出流
PrintWriter out = response.getWriter();
//2.输出信息
out.println("登录失败,3秒钟后请重新登录");
//获取参数的值
String name = request.getParameter("stuName");
String pwd = request.getParameter("stuPwd");
//若则关系
if("赵钱孙".equal(name) && "123456".equal(pwd))
{//将该学生姓名添加为request对象以实现数据流转,再将请求内部派发home.jsp
}
else
{//反之则显示“登录失败,3秒钟后请重新登录”,并在3秒后自动跳转StudentLogin.html页面;PrintWriter out = response.getWriter();out.println("登录失败,3秒钟后请重新登录");
}
其他的“内部派发”,"自动跳转",我们还没学,但是代码逻辑基本完整,后续补充一下就能上手。还有些细节需要处理:
3)设置输出Servlet的响应数据类型为html。
//这也是我们学习过的—— response.setContentType();
response.setContentType("text/html;charset=UTF-8");
现在来综合我们写的代码,来发现还有哪些还没解决:
@WebServlet("/studentLogin")
public class stuLoginservlet extends HttpServlet
{protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{//以后都要习惯,只要涉及到中文;不管题上是否让响应输出html格式,都得第一步设置响应的编码格式// 1.设置编码response.setContentType("text/html;charset=UTF-8");// 2. 获取请求参数的值String name = request.getParameter("stuName");String pwd = request.getParameter("stuPwd");// 3. 判断请求参数值if("赵钱孙".equals(name) && "123456".equals(pwd)){//将该学生姓名添加为request对象以实现数据流转,再将请求内部派发home.jsp}else{//反之则显示“登录失败,3秒钟后请重新登录”,并在3秒后自动跳转StudentLogin.html页面;PrintWriter out = response.getWriter();out.println("登录失败,3秒钟后请重新登录");}}
}
还没解决的问题:
1. 对于请求体的编码,服务器并没设置编码—— 如果请求体参数的值为中文,服务器默认的编码是不支持识别中文。
2. 将该学生姓名添加为request对象以实现数据流转,再将请求内部派发home.jsp
3. 在3秒后自动跳转StudentLogin.html页面;
对于第1点,我们只需熟悉(掌握)这句话:
request.setCharacterEncoding("UTF-8");
//处理表单数据,一定要设置请求体的编码,确保服务器能正确解析传来的字符(中文)
所以处理Post请求,一定二话不说,方法体的第一步是两个编码:
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
还剩最后两点:
出题人也是很善良体贴了,都贴上了相应的方法,所以这篇作者会重点讨论第一个方法,后面两个方法直接考虑怎么用就完了(锻炼我们现学现卖的技能):
2.2 设置request作用域:
方法介绍(参考官方文档格式)
public void request.setAttribute(String name,Object obj);
即 request.setAttribute(String name,Object obj);
方法描述
将一个对象obj与指定的名称name绑定到当前请求的作用域中。此方法允许将数据存储
HttpServletRequest
对象(此处为doPost里的request)中,以便在同一个请求的后续处理过程中访问这些数据。例如,可以将数据传递给后续的Servlet或JSP页面。(此处题意为传给home.jsp)
参数
name
:要绑定到请求作用域的属性名称。该名称必须是String
类型,且不能为null。
o
:要绑定到请求作用域的属性值。该值可以是任何Object
类型,包括null
异常
IllegalArgumentException
:如果name
为null
。
注意:
· 作用域限制:
使用
setAttribute
方法设置的属性仅在当前请求的作用域中有效。一旦请求结束,这些属性将不再可用。· 覆盖属性:
如果已经存在一个与指定名称相同的属性,调用
setAttribute
方法将覆盖原来的属性值。
请求作用域是何物
请求作用域 是Web应用程序中的一种数据存储范围,它与单个HTTP请求相关联。好理解,这个作用域就是存数据的。
为什么需要请求作用域。(即它的作用):刚刚介绍的设置request的作用域方法,结合此处所说的请求作用域。就知道设置request的作用域实际上就是把一对参数(它的名称和值)存进请求作用域。从题意上,我们其实能窥见请求作用域的作用——将数据传递给后续的Servlet或JSP页面
(作者觉得这出题人这里描述得有问题,更恰当地——“将学生姓名添加到request对象”)
更加完整的作用:
数据共享——在处理一个HTTP请求时,可能需要在多个组件(如Servlet、JSP页面)之间共享数据。请求作用域提供了一个方便的地方来存储这些数据,使得它们可以在请求的生命周期内被访问。(重点)
简化数据传递——通过将数据存储在请求作用域中,可以避免在组件之间手动传递数据。例如,从Servlet到JSP页面,或者从一个Servlet到另一个Servlet。
于是,结合分析,代码如下:
request.setAttribute("StuName",name);//设为request作用域的对象之一,又是一个键值对啊盆油:键作者自己取了,值为我们获取到的参数值name
@WebServlet("/studentLogin")
public class stuLoginservlet extends HttpServlet
{protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{// 1.设置编码request.setCharacterEncoding("UTF-8");response.setContentType("text/html;charset=UTF-8");// 2. 获取请求参数的值String name = request.getParameter("stuName");String pwd = request.getParameter("stuPwd");// 3. 判断请求参数值if("赵钱孙".equal(name) && "123456".equal(pwd)){//将该学生姓名添加为request对象以实现数据流转request.setAttribute("StuName",name);//再将请求内部派发home.jsp}else{//反之则显示“登录失败,3秒钟后请重新登录”,并在3秒后自动跳转StudentLogin.html页面;PrintWriter out = response.getWriter();out.println("登录失败,3秒钟后请重新登录");}}
}
2.3 将请求内部派发:
2)页面请求内部派发:
request.getRequestDispatcher(url).forward(request,response);
很明显,若想实现“再将请求内部派发home.jsp”,我们只要把这句代码copy上去,把参数正确填写就能实现:
request.getRequestDispatcher("/home.jsp").forward(request,response);
// url 是一个字符串,表示目标资源的路径。推荐加“/”,绝对路径写法
//后面的request,response不用改变,我们当前servlet的request,response就是这个名字
2.4 3秒后页面自动跳转
3)3秒后页面自动跳转
response.setHeader("Refresh","3;URL=路径");
题目要求:3s后页面自动跳转到 StudentLogin.html 页面。只需要替换url的值就行(👌)
response.setHeader("Refresh","3;URL=StudentLogin.html");
我们所有代码都已经完成:
@WebServlet("/studentLogin")
public class stuLoginservlet extends HttpServlet
{protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{// 1.设置编码request.setCharacterEncoding("UTF-8");response.setContentType("text/html;charset=UTF-8");// 2. 获取请求参数的值String name = request.getParameter("stuName");String pwd = request.getParameter("stuPwd");// 3. 判断请求参数值if("赵钱孙".equals(name) && "123456".equals(pwd)){//将该学生姓名添加为request对象以实现数据流转request.setAttribute("StuName",name);//再将请求内部派发home.jsprequest.getRequestDispatcher("/home.jsp").forward(request,response);}else{//反之则显示“登录失败,3秒钟后请重新登录”,并在3秒后自动跳转StudentLogin.html页面;PrintWriter out = response.getWriter();out.println("登录失败,3秒钟后请重新登录");response.setHeader("Refresh","3;URL=StudentLogin.html");}}
}
验证:
显示:
重新跳转:
另一种情况:
没事儿,现在保证自己写的代码逻辑写对就行。我们本来也没写home.jsp ,后面我们揭晓jsp。
完整代码参考 :
@WebServlet("/studentLogin")
public class stuLoginservlet extends HttpServlet
{protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{// 1.设置编码request.setCharacterEncoding("UTF-8");response.setContentType("text/html;charset=UTF-8");// 2. 获取请求参数的值String name = request.getParameter("stuName");String pwd = request.getParameter("stuPwd");// 3. 判断请求参数值if("赵钱孙".equals(name) && "123456".equals(pwd)){//将该学生姓名添加为request对象以实现数据流转request.setAttribute("StuName",name);//再将请求内部派发home.jsprequest.getRequestDispatcher("/home.jsp").forward(request,response);}else{//反之则显示“登录失败,3秒钟后请重新登录”,并在3秒后自动跳转StudentLogin.html页面;PrintWriter out = response.getWriter();out.println("登录失败,3秒钟后请重新登录");response.setHeader("Refresh","3;URL=StudentLogin.html");}}
}
经过这两篇文章的铺垫,对于定义基本Servlet我们至少不会再手足无措——多敲多敲,希望读者(包括作者)能在定义Servlet时得心应手(放心,后面还有练习,作者补充知识的篇幅就不这么大了)。
前文链接:JAVAWeb_Servlet初识与代码入门-CSDN博客
JAVAWeb_Servlet初识与代码入门-CSDN博客
作者有话说:(我真没想到能破万(扶额邪魅一笑),嘶~为了咱的读者后期好查阅,我会将一些篇幅大的重要部分单拎出来(点头))
不过能看到这里的读者,作者也要为你点赞👍
相关文章:
JAVA Web_定义Servlet2_学生登录验证Servlet
题目 页面StudentLogin.html中有一HTML的表单代码如下: <form action"studentLogin" method"post">学生姓名:<input type"text" name"stuName" value""><br>登录密码:…...
【信息系统项目管理师】高分论文:论信息系统项目的范围管理(电网公司保供电可视化系统)
更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 论文1、规划范围管理2、收集需求3、定义范围4、创建工作分解结构(WBS)5、确认范围6、控制范围论文 2017年5月,我作为项目经理参加XX省电网公司保供电可视化系统应用项目的建设,该项目是2017年XX省电网信息化…...
如何高效查询订单销售情况与售罄率:从SQL到架构优化的全流程设计
在电商平台、SaaS多租户系统中,订单数据作为核心数据之一,承载了关键的运营指标,如销售额、商品售罄率、订单转化等。随着数据量的持续增长,如何在大数据量条件下快速、稳定地获取统计信息,成为系统设计的重点之一。 本文将从查询目标分析入手,结合数据库设计优化与典型…...
RTT添加一个RTC时钟驱动,以DS1307为例
添加一个外部时钟芯片 这里多了一个选项 复制drv_rtc.c,重命名为drv_rtc_ds1307.c 添加到工程中 /*** @file drv_rtc_ds1307.c* @brief * @author jiache (wanghuan3037@fiberhome.com)* @version 1.0* @date 2025-01-08* * @copyright Copyright (c) 2025 58* */ #...
Leetcode 独一无二的出现次数
可以通过哈希集来判断是否独一无二,如果set中已经包含了count,那么set.add(count)会返回false class Solution {public boolean uniqueOccurrences(int[] arr) {Map<Integer, Integer> map new HashMap<>();for(int i 0; i < arr.leng…...
ubuntu上,e1000e,i1210有线网卡驱动安装
1,下载附属资源,解压对应的压缩包 tar zxf e1000e-<x.x.x>.tar.gz 2,进入压缩包src目录下 cd e1000e-<x.x.x>/src/ 3,安装 sudo make install 4,重启 reboot e1000e Intel官网下载地址 https://www.i…...
Xmind 2025 中文思维导图
Xmind 2025 中文思维导图 一、介绍 Xmind ,是一款出色的思维导图和头脑风暴软件,拥有美观的智能配色方案,便于你轻松理清思路捕捉创意。丰富的导图模板及多种创意整合工具,可助力导图迸发更多活力。还拥有强大演说模式ÿ…...
搭载DeepSeek|暴雨AI教育一体机加速AI教育普及
近日,在全国智算大会上,暴雨公司展示了新一代 AI 教育一体机,通过全栈国产化技术与 DeepSeek 模型的深度适配,打造低成本、高性能的人工智能教育解决方案,助力 AI 教育普及与教育数字化转型。 暴雨AI教育一体机&#…...
【字节跳动AI论文】Seaweed-7B:视频生成基础模型的高成本效益培训
摘要:本技术报告介绍了一种经济有效的视频生成基础模型训练策略。 我们提出了一种中等规模的研究模型,大约有70亿个参数(7B),称为Seaweed-7B,使用665,000个H100 GPU小时从头开始训练。 尽管使用适度的计算资…...
java 线程池:IO密集型的任务(CPU核数 * 2 + 1),为什么这么设置,计算密集型任务( CPU核数+1 ),为什么这么设置
文章目录 1. IO密集型任务:`CPU核数 2 + 1`为什么这样设置?示例场景:2. CPU密集型任务:`CPU核数 + 1`为什么这样设置?示例场景:3. 两者的核心差异4. 实际应用中的注意事项5. 总结在Java线程池的配置中, IO密集型和 CPU密集型任务的线程数设置逻辑存在显著差异,核心原…...
RabbitMQ消息的可靠性
生产者的可靠 首先,我们一起分析一下消息丢失的可能性有哪些。 消息从发送者发送消息,到消费者处理消息,需要经过的流程是这样的: 消息从生产者到消费者的每一步都可能导致消息丢失: ● 发送消息时丢失:…...
涵盖通算、智算、超算、量算!“四算合一”算力网络投入使用,效率提升20%
近日,由中国移动承建的全国首个“四算合一”算力网络调度平台日前正式投入使用。这座“数字三峡”的诞生,标志着我国算力基建完成从“单兵作战”到“军团协同”的跃迁。 什么是“四算合一”? “四算合一”是指将通用算力、智能算力、超级算…...
【Redis】数据结构和内部编码
先来复习一下之前学过的几个基本的全局命令: keys:用来查看匹配规则的keyexists:用来判定执行key是否存在del:删除指定的keyexpire:给key设置过期时间ttl:查询key的过期时间type:查询key对应的…...
考研数据结构之二叉树(一)(包含真题及解析)
考研数据结构之二叉树(一) 下期预告:后续文章将深入探讨二叉树的遍历算法与高频考点(如平衡二叉树、线索二叉树)。 二叉树是数据结构中的核心内容之一,也是考研高频考点。本文将从定义和存储结构两方面展开…...
linux多线(进)程编程——番外1:内存映射与mmap
前言 在修真世界之外,无数异世界,其中某个叫地球的异世界中,一群人对共享内存的第二种使用方式做出了讲解。 内核空间与用户空间 内存空间的划分 Linux操作系统下一个进程的虚拟地址空间被分为用户空间与内核空间 Linux 内核空间在内存管…...
旧版 VMware 虚拟机迁移至 KVM 平台-案例2
项目背景 需将一台旧版 VMware 虚拟机(VMDK 格式)迁移至 KVM 虚拟化平台,具体要求如下: 格式转换:将 VMDK 转换为 QCOW2 格式。磁盘扩容:将原 40GB 磁盘扩展至 60GB。密码重置:修改 aiden 用户…...
六、adb通过Wifi连接
背景 收集是荣耀X40,数据线原装全新的,USB连上之后,老是断,电脑一直叮咚叮咚的响个不停,试试WIFI 连接是否稳定,需要手机和电脑用相同的WIFI. 连接 1.通过 USB 连接手机和电脑(打开USB调试等这些都略过) adb device…...
Kafka使用方式与底层原理解析
一、Kafka简介 Apache Kafka是一个分布式流处理平台,由LinkedIn开发并开源,现已成为实时数据管道和流应用的核心组件。它具备高吞吐量、低延迟、高可扩展性等特点,广泛应用于日志收集、消息系统、流处理等领域。 1.1 Kafka核心概念 Topic&…...
【Python内置函数的深度解析与应用】id
目录 前言:技术背景与价值当前技术痛点解决方案概述目标读者说明 一、技术原理剖析核心概念图解关键技术模块技术选型对比 二、实战演示环境配置要求核心代码实现1. 基础身份验证2. 不可变对象优化3. 对象生命周期追踪 运行结果验证 三、性能对比测试方法论量化数据…...
【Pandas】pandas DataFrame keys
Pandas2.2 DataFrame Indexing, iteration 方法描述DataFrame.head([n])用于返回 DataFrame 的前几行DataFrame.at快速访问和修改 DataFrame 中单个值的方法DataFrame.iat快速访问和修改 DataFrame 中单个值的方法DataFrame.loc用于基于标签(行标签和列标签&#…...
探索QEMU-KVM虚拟化:麒麟系统下传统与云镜像创建虚拟机的最佳实践
随着云计算和虚拟化技术的不断进步,虚拟化在管理服务器、隔离资源以及提升性能方面的好处越来越明显。麒麟操作系统Kylin OS是我们国家自己开发的操作系统,在政府机构和企业中用得很多。这篇文章会教你如何在麒麟操作系统上设置QEMU-KVM虚拟化环境&#…...
pycharm中调试功能讲解
一、调试前的准备工作 1. 准备一段测试代码 先写一个简单的Python脚本(比如计算阶乘),故意留点问题: def factorial(n):result 1for i in range(n):result * ireturn resultprint(factorial(5)) # 预期输出120࿰…...
SimpleITK (sitk) 中查看 DICOM 文件的像素位深(8位或16位)
在 SimpleITK (sitk) 中查看 DICOM 文件的像素位深(8位或16位),可以通过以下方法实现: 方法一:通过 图像像素数组的数据类型 判断 读取 DICOM 文件: 使用 sitk.ReadImage() 加载文件,生成图像对…...
day28图像处理OpenCV
文章目录 一、图像预处理4 边缘填充4.1 边界复制(BORDER_REPLICATE)4.2 边界反射(BORDER_REFLECT)4.3 边界反射101(BORDER_REFLECT_101)4.4 边界常数(BORDER_CONSTANT)4.5 边界包裹&…...
【NLP】 自然语言处理笔记
NLP的全称是Natuarl Language Processing,中文意思是自然语言处理,是人工智能领域的一个重要方向。自然语言处理(NLP)就是在机器语言和人类语言之间沟通的桥梁,以实现人机交流的目的。 人类语言是抽象的信息符号,其中蕴含着丰富的语义信息,人类可以很轻松地理解其中的含…...
LaTeX 的pstricks-add宏绘图练习
练习。 \documentclass[10pt]{article} \usepackage{pstricks-add} \pagestyle{empty} \begin{document} \psset{xunit1.0cm,yunit1.0cm,algebraictrue,dimenmiddle,dotstyleo,dotsize5pt 0,linewidth2.pt,arrowsize3pt 2,arrowinset0.25} \begin{pspicture*}(-16.5581463…...
WITRAN_2DPSGMU_Encoder 类中,门机制
WITRAN_2DPSGMU_Encoder 类中的门机制详解 在 WITRAN_2DPSGMU_Encoder 类中,门机制是核心部分,类似于 LSTM 或 GRU 的门控机制,用于控制隐藏状态的更新和输出。以下是对门机制的详细解析。 1. 门机制的作用 门机制的主要作用是:…...
OSI参考模型和TCP/IP模型
1.OSI参考模型 OSI模型: OSI参考模型有7层,自下而上依次为物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。(记忆口诀:物联网叔会用)。低…...
3D版的VLA:从3D VLA、SpatialVLA到PointVLA——3D点云版的DexVLA,在动作专家中加入3D数据
前言 之前写这篇文章的时候,就想解读下3D VLA来着,但一直因为和团队并行开发具身项目,很多解读被各种延后 更是各种出差,比如从25年3月下旬至今,连续出差三轮,绕中国半圈,具身占八成 第一轮 …...
java: 需要‘)‘ java: 未结束的字符串文字,java: 不是语句,怎么解决
java: 需要’)’ IDE运行当中因为字符串中的JSON串,导致编码不对,IDEA编码识别错误,编译不过,程序运行不起来,解决办法。 第一步,进行修改编码进行尝试 第二步,继续修改编码...
HarmonyOS:使用Refresh组件实现页面下拉刷新上拉加载更多
一、前言 可以进行页面下拉操作并显示刷新动效的容器组件。 说明 该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。该组件从API Version 12开始支持与垂直滚动的Swiper和Web的联动。当Swiper设置loop属性为true时&…...
HarmonyOS应用开发的工程目录结构
AppScope > app.json5 应用级的配置信息 AppScope > resources 这个目录下的base>element用于存放全局使用的基本元素,如字符串、颜色和布尔值。base>media目录则存储媒体、动画和布局等资源文件。如果模块下的resources的有同样的资源,那么…...
详解关于VS配置好Qt环境之后但无法打开ui界面
目录 找到Qt安装目录中designer.exe的路径 找到vs中的解决方案资源管理器 右键ui文件,找到打开方式 点击添加 然后把前面designer.exe的路径填到程序栏中,点击确定 然后设置为默认值,并点击确定 当在vs中配置好Qt环境之后,但…...
【JDBC-54.2】深入理解SQL注入攻击及JDBC防护方案
1. SQL注入攻击概述 SQL注入(SQL Injection)是当今Web应用程序中最常见、最危险的安全漏洞之一。它利用了应用程序对用户输入数据处理不当的缺陷,攻击者通过在输入字段中插入恶意的SQL代码片段,欺骗服务器执行非预期的SQL命令。 …...
PCDN通过个人路由器,用更靠近用户的节点来分发内容,从而达到更快地网络反应速度
PCDN(P2P CDN)的核心思想正是利用个人路由器、家庭宽带设备等分布式边缘节点,通过就近分发内容来降低延迟、提升网络响应速度,同时降低传统CDN的带宽成本。以下是其技术原理和优势的详细分析: 1. 为什么PCDN能更快&…...
【软件测试】bug 篇
本章思维导图: 1. 软件测试的生命周期 软件测试贯穿于整个软件的生命周期 流程阶段需求分析测试计划测试设计/开发测试执行测试评估上线运行维护具体工作内容1. 阅读需求文档 2. 标记可测试需求 3. 确定测试类型1. 制定测试范围 2. 选择测试工具 3. 分配资源1. 编写…...
java -jar指定类加载
在 Java 中,使用 java -jar 命令运行 JAR 文件时,默认会加载 JAR 文件的 MANIFEST.MF 文件中指定的 Main-Class。如果你想在运行时指定一个类来加载,可以通过以下方式实现: 方法 1:直接指定类路径和类名 如果你不想使用…...
MVC 模式深度解析与 Spring 框架实践研究
MVC 模式深度解析与 Spring 框架实践研究 摘要 MVC(Model-View-Controller)模式作为软件工程中最重要的架构模式之一,通过将应用逻辑划分为模型、视图和控制器三个独立组件,实现了代码的高内聚低耦合,显著提升了软件的可维护性和可扩展性。本文从 MVC 模式的核心思想出发…...
驱动开发硬核特训 · Day 11(下篇):从 virtio_blk 看虚拟总线驱动模型的真实落地
🔍 B站相应的视屏教程: 📌 内核:博文视频 - 总线驱动模型实战全解析 敬请关注,记得标为原始粉丝。 🔧 在上篇中,我们已经从理论视角分析了“虚拟总线驱动模型”在 Linux 驱动体系中的独特定位。…...
Java实现快速排序算法
用「整理书架」理解快速排序原理 想象你有一堆杂乱的书需要按大小排序,快速排序的步骤可以类比为: 1. 选一本“基准书”(比如最右侧的书) 2. 把书分成三堆: - 左边:比基准小的书 - 中间:基…...
3.3.2 应用层协议设计protobuf(二进制序列化协议)
文章目录 3.3.2 应用层协议设计protobuf(二进制序列化协议)1. 什么是协议设计什么是协议为什么说进程间通信就需要协议,而不是客户端与服务端之间为什么需要自己设计协议 2. 判断消息的完整性->区分消息的边界1.固定长度2. 特定符号3. 固定…...
软件测试过程模型:v模型、w模型、x模型、H模型
软件测试流程 获取测试需求编写测试计划制定测试方案开发和设计测试用例执行测试提交缺陷报告测试分析与评审提交测试报告准备下一版本测试 软件测试过程模型 v模型 【V模型是线性的操作方式】 优点: 验收测试的标准是用户的需求,用户需求对应指导…...
设计模式-代理模式
虚代理 根据需要创建对象...
cocos Spine资源及加载
COCOS Spine 资源加载 创建 Canvas 以及Camera 再进行spine 拖入 提供40个实战酷炫技能spine文件: Spine文件下载...
约翰·麦卡锡:我的人工智能之梦
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 约翰麦卡锡:我的人工智能之梦 一、引言:计算机科学的传奇人物…...
Scrapy结合Selenium实现搜索点击爬虫的最佳实践
一、动态网页爬取的挑战 动态网页通过JavaScript等技术在客户端动态生成内容,这使得传统的爬虫技术(如requests和BeautifulSoup)无法直接获取完整的内容。具体挑战包括: 数据加载异步化:数据并非一次性加载ÿ…...
Oracle数据库数据编程SQL<9.3 数据库逻辑备份和迁移Data Pump (EXPDP/IMPDP) 导出、导入补充>
Oracle Data Pump 是 Oracle 10g 引入的高效数据迁移工具,相比传统的 EXP/IMP 工具,它提供了更强大的功能和显著的性能提升。以下是对 EXPDP 和 IMPDP 工具的全面讲解。 目录 一、高级功能扩展 1. 数据过滤与转换 2. 加密与安全 二、性能调优进阶 1. 并行处理优化 2. …...
Vue 3 + TypeScript 实现一个多语言国际化组件(支持语言切换与内容加载)
文章目录 一、项目背景与功能概览二、项目技术架构与依赖安装2.1 技术栈2.2 安装依赖 三、国际化组件实现3.1 创建 i18n 实例3.2 配置 i18n 到 Vue 应用3.3 在组件中使用国际化内容3.4 支持语言切换 四、支持类型安全4.1 添加类型支持4.2 自动加载语言文件 一、项目背景与功能概…...
RK3506+net9+VS2022跨平台调试C#程序
下载GetVsDbg.sh ,这脚本会下载一个压缩包,然后解压缩,设置x权限等等。但是目标板子连不上,就想办法获取到下载路径,修改这个脚本,显示这个下载链接后,复制一下,用电脑下下来 修改好…...
c# 反射及优缺点
在C#中,反射(Reflection)是一种强大的机制,允许程序在运行时检查其自身的结构(如类型、属性、方法等),以及动态地调用对象的方法或访问其属性。反射主要用于那些在编译时不知道具体类型信息&…...