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

Servlet的几种用法?

serlet

1.定义:Serlet是使用Java编写的运行在服务器端的程序

2.Servlet主要是用于处理浏览器端发送的Http请求,并返回一个响应

3.Servlet开发需要使用到的包:

java.servlet

java.servlet.http

一.Servlet注册

1.xml方式

<servlet><servlet-name>HelloServlet</servlet-name><servlet-class>com.qfedu.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping><servlet-name>HelloServlet</servlet-name><url-pattern>/hello</url-pattern>
</servlet-mapping>

元素用于注册Servlet,它包含有两个主要的子元素:

: 设置Servlet的注册名称

: 设置Servlet的完整类名,包名+类型形式

元素用于映射已注册的Servlet的对外访问路径,它包含有两个子元素:

:Servlet的注册名称,必须和配对的中的相同

:设置访问该Servlet资源的路径

例如,访问:http://localhost:8080/test/hello时,

Tomcat服务器截取到访问的资源名称/hello,

先从web.xml的中找匹配的url,找到后,再查找对应的;

然后从节点中找匹配的,找到后,根据的类名,创建Servlet对象,执行其中的方法

2)Servlet的多重映射

注意:

同一个Servlet可以被映射到多个URL上,即中可以设置多个

<servlet><servlet-name>HelloServlet</servlet-name><servlet-class>com.qfedu.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping><servlet-name>HelloServlet</servlet-name><url-pattern>/HelloServlet</url-pattern><url-pattern>/hello</url-pattern>
</servlet-mapping>

2 @WebServlet注解方式

注解中使用主要属性:

属性名
nameServlet名字,可以自定义
value访问Servlet资源时匹配的路径,和urlPatterns互斥
urlPatterns允许当前Servlet有多个匹配方式,和value互斥
loadOnStartup标记容器是否启动时加载该Servlet
initParams当前Servlet的初始化配置WebInitParam 注解类型 ,属性包括name和value
@WebServlet(name = "HelloServlet", value = "/HelloServlet")
public class HelloServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.getWriter().write("get hello");}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.getWriter().write("post hello");}
}

二.servlet开发

Servlet由Servlet容器提供,所谓的Servlet容器是指提供了Servlet 功能的Web服务器(比如Tomcat),Servlet容器将Servlet动态的加载到服务器上。

servlet使用的主要接口和类:

Servlet接口

GenericServlet抽象类

HttpServlet类

Servlet接口中的主要方法:

方法
void init(ServletConfig config)初始化Servlet
void service(ServletRequet req, ServletResponse res)负责响应客户端请求
void destroy()销毁servlet对象,用于释放资源等
ServletConfng getServletConfig()获得Servlet 的相关配置信息,该方法会返回一个指向ServletConfig的引用
java.lang.Sring getServletInfo()获得Servlet开发者定义的信息

实现的原理就是:

Web服务器收到客户端的http请求,会针对每一次请求。分别创建一个对应的代表请求的requst对象和代表响应的response的对象

1 HttpServletRequest接口

HttpServletRequest接口继承了ServletRequest接口

HttpServletRequst对象代表客户端的请求,当客户端通过Http协议访问web服务器的时候,Http请求头中的所有信息都封装在这个对象中,开发人员通过这个对象中的方法,可以获得请求相关的信息.

常用方法:

方 法说 明
String getParameter(String name)获取请求中的参数,该参数是由name指定的
Enumeration getParameterNames()获取请求中所有参数的名字
String[] Enumeration getParameterValues(String name)返回请求中的参数值,该参数值是由name指定的
Map<K, V> getParameterMap()返回此请求的参数的 java.util.Map对象
ServletInputStream getInputStream()获取请求的输入流中的数据
String getQueryString()返回包含在请求 URL 中路径后面的数据字符串
Enumeration getAttributeNames()返回当前请求的所有属性的名字集合
Object getAttribute(String name)返回name指定的属性值
void setAttribute(String name, Object value)设置属性值
void removeAttribute(String name)删除指定的属性值
Cookies getCookies()返回客户端发送的Cookie
HttpSession getsession()返回和客户端相关的session,如果没有给客户端分session,则返回null
HttpSession getsession(boolean create)返回和客户端相关的session,如果没有给客户端分session,则创建一个session并返回
String getCharacterEncoding()返回请求的字符编码方式
void setCharacterEncoding(String env)设置请求中使用的字符编码方式
String getMethod()获取发送请求的方式,如get、post
int getContentLength()返回请求体的有效长度
String getProtocol()获取请求所使用的协议名称
String getRemoteAddr()获取客户端的IP地址
String getRemoteHost()获取客户端的名字
String getServerName()返回接受请求的服务器的名字
String getServerPath()获取请求的路径
String getHeader(String name)返回指定请求头的值

1.1获取请求参数

request.getParameter()方法

//根据表单中输入控件的name属性值,获取表单参数
//get和post方式都可以用该方法获取表单参数
//tomcat8下,get方式下,使用getParameter方法,中文不会乱码
String name = request.getParameter("name");
String pwd = request.getParameter("password");System.out.println(name);
System.out.println(pwd);

1.2post提交方式下中文的乱码处理

//post提交方式,解决中文乱码的方案
request.setCharacterEncoding("utf-8");

注意:使用tomcat8以上版本后,get方式不存在中文乱码问题

2 HttpServletResponse

HttpServletResponse对象服务器的响应。该对象中封装了向客户端发送数据,发送响应头,发送响应状态码的方法

方 法说 明
PrintWriter getWriter()返回Servlet引擎创建的字符输出流对象
void addCookie(Cookie cookie)将指定的Cookie加入到当前的响应中
void addHeader(String name,String value)将指定的名字和值加入到响应的头信息中
String encodeURL(String url)编码指定的URL
void sendRedirect(String location)重定向,发送一个临时的响应到客户端
void setHeader(String name,String value)将给出的名字和值设置响应的头部
void setStatus(int sc)给当前响应设置状态码
void setContentType(String ContentType)设置响应的MIME类型

2.1返回响应的内容

//获取打印流的对象PrintWriter writer = response.getWriter();//writer.write("hello");//writer.write("<html><head><title>hello</title></head><body><font color='red'>hello world</font></body></html>");String html = "<html>";html += "<head>";html += "</head>";html += "<body>";html += "	你好";html += "</body>";html += "</html>";writer.write(html);writer.close();

2.2 中文乱码处理

方案一:

response.setCharacterEncoding("utf-8");
response.setHeader("Content-Type", "text/html");

注意:如果仅使用response.setCharacterEncoding(“utf-8”),还是会显示乱码。这是由于虽然返回内容使用了utf8编码,但是浏览器加载的页面使用的是gbk编码,所以还需要设置content-type响应头。

方案二:

response.setContentType("text/html;charset=utf-8");

2.3重定向

重新定位到一个资源,实现资源的跳转

response.setStatus(302);
response.setHeader("location", "/W06_Servlet2/index.html");

2.4定时刷新

//定时刷新,每隔一秒刷新一次
//response.setHeader("refresh", "1");
//指定时间(秒)后,跳转到另外的界面 
response.setHeader("refresh", "3;url=/W06_Servlet2/index.html");

三servlet的生命周期

1.生命周期

Servlet的生命周期主要有四个阶段:

\1) 创建对象

对同一个servlet,只会创建一次

\2) 初始化

创建对象后,init方法,只会调用一次,会获取一个ServletConfig对象

\3) 运行阶段

运行阶段,调用service()方法。

每调用一次servlet资源,都会调用该方法。对于每次访问请求,都会创建一个新的HttpServletRequest请求对象和一个新的HttpServletResponse响应对象,然后将这两个对象作为参数传递给它调用的Servlet的service()方法,在该方法中,根据请求方式,决定调用doGet还是doPost方法

\4) 销毁

关闭tomcat服务器,或者重新加载应用,都会调用destroy方法

针对客户端的多次Servlet请求,通常情况下,服务器只会创建一个Servlet实例对象,也就是说一个Servlet的实例对象一旦创建,它就会驻留在内存中,为后续的其它请求服务,直至web容器退出,servlet实例对象才会销毁。

2.Servlet自动加载

它的取值必须是一整数;

当值小于0或者没有指定的时候,则表示容器在该Servlet被首次请求时才会被加载;

当值大于0或者等于0的时候,表示容器在启动时就加载并初始化该Servlet,取值越小,优先级越高;

当取值相同时,容器就会自行选择顺序进行加载

<servlet><description></description><display-name>LifeServlet</display-name><servlet-name>LifeServlet</servlet-name><servlet-class>com.rr.life.LifeServlet</servlet-class><!-- tomcat服务器加载we应用时,创建对应的servlet对象值越小,优先级越高--><load-on-startup>1</load-on-startup>
</servlet>

注解的写法

@WebServlet(name = "HelloServlet", value = "/HelloServlet", loadOnStartup = 1)

四转发和重定向

1.请求转发

一个web资源收到客户端请求后,通知服务器去调用另外一个web资源进行处理,称之为请求转发啊

请求转发属于服务器行为

转发需要通过RequestDispatche接口的对象,调用ServletRequest的getRequestDispatcher(String path)方法可以获取该对象

RequestDispatcher 接口中提供的实现转发的方法:

方法功能描述
void forward(ServletRequest request,ServletResponse response)用于将请求转发给另一个 Web 资源。该方法必须在响应提交给客户端之前被调用
//request域
request.setAttribute("age", 10);
//转发
request.getRequestDispatcher("/ForwardServlet2").forward(request, response);

转发后,可以实现request对象中的数据的共享

2.重定向

一个web资源收到客户端请求后,通知浏览器去访问另外一个web资源,称之为请求重定向.

重定向属于客户端行为。本质上是两次 HTTP 请求,对应两个 request 对象和两个 response 对象。

转发和重定向的区别:

转发是一个web资源收到客户端请求后,通知服务器去调用另外一个web资源。

重定向是一个web资源收到客户端的请求后,通知浏览器去调用另外一个web资源

//重定向
//response.sendRedirect("/W08_2_Servlet/RedirectServlet2");
//response.sendRedirect("RedirectServlet2");//重定向时,不能共享request对象中的数据
request.setAttribute("id", 100);
//推荐如下写法
response.sendRedirect(request.getContextPath() + "/RedirectServlet2");

重定向时,多个Servlet不能共享request对象中的数据

3.重定向和转发的区别

1)重定向的访问过程结束后,浏览器地址栏中显示的URL会发生改变;转发过程结束后,浏览器地址栏保持初始的URL地址不变

2)重定向时,是通过响应的结果告诉浏览器去重新发出请求访问另外一个web资源。而转发是在服务器内部请求转发给另外一个资源的

3)转发时,调用者与被调用者之间共享相同的request对象和response对象,它们属于同一个访问请求和响应过程;而重定向时调用者与被调用者使用各自的request对象和response对象,它们属于两个独立的访问请求和响应过程。

4)重定向时,重定向的URL以“/”开头,它是相对于WEB应用所在的服务器;转发时的URL以“/”开头,它是相对于当前WEB应用程序。

5)转发只能将请求转发给同一个WEB应用中的资源;而重定向还可以重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源。

区别转发重定向
行为服务器行为客户端行为
浏览器地址栏 URL 是否发生改变
是否共享 request 对象和 response 对象
是否能通过 request 域对象传递数据
是否支持跳转到其他应用的资源
路径中/相对于当前web应用相对于服务器

五ServletConfig接口

Servlet容器初始化Servlet时,会为了这个Servlet创建一个ServletConfig对象,并将ServletConfig对象作为参数传递给Servlet。通过Servlet的初始化参数信息。

方法功能描述
String getInitParameter(String name)根据初始化参数名 name,返回对应的初始化参数值。
Enumeration getInitParameterNames()返回 Servlet 所有的初始化参数名的枚举集合,如果该 Servlet 没有初始化参数,则返回一个空的集合。
ServletContext getServletContext()返回一个代表当前 Web 应用的 ServletContext 对象。
String getServletName()返回 Servlet 的名字

配置servlet的初始化参数

<servlet><servlet-name>ConfigServlet</servlet-name><servlet-class>com.qfedu.servletconfig.ConfigServlet</servlet-class><!-- servlet的初始化参数 --><init-param><param-name>user</param-name><param-value>zhangsan</param-value></init-param><init-param><param-name>pwd</param-name><param-value>12345</param-value></init-param></servlet>
public class ConfigServlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stub// 获取ServletConfig对象// ServletConfig 不需要额外创建// 每个Servlet都会对应一个ServletConfig对象ServletConfig servletConfig = this.getServletConfig();// 获取servlet中的初始化参数的值String info = servletConfig.getInitParameter("user");System.out.println(info);String info2 = servletConfig.getInitParameter("pwd");System.out.println(info2);}}

注解方式

@WebServlet(value = {"/config"}, initParams = {@WebInitParam(name = "user", value = "zhangsan"),@WebInitParam(name = "pwd", value = "1234")})
public class ConfigServlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stub// 获取ServletConfig对象// ServletConfig 不需要额外创建// 每个Servlet都会对应一个ServletConfig对象ServletConfig servletConfig = this.getServletConfig();// 获取servlet中的初始化参数的值String info = servletConfig.getInitParameter("user");System.out.println(info);String info2 = servletConfig.getInitParameter("pwd");System.out.println(info2);}}

六 ServletContext 接口

Servlet 容器启动时,会为每个 Web 应用创建一个唯一的 ServletContext 对象,该对象一般被称为“Servlet 上下文对象”。
ServletContext 对象的生命周期从 Servlet 容器启动时开始,到容器关闭或应用被卸载时结束。

常用方法:

方法描述
String getInitParameter(String name)根据初始化参数名 name,返回对应的初始化参数值。
Enumeration getInitParameterNames()返回 Web 应用所有上下文初始化参数名的枚举集合,如果该 Web 应用没有上下文初始化参数,则返回一个空的枚举集合。
void setAttribute(String name, Object object)把一个 Java 对象与一个属性名绑定,并将它作为一个属性存放到 ServletContext 中。 参数 name 为属性名,参数 object 为属性值。
void removeAttribute(String name)从 ServletContext 中移除属性名为 name 的属性。
Object getAttribute(String name)根据指定的属性名 name,返回 ServletContext 中对应的属性值。
String getRealPath(String path)返回资源文件的真实路径(文件的绝对路径)。
InputStream getResourceAsStream(String path)返回映射到资源文件的 InputStream 输入流对象。

1 获取web应用路径

//获取servletcontext对象
ServletContext servletContext = this.getServletContext();//    /W08_2_Servlet
System.out.println(servletContext.getContextPath());//通过request对象,获取应用的路径
System.out.println(request.getContextPath());

2 web****应用的初始化参数

/**<!-- 针对整个应用的初始化参数 -->
<context-param><param-name>AAA</param-name><param-value>aaa</param-value>
</context-param>* * */
String v1 = servletContext.getInitParameter("AAA");
System.out.println(v1);

3 多个Servlet对象共享数据

同一个Web应用中,所有的Servlet对象共享一个ServletContext对象

ServletContext servletContext = this.getServletContext();
//向servletcontext域中写入数据
//在整个web应用的不同的资源之间共享数据
servletContext.setAttribute("name", "zhangsan");Dog d = new Dog();
d.setAge(2);
d.setName("wangcai");servletContext.setAttribute("dog", d);

相关文章:

Servlet的几种用法?

serlet 1.定义&#xff1a;Serlet是使用Java编写的运行在服务器端的程序 2.Servlet主要是用于处理浏览器端发送的Http请求&#xff0c;并返回一个响应 3.Servlet开发需要使用到的包&#xff1a; java.servlet java.servlet.http 一.Servlet注册 1.xml方式 <servlet>…...

Golang | Leetcode Golang题解之第69题x的平方根

题目&#xff1a; 题解&#xff1a; func mySqrt(x int) int {if x 0 {return 0}C, x0 : float64(x), float64(x)for {xi : 0.5 * (x0 C/x0)if math.Abs(x0 - xi) < 1e-7 {break}x0 xi}return int(x0) }...

AR人脸美妆SDK解决方案,让妆容更加贴合个人风格

美妆行业正迎来前所未有的变革&#xff0c;为满足企业对高效、精准、创新的美妆技术需求&#xff0c;美摄科技倾力打造了一款企业级AR人脸美妆SDK解决方案&#xff0c;为企业打开美妆领域的新世界大门。 革命性的人脸美妆技术 美摄科技的AR人脸美妆SDK解决方案&#xff0c;不…...

Python-100-Days: Day09 Object-oriented programming(OOP) Upgrade

1.property装饰器 之前有讨论过&#xff0c; Python中属性和方法访问权限的问题&#xff0c;不建议将属性设置为私有的&#xff0c;倘若直接将属性暴露给外界也是存在问题的。例如&#xff0c;我们没有办法检查赋给属性的值是否有效。之前的建议是将属性命名以单下划线开头&am…...

虹科Pico汽车示波器 | 免拆诊断案例 | 2010款凯迪拉克SRX车发动机无法起动

故障现象 一辆2010款凯迪拉克SRX车&#xff0c;搭载LF1发动机&#xff0c;累计行驶里程约为14.3万km。该车因正时链条断裂导致气门顶弯&#xff0c;大修发动机后试车&#xff0c;起动机运转有力&#xff0c;但发动机没有着机迹象&#xff1b;多起动几次&#xff0c;火花塞会变…...

ECC 号码总结

1、问题背景 在手机开发过程中&#xff0c;经常遇见各种紧急号码问题&#xff0c;在此特意总结下紧急号码相关知识。 2、紧急号码来源 在MTK RILD EccNumberSource.h中&#xff0c;定义了如下几种紧急号码来源。 按优先级排序介绍如下 2.1、SOURCE_NETWORK 网络下发&#xff…...

《大疆二次开发》EMQX和MQTT部署

EMQX 服务器 基础知识 概念 EMQX (Erlang/Enterprise/Elastic MQTT Broker) &#xff1b;EMQ/EMQX就是MQTT Broker的一种实现&#xff1b;一款开源的大规模分布式 MQTT 消息服务器&#xff0c;功能丰富&#xff0c;专为物联网和实时通信应用而设计&#xff1b;支持多种协议&…...

【网络】滑动窗口和拥塞窗口

滑动窗口和拥塞窗口是TCP协议中两个重要的窗口概念&#xff0c;它们分别用于流量控制和拥塞控制&#xff0c;在功能和作用上有所不同。 滑动窗口&#xff08;Sliding Window&#xff09; 滑动窗口是用于流量控制的机制&#xff0c;它定义了发送方和接收方之间的数据传输量。T…...

数据库知识初步汇总

创建标签表格&#xff1a; CREATE TABLE IF NOT EXISTS labels (标签ID INTEGER PRIMARY KEY,标签名称 TEXT );创建文本与标签的关联表格&#xff1a; CREATE TABLE IF NOT EXISTS 文本标签 (文本ID INTEGER,标签ID INTEGER,FOREIGN KEY (文本ID) REFERENCES texts(编号),FOR…...

Moby简介:openEuler 中的开源docker引擎

Moby 是一个开源的容器化引擎&#xff0c;它提供了创建和管理容器所需的核心功能。在 openEuler 系统中&#xff0c;Moby 作为容器技术的实现之一&#xff0c;它允许用户利用容器化技术来部署、运行和移植应用程序。 Moby 的功能和作用&#xff1a; 1. **容器创建**&#xff…...

分布式光纤测温DTS的测温范围是多少?

分布式光纤测温DTS的测温范围不仅仅取决于光缆的感温能力&#xff0c;还受到多种复杂因素的影响。尽管高温光缆可以耐高温&#xff0c;低温光缆可以耐低温&#xff0c;甚至镀金光缆能够耐受高达700摄氏度的极高温度&#xff0c;然而&#xff0c;这些因素并不能完全解释测温范围…...

Java实现裁剪PDF

目录 安装Java PDF库 Java裁剪PDF页面 Java裁剪PDF页面并将结果保存为图片、HTML、Excel等格式 裁剪PDF页面是一项常见的任务&#xff0c;它可以用来调整文档的尺寸和去除不需要的边距或白边。通过裁剪页面&#xff0c;你可以优化文档的布局和展示效果&#xff0c;使其更符合…...

ZooKeeper以及DolphinScheduler的用法

目录 一、ZooKeeper的介绍 数据模型 ​编辑 操作使用 ①登录客户端 ​编辑 ②可以查看下面节点有哪些 ③创建新的节点&#xff0c;并指定数据 ④查看节点内的数据 ⑤、删除节点及数据 特殊点&#xff1a; 运行机制&#xff1a; 二、DolphinScheduler的介绍 架构&#…...

gitlab集群高可用架构拆分部署

目录 前言 负载均衡器准备 外部负载均衡器 内部负载均衡器 (可选)Consul服务 Postgresql拆分 1.准备postgresql集群 手动安装postgresql插件 2./etc/gitlab/gitlab.rb配置 3.生效配置文件 Redis拆分 1./etc/gitlab/gitlab.rb配置 2.生效配置文件 Gitaly拆分 1.…...

STC8增强型单片机开发day01

C51版本Keil环境搭建 搭建流程 环境搭建的基本流程&#xff1a; 从官方网站下载并安装Keil软件。选择安装的软件中的C51工具集并运行。通过从“文件”菜单中选择“项目”来创建新项目。输入项目名称并选择您正在使用的设备。通过从“项目”菜单中选择“添加文件到组”来添加…...

记录: Python解析yml文件,顺序解析,带所有文件等号

记录: Python解析yml文件&#xff0c;顺序解析&#xff0c;带所有文件等号from yaml.composer import Composer from yaml.constructor import Constructor import yamlclass ParseYml:def __init__(self):passstaticmethoddef parse(yml_pathNone):try:loader yaml.Loader(op…...

Npm Install Docusaurus Demo【npm 安装 docusaurus 实践 】

文章目录 1. 简介2. 前提2.1 安装 git2.2 安装 node 3. 安装4. 项目结构5. 访问5.1 localhost 访问5.2 ip 访问 1. 简介 Docusaurus 是一个facebook的开源项目&#xff0c;旨在帮助开发者构建易于维护和部署的文档网站。它提供了一个简单的方法来创建专业的文档网站&#xff0…...

【工具推荐定制开发】一款轻量的批量web请求命令行工具支持全平台:hey,基本安装、配置、使用

背景 在开发 Web 应用的过程中&#xff0c;作为开发人员&#xff0c;为了确认接口的性能能够达到要求&#xff0c;我们往往需要一个接口压测工具&#xff0c;帮助我们快速地对我们所提供的 Web 服务发起批量请求。在接口联调的过程中&#xff0c;我们通常会用 Postman 等图形化…...

Linux进程——进程的创建(fork的原理)

前言&#xff1a;在上一篇文章中&#xff0c;我们已经会使用getpid/getppid函数来查看pid和ppid,本篇文章会介绍第二种查看进程的方法&#xff0c;以及如何创建子进程&#xff01; 本篇主要内容&#xff1a; 查看进程的第二种方法创建子进程系统调用函数fork 在开始前&#xff…...

ICode国际青少年编程竞赛- Python-1级训练场-路线规划

ICode国际青少年编程竞赛- Python-1级训练场-路线规划 1、 Dev.step(3) Dev.turnLeft() Dev.step(4)2、 Dev.step(3) Dev.turnLeft() Dev.step(3) Dev.step(-6)3、 Dev.step(-2) Dev.step(4) Dev.turnLeft() Dev.step(3)4、 Dev.step(2) Spaceship.step(2) Dev.step(3)5、…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式&#xff0c;可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动&#xff08;如演唱会、马拉松赛事、高考中考等&#xff09;期间&#xff0c;城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例&#xff0c;暖城商圈曾因观众集中离场导致周边…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...