<servlet-class>和</url-pattern>的作用
在 SpringMVC 的 web.xml 配置中,<servlet-class> 和 <url-pattern> 是两个关键配置项,分别用于指定处理请求的 Servlet 类和定义该 Servlet 拦截的请求路径规则。以下是它们的具体作用及原理分析:
一、<servlet-class> 的作用
1. 指定核心前端控制器
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
- 核心作用:明确声明当前 Servlet 的实现类为 SpringMVC 的前端控制器
DispatcherServlet
。
DispatcherServlet
是 SpringMVC 的入口,负责协调处理所有 Web 请求,包括请求分发、视图解析、异常处理等核心流程。 - 本质:
DispatcherServlet
是HttpServlet
的子类,遵循 Servlet 规范,通过重写doGet
/doPost
等方法实现对 SpringMVC 流程的控制。
2. 集成 SpringMVC 生态
- 该类会自动加载 SpringMVC 的配置(如
springmvc-servlet.xml
),初始化处理器映射(HandlerMapping
)、处理器适配器(HandlerAdapter
)、视图解析器(ViewResolver
)等组件,形成完整的请求处理链条。
二、<url-pattern>
的作用
1. 定义请求拦截规则
<url-pattern>/</url-pattern>
- 核心作用:指定哪些请求会被
DispatcherServlet
处理。
常见取值有/*
、/
、*.do
等,不同取值影响请求的拦截范围。
2. 不同取值的区别
取值 | 拦截范围 | 适用场景 |
---|---|---|
/* | 拦截 所有请求(包括静态资源 .html /.js /.css 、JSP 页面请求等)。 | 不推荐:会导致 JSP 页面无法正常访问(因 JSP 本质是 Servlet,需由 Tomcat 内置 Servlet 处理)。 |
/ | 拦截 除 .jsp 以外的所有请求(静态资源、RESTful 接口等)。 | 推荐配置:JSP 页面由 Tomcat 默认 Servlet 处理,避免与 DispatcherServlet 冲突。 |
*.do | 拦截 以 .do 结尾的请求(如 /user.do )。 | 传统 MVC 风格,通过后缀区分动态请求,目前逐渐被 RESTful 无后缀风格取代。 |
3. 为什么推荐使用 <url-pattern>/</url-pattern>
?
- 避免 JSP 拦截问题:
当请求为 JSP 页面(如/index.jsp
)时,Tomcat 会使用内置的JspServlet
处理。若使用/*
,DispatcherServlet
会优先拦截 JSP 请求,导致 404 错误。
使用/
时,DispatcherServlet
仅拦截 非 JSP 请求(JSP 的扩展名.jsp
会被 Tomcat 直接处理),确保静态页面和动态接口的正常分发。 - 支持 RESTful 风格:
无后缀的 URL(如/user/1
)更简洁,符合现代 Web 开发规范,且无需额外配置后缀映射。
三、请求处理流程与配置的关系
- 请求到达 Tomcat:
浏览器发送请求(如/user/list
或/index.jsp
)。 - Tomcat 匹配 Servlet:
- 若请求是 JSP(
.jsp
结尾):由 Tomcat 内置的JspServlet
处理,直接返回页面。 - 若请求是其他路径(如
/user/list
):根据<url-pattern>/</url-pattern>
,由DispatcherServlet
接管。
- 若请求是 JSP(
- DispatcherServlet 处理流程:
- 通过处理器映射(
HandlerMapping
)找到对应的控制器(@Controller
方法)。 - 调用控制器处理请求,返回模型数据和视图名。
- 视图解析器(
ViewResolver
)解析视图,生成最终响应(如 HTML 页面或 JSON 数据)。
- 通过处理器映射(
四、最佳实践
配置 <url-pattern>/</url-pattern>
:
这是 SpringMVC 推荐的现代配置方式,兼容 RESTful 接口和静态资源,同时避免与 JSP 冲突(若项目使用 JSP 作为视图)。
静态资源处理:
若项目包含静态资源(如 CSS/JS/ 图片),需在 SpringMVC 配置中额外声明静态资源映射,避免被 DispatcherServlet
拦截:
// WebMvcConfigurer 配置
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
}
无 JSP 项目(如前后端分离):
若项目完全使用 JSON 响应(无 JSP 视图),可安全使用 /*
,但需确保静态资源路径正确映射。
总结
<servlet-class>
:指定 SpringMVC 的核心前端控制器DispatcherServlet
,启动请求处理的整个流程。<url-pattern>/</url-pattern>
:精准拦截非 JSP 请求,确保动态接口由 SpringMVC 处理,静态资源和 JSP 由 Tomcat 内置机制处理,是现代 Web 开发的最佳实践配置。
通过合理配置这两个项,可实现请求的高效分发,避免资源访问冲突,提升项目的可维护性。
请求处理流程更加详细点
以下是 SpringMVC 请求处理流程 的详细解析,从客户端发送请求到服务器返回响应的完整链路,结合核心组件的协作机制展开说明:
一、请求处理的核心流程(12 个关键步骤)
1. 浏览器发送请求到 Tomcat
- 用户在浏览器输入 URL(如
http://localhost:8080/app/user/list
),请求通过网络到达 Tomcat 服务器。 - Tomcat 根据
web.xml
中的<url-pattern>
匹配处理该请求的 Servlet:- 若请求是 JSP 页面(如
.jsp
结尾):由 Tomcat 内置的JspServlet
处理(直接跳过 SpringMVC)。 - 若请求是 非 JSP 请求(如
/user/list
):根据配置url-pattern>/</url-pattern>
,由DispatcherServlet
接管。
- 若请求是 JSP 页面(如
2. DispatcherServlet 接收请求并初始化上下文
DispatcherServlet
作为前端控制器,是请求处理的入口,负责协调所有后续组件。- 它会加载 SpringMVC 配置文件(如
springmvc-servlet.xml
或通过 Java 配置类),初始化以下核心组件(在第一次请求时完成初始化):- 处理器映射器(HandlerMapping):将请求 URL 映射到具体的控制器(
@Controller
方法)。 - 处理器适配器(HandlerAdapter):适配不同类型的控制器(如
@RequestMapping
方法、HttpRequestHandler
等)。 - 视图解析器(ViewResolver):将逻辑视图名解析为具体的视图对象(如 JSP、Thymeleaf 模板、JSON 视图等)。
- 其他组件:如异常处理器(
HandlerExceptionResolver
)、文件上传解析器(MultipartResolver
)等。
- 处理器映射器(HandlerMapping):将请求 URL 映射到具体的控制器(
3. 处理器映射器(HandlerMapping)查找 Handler
- 目标:根据请求 URL 找到对应的 处理器(Handler),即处理该请求的控制器方法。
- 工作机制:
- 遍历所有已注册的
HandlerMapping
(如RequestMappingHandlerMapping
),尝试匹配请求 URL。 - 例如,对于 URL
/user/list
,若存在@RequestMapping("/user/list")
注解的方法,则返回一个HandlerExecutionChain
对象,包含:- Handler:具体的控制器方法(如
UserController.list()
)。 - 拦截器链(Interceptor List):请求处理前后执行的拦截器(如
HandlerInterceptor
的preHandle
/postHandle
方法)。
- Handler:具体的控制器方法(如
- 遍历所有已注册的
- 输出:返回
HandlerExecutionChain
,若未找到匹配的 Handler,则抛出404 Not Found
异常。
4. 处理器适配器(HandlerAdapter)调用 Handler
- 目标:适配不同类型的 Handler,确保统一调用方式。
- 工作机制:
DispatcherServlet
根据 Handler 的类型选择对应的HandlerAdapter
(如RequestMappingHandlerAdapter
处理@Controller
方法)。- 调用
HandlerAdapter.handle()
方法,执行以下操作:- 预处理:解析请求参数(如
@RequestParam
、@RequestBody
),绑定到控制器方法的参数列表。 - 调用控制器:执行具体的控制器方法,返回
ModelAndView
(或void
、String
、ResponseEntity
等类型,由适配器转换为ModelAndView
)。
ModelAndView
包含:- Model:视图渲染所需的数据(如
Map<String, Object>
)。 - ViewName:逻辑视图名(如
user/list
)或直接是View
对象(如InternalResourceView
对应 JSP)。
- Model:视图渲染所需的数据(如
- 预处理:解析请求参数(如
5. 拦截器前置处理(preHandle)
- 在调用控制器方法 之前,拦截器链中的所有拦截器依次执行
preHandle()
方法:- 可用于权限校验、日志记录、请求参数修改等。
- 若某拦截器返回
false
,则中断后续流程,直接执行afterCompletion()
(不会调用控制器和后续拦截器)。
6. 执行控制器(@Controller 方法)
- 控制器方法被调用,处理业务逻辑:
- 接收请求参数(通过
@RequestParam
、@PathVariable
等注解)。 - 调用服务层、持久层获取数据。
- 返回结果:
- 若返回
String
:表示逻辑视图名(如success
),结合视图解析器生成最终视图。 - 若返回
ModelAndView
:直接包含视图名和模型数据。 - 若返回
void
:需通过HttpServletResponse
直接输出响应(如 RESTful 接口返回 JSON 时,需配合@ResponseBody
注解)。
- 若返回
- 接收请求参数(通过
7. 拦截器后置处理(postHandle)
- 在控制器方法 执行之后、视图渲染之前,拦截器链逆序执行
postHandle()
方法:- 可用于修改模型数据(
ModelAndView
中的Model
)、补充响应头信息等。
- 可用于修改模型数据(
8. 视图解析器(ViewResolver)解析视图
- 目标:将逻辑视图名(如
user/list
)转换为具体的View
对象。 - 工作机制:
- 遍历所有已注册的
ViewResolver
(如InternalResourceViewResolver
处理 JSP)。 - 例如,配置
prefix="/WEB-INF/views/"
和suffix=".jsp"
,则视图名user/list
会被解析为:java
View = new InternalResourceView("/WEB-INF/views/user/list.jsp");
- 遍历所有已注册的
- 支持的视图类型:JSP、Thymeleaf、Freemarker、JSON(如
MappingJackson2JsonView
)、XML 等。
9. 视图渲染(View.render ())
- 目标:将模型数据填充到视图中,生成最终的响应内容(如 HTML、JSON、XML 等)。
- 工作机制:
View
对象调用render(Model, request, response)
方法:- 对于 JSP 视图:将
Model
数据放入request
或session
作用域,转发到 JSP 页面,JSP 通过 EL 表达式或标签库获取数据并渲染。 - 对于 JSON 视图(配合
@ResponseBody
):直接将模型数据序列化为 JSON 格式,写入HttpServletResponse
的输出流。
- 对于 JSP 视图:将
- 注意:若控制器方法返回
@ResponseBody
或ResponseEntity
,则跳过视图解析器,直接由HttpMessageConverter
(如MappingJackson2HttpMessageConverter
)处理响应数据。
10. 拦截器完成处理(afterCompletion)
- 在视图渲染 完成后,拦截器链逆序执行
afterCompletion()
方法:- 用于资源清理(如关闭数据库连接、记录耗时日志等),无论请求是否成功都会执行。
11. DispatcherServlet 返回响应
- 生成的响应内容(如 HTML 页面、JSON 数据)通过
HttpServletResponse
发送回浏览器。
12. 浏览器解析响应并展示
- 浏览器接收响应,解析 HTML/JSON 等内容,渲染页面或处理数据(如 AJAX 请求的回调函数)。
二、核心组件的协作关系图
浏览器请求 → Tomcat → DispatcherServlet↓[1] 处理器映射器(HandlerMapping) ↓ (返回 HandlerExecutionChain:Handler + 拦截器链)[2] 处理器适配器(HandlerAdapter) ↓ (调用 Controller 方法,返回 ModelAndView)[3] 视图解析器(ViewResolver) ↓ (解析为 View 对象)[4] 视图渲染(View.render()) ↓响应返回浏览器
三、关键组件的作用与扩展点
1. 处理器映射器(HandlerMapping)
- 默认实现:
RequestMappingHandlerMapping
:处理@RequestMapping
注解的控制器。BeanNameUrlHandlerMapping
:按 Bean 名称映射 URL(较少使用)。
- 扩展:自定义
HandlerMapping
,实现特殊的 URL 匹配逻辑(如基于数据库的动态路由)。
2. 处理器适配器(HandlerAdapter)
- 默认实现:
RequestMappingHandlerAdapter
:支持@Controller
注解的方法(最常用)。SimpleControllerHandlerAdapter
:支持实现Controller
接口的控制器(传统方式)。
- 扩展:自定义
HandlerAdapter
,支持非标准的控制器类型(如自定义函数式处理器)。
3. 视图解析器(ViewResolver)
- 默认实现:
InternalResourceViewResolver
:解析 JSP 视图(转发到WEB-INF
目录下的页面)。ThymeleafViewResolver
:解析 Thymeleaf 模板(需集成 Thymeleaf 依赖)。
- 扩展:自定义
ViewResolver
,支持自定义视图类型(如 Markdown 视图、Excel 导出视图)。
4. 拦截器(Interceptor)
- 作用:在请求处理的 前、中、后 阶段插入自定义逻辑,实现:
- 登录校验(
preHandle
)。 - 性能监控(记录方法执行时间)。
- 响应数据包装(统一添加响应头)。
- 登录校验(
- 实现:自定义类实现
HandlerInterceptor
接口,重写preHandle
/postHandle
/afterCompletion
方法,并通过WebMvcConfigurer.addInterceptors()
注册。
四、典型场景处理细节
1. RESTful 接口返回 JSON(无视图渲染)
- 控制器方法添加
@ResponseBody
注解(或使用@RestController
组合注解):java
@GetMapping("/api/user/{id}") @ResponseBody public User getUser(@PathVariable Long id) {return userService.getUser(id); // 直接返回 Java 对象 }
- 流程变化:
- 跳过视图解析器和视图渲染阶段。
- 由
HttpMessageConverter
(如MappingJackson2HttpMessageConverter
)将 Java 对象序列化为 JSON,写入响应体。
2. 文件上传处理
- 配置
MultipartResolver
(如CommonsMultipartResolver
):xml
<!-- web.xml 或 Java 配置 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><property name="maxUploadSize" value="10485760" /> <!-- 10MB --> </bean>
- 控制器方法接收
MultipartFile
参数:java
@PostMapping("/upload") public String upload(@RequestParam("file") MultipartFile file) {// 处理文件上传逻辑return "uploadSuccess"; }
- 流程变化:在
DispatcherServlet
处理请求前,MultipartResolver
会将HttpServletRequest
包装为MultipartHttpServletRequest
,解析文件数据。
3. 异常处理
- 配置
HandlerExceptionResolver
(如SimpleMappingExceptionResolver
或@ControllerAdvice
):- 全局捕获控制器抛出的异常,返回自定义错误页面或 JSON 响应。
- 流程变化:若控制器方法抛出异常,会跳过视图渲染,直接由异常处理器处理,返回对应的错误视图或响应。
五、总结:SpringMVC 设计的核心思想
- 模块化设计:通过
DispatcherServlet
统一调度,各组件(映射器、适配器、解析器)分工明确,可独立扩展。 - 约定大于配置:默认组件支持大多数场景,仅需少量配置即可快速启动(如自动装配
RequestMappingHandlerMapping
)。 - 兼容性:支持多种控制器风格(注解式、接口式)和视图技术(JSP、模板引擎、REST 响应),适配不同项目需求。
理解这一流程后,开发者可更高效地调试问题(如 404 错误可能是 Handler 未匹配,500 错误可能是视图解析失败),并利用扩展点实现个性化需求(如自定义拦截器、视图解析器)。
相关文章:
<servlet-class>和</url-pattern>的作用
在 SpringMVC 的 web.xml 配置中,<servlet-class> 和 <url-pattern> 是两个关键配置项,分别用于指定处理请求的 Servlet 类和定义该 Servlet 拦截的请求路径规则。以下是它们的具体作用及原理分析: 一、<servlet-class> 的…...
linux部署的mysql数据库修改表名为小写配置
背景: 使用ruoyi-flowable框架初始化流程表结构时, 执行的sql语句创建的表名是大写。但mysql执行sql时大小写是敏感的 删除大写表 处理配置 使用mysql 8.0.41配置表名大小写敏感配置,需要初始化数据库 在MySQL 8.0及以上版本中,lower_case_table_names参…...
【Hot 100】94. 二叉树的中序遍历
目录 引言二叉树的中序遍历我的解题代码优化更清晰的表述建议: 🙋♂️ 作者:海码007📜 专栏:算法专栏💥 标题:【Hot 100】94. 二叉树的中序遍历❣️ 寄语:书到用时方恨少ÿ…...
基于D-Mixer与TransXNet的YOLOv8改进—融合全局-局部特征与空间降维注意力机制的CNN-ViT混合架构
随着目标检测任务对精度与效率要求的不断提升,传统的卷积神经网络(CNN)在建模长程依赖和复杂语义关系方面逐渐暴露出其局限性。而视觉Transformer(ViT)虽然在全局信息建模上表现优异,却因计算开销大、局部细节感知能力不足,在实时检测任务中难以直接部署。本文提出一种面向Y…...
《算法导论(第4版)》阅读笔记:p2-p3
《算法导论(第4版)》学习第 2 天,p2-p3 总结,总计 2 页。 一、技术总结 无。 二、英语总结(生词:1) 1.incremental (1) increase: in-(“in”) crescere “to grow” (2)increment (3)incremental: increment -al adj. incremental…...
基于Qlearning强化学习的电梯群控系统高效调度策略matlab仿真
目录 1.算法仿真效果 2.算法涉及理论知识概要 2.1 Q-learning强化学习原理 2.2 基于Q-learning的电梯群控系统建模 3.MATLAB核心程序 4.完整算法代码文件获得 1.算法仿真效果 matlab2022a仿真结果如下(完整代码运行后无水印): 仿真操作…...
嵌入式硬件篇---STM32F103C8T6STM32F103RCT6
文章目录 前言一、相同点内核与主频基础外设开发环境 二、不同点1. 存储容量2. 外设资源3. 封装与引脚 三、代码移植注意事项1. 内存与 Flash 限制Flash差异RAM调整 2. 外设差异外设缺失:GPIO 映射: 3. 中断向量表中断向量偏移 4. 时钟与总线配置APB分频…...
rhce第二次作业
任务目标 1.配置ssh实现A,B主机互相免密登录 2.配置nginx服务,通过多ip区分多网站 任务一 关闭防火墙 [rootlocalhost ~]# setenforce 0 [rootlocalhost ~]# systemctl stop firewalld.service A主机免密登录B主机 ### A主机生成密钥 [rootlocalh…...
Linux第20节 --- inode和文件系统
一、没有被打开的文件 如果一个文件没有被打开,那么该文件存储在哪里? 该文件是存储在磁盘当中的! 文件 文件内容 文件属性! 文件的内容是按照数据块存储的;文件的属性其实就是inode(是一个128字节的…...
LeetCode - 19.删除链表的倒数第N个结点
目录 题目 解法一 双指针算法 核心思想 执行流程 具体例子 代码 解法二 两次遍历法 核心思想 执行流程 具体例子 代码 题目 19. 删除链表的倒数第 N 个结点 - 力扣(LeetCode) 解法一 双指针算法 核心思想 利用双指针间隔固定距离(n1)&a…...
在 Ubuntu 上安装 cPanel
开始之前,请确保拥有一台 Ubuntu 服务器,推荐使用 Ubuntu 22.04 LTS。如果没有,可以查看免费服务器: 11个免费 VPS,够用一辈子了!(2025最新)Top 11 免费VPS推荐平台对比(…...
《Linux macOS :GCC升级方法》
GCC(GNU Compiler Collection)是广泛使用的编译器套件,升级到9以上版本可以获得更好的C17/20支持和性能优化。以下是不同Linux发行版和macOS的升级方法: Ubuntu/Debian 系统 添加工具链源 sudo apt update sudo apt install soft…...
C++ STL vector容器详解:从原理到实践
引言 亲爱的小伙伴们,今天我要和大家分享一个C编程中的"神器"——vector容器!作为STL(标准模板库)中最常用的容器之一,vector就像是一个"超级数组",既有数组的高效随机访问特性&#…...
[计算机网络]数据链路层
0 概论:数据链路层都干什么事,提供啥功能 比物理层再高一层就是数据链路层,咱们上一篇讲物理层,物理层直接接触传输介质,现在数据链路层是使用物理层的传输服务,然后实现更多的功能。物理层是只管把比特流…...
基于 vue-flow 实现可视化流程图
vue-flow 是一个基于 Vue.js 的强大且灵活的可视化流程图库,它允许开发者轻松创建交互式的流程图、工作流图、节点图等。 主要特点 易于使用 :提供了简洁的 API 和组件,开发者可以快速上手并创建复杂的流程图。高度可定制 :支持…...
【网络编程】HTTP(超文本传输协议)详解
🦄个人主页:修修修也 🎏所属专栏:网络编程 ⚙️操作环境:Visual Studio 2022 目录 📌HTTP定义 📌HTTP工作原理 1.客户端发起请求: 2.服务器处理请求: 3.客户端处理响应: 📌HTTP关键特性 🎏HTTP请求方法 &am…...
NuttX 与 PX4 系统开发全流程详解
NuttX 与 PX4 系统开发全流程详解 目录 1. NuttX 构建与使用2. NuttX 启动流程解析3. BootLoader 源码分析4. GPIO 驱动机制5. I2C 驱动分析6. PX4 系统架构简析7. uORB 消息机制8. PX4 应用开发示例9. 串口及 GPS 驱动解析10. MAVLink 协议与 PX4 交互 1. NuttX 构建与使用 …...
【Mytais系列】Myatis的设计模式
目录 设计模式 1. 工厂模式(Factory Pattern) 2. 建造者模式(Builder Pattern) 3. 动态代理模式(Dynamic Proxy Pattern) 4. 模板方法模式(Template Method Pattern) 5. 策略模…...
Linux:进程优先级及环境
一:孤儿进程 在Linux系统中,当一个进程创建了子进程后,如果父进程执行完毕或者提前退出而子进程还在运行,那么子进程就会成为孤儿进程。子进程就会被systemd(系统)进程收养,其pid为1 myproces…...
网络编程初识
注:此博文为本人学习过程中的笔记 1.socket api 这是操作系统提供的一组api,由传输层向应用层提供。 2.传输层的两个核心协议 传输层的两个核心协议分别是TCP协议和UDP协议,它们的差别非常大,编写代码的风格也不同,…...
疾病传播模拟 ——python实操
1、需求 疾病传播模拟 定义一个Infection类,包含初始感染人数、每日感染率等属性,以及一个simulate_spread方法用于模拟疾病传播过程。 使用numpy随机生成初始感染人数(范围1-100)和每日感染率(范围0.01-0.1)。 创建Infection对象,模拟10天的疾病传播过程,每天计算感染…...
用docker ffmpeg测试视频vmaf分数,很快不用编译
之前测试vmaf要自己编译libvmaf,自己编译ffmpeg,巨麻烦,或者用老旧不再维护的docker仓库,最近在docker hub上发现了编译了libvmaf的ffmpeg的docker,而且镜像很小,适合直接运行。 # dest.mp4 评分视频&…...
【浅学】Windows下ffmpeg+nginx+flv将本地视频推流在本地搭建的Web前端页面中播放,超详细步骤
Nginx安装和配置 下载nginx-1.19.3-http-flv 模块预编译包并解压放在d盘,路径就跟安装步骤里说的一样(如下图),不然会有其他问题出现。 打开conf/nginx.conf,查看RTMP和http相关的配置,确认端口号和路由名称 ffpemg推流视频…...
SQL笔记——左连接、右连接、内连接
前言:总是忘记表连接的区别,在面试的时候也容易被问到,因此就好记性不如烂笔头吧 集合运算 有并集、交集、差集 联合查询*(针对行合并的)* union为关键字,就是将两个select的结果求并集(此时重…...
iOS启动优化:从原理到实践
前言 在iOS应用开发中,启动速度是影响用户体验的重要因素之一。研究表明,启动时间每增加1秒,用户留存率就会下降约7%。本文将深入探讨iOS启动优化的各个方面,从底层原理到具体实践,帮助开发者打造更快的应用启动体验。…...
202553-sql
目录 一、196. 删除重复的电子邮箱 - 力扣(LeetCode) 二、602. 好友申请 II :谁有最多的好友 - 力扣(LeetCode) 三、176. 第二高的薪水 - 力扣(LeetCode) 一、196. 删除重复的电子邮箱 - 力扣…...
Socket-TCP
在TCP/ip协议中,用源IP、源端口号、目的IP、目的端口号、协议号这样一个五元组来标识一个通信! 端口号范围划分 0 - 1023: 知名端口号,HTTP,FTP,SSH 等这些广为使用的应用层协议,他们的端口号都是固定的。…...
BOSS的收入 - 华为OD机试(A卷,C++题解)
华为OD机试题库《C》限时优惠 9.9 华为OD机试题库《Python》限时优惠 9.9 华为OD机试题库《JavaScript》限时优惠 9.9 代码不懂有疑问欢迎留言或私我们的VX:code5bug。 题目描述 一个 XX 产品行销总公司,只有一个 boss,其有若干一级分销&…...
神经网络的基本概念与深度解析——基于生物机制的仿生建模与工程实现
广义上讲,神经网络是泛指生物神经网络与人工神经网络这两个方面。所谓生物神经网络是指由中枢神经系统(脑和脊髓)及周围神经系统(感觉神经、运动神经、交感神经、副交感神经等)所构成的错综复杂的神经网络,…...
JavaScript基础-运算符优先级
在JavaScript编程中,理解运算符的优先级是编写正确且高效代码的关键之一。当一个表达式包含多个运算符时,JavaScript会根据运算符的优先级来决定执行顺序。如果不了解这些规则,可能会导致意外的结果。本文将详细介绍JavaScript中的运算符优先…...
【RocketMQ NameServer】- NameServer 启动源码
文章目录 1. 前言2. RocketMQ 通信架构3. NameServer 启动流程3.1 创建 NameServerController3.2 启动 NameServerController3.3 NamesrvController#initialize3.3.1 Netty 通信的整体流程3.3.2 创建 NettyRemotingServer 3.4 this.remotingServer.start()3.4.1 this.remotingS…...
Learning vtkjs之WindowedSincPolyDataFilter
过滤器 模型简化(光滑处理) 介绍 像是对模型进行特征信息的简化(光滑处理) 效果 核心代码 主要流程 const fullScreenRenderer vtkFullScreenRenderWindow.newInstance({background: [0, 0, 0],rootContainer: vtkContainerR…...
C++ - 数据容器之 forward_list(创建与初始化、元素访问、容量判断、元素遍历、添加元素、删除元素)
一、创建与初始化 引入 <forward_list> 并使用 std 命名空间 #include <forward_list>using namespace std;创建一个空 forward_list forward_list<int> fl;创建一个包含 5 个元素,每个元素初始化为 0 的 forward_list forward_list<int&g…...
ES6/ES11知识点
ES 全称ECMAScript ,是脚本语言的规范,javascript是ES的一种实现。 作用域链 在 JavaScript 中,作用域链是一个非常重要的概念,它决定了变量和函数的访问顺序。掌握作用域链有助于深入理解执行上下文、闭包和变量查找等概念。 …...
力扣面试150题--二叉树的最大深度
Day 40 题目描述 做法 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right…...
360驱动大师v2.0(含网卡版)驱动工具软件下载及安装教程
1.软件名称:360驱动大师 2.软件版本:2.0 3.软件大小:218 MB 4.安装环境:win7/win10/win11 5.下载地址: https://www.kdocs.cn/l/cdZMwizD2ZL1?RL1MvMTM%3D 提示:先转存后下载,防止资源丢失&…...
Excel-CLI:终端中的轻量级Excel查看器
在数据驱动的今天,Excel 文件处理成为了我们日常工作中不可或缺的一部分。然而,频繁地在图形界面与命令行界面之间切换,不仅效率低下,而且容易出错。现在,有了 Excel-CLI,一款运行在终端中的轻量级Excel查看…...
AI Agent开发第48课-DIFY中利用AI动态判断下一步流程-DIFY调用API、REDIS、LLM
开篇 之前我们在《AI Agent开发第47课-DIFY处理多步流程慢?你确认用对了?》中讲述了DIFY的设计中在整合多步LLM时如避免过多调用LLM的良好设计,并给出了AI工作流的相应设计手法。今天我们要在上一篇的基础上把“上门维修预约”这个流程进一步按照实际业务需求加入用户在整个…...
C# 操作符
C# 操作符 一、操作符概览二、优先级与运算顺序三、各类操作符的实例 一、操作符概览 操作符(运算符)的本质是函数的简记法 操作符不能脱离与它关联的数据类型 int x 5; int y 4; int z x / y; Console.WriteLine(z);//输出1double a 5.0; double b…...
python下载
一、下载python和IDIE 1.进入python官网 加载可能有点慢,因为是国外网站 下载 点击Downloads按钮,选择版本下载。 安装 勾选两个多选框,点击Install Now安装完成,进入开始菜单,多出一个Python xxx.xxx文件夹&…...
tp5 php获取农历年月日干支甲午
# 切换为国内镜像源 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/# 再次尝试安装 composer require overtrue/chinese-calendar核心写法一个农历转公历,一个公历转农历 农历闰月可能被错误标记(例如 闰四月 应表示…...
MySQL安装完全指南:从零开始到配置优化(附避坑指南)
🔥 前言:为什么你总是装不好MySQL? (实话实说)每次看到新手在MySQL安装环节疯狂踩坑,老司机都忍不住想摔键盘!明明官网下载的安装包,怎么就会报错呢?为什么别人的环境变…...
5.3刷题
P3370 【模板】字符串哈希 #include<bits/stdc.h> using namespace std; #define int long long typedef unsigned long long ull; int n; ull myhash(string s){ull code 0, x 131, y 140814840257324663;for(int i 0; i < s.size(); i){code (code * x (ull)…...
KeyPresser 一款自动化按键工具
1. 简介 KeyPresser 是一款自动化按键工具,它可以与窗口交互,并支持后台运行, 无需保持被控窗口在前台运行。用户可以选择要操作的目标窗口,并通过勾选复选框来控制要发送哪些按键消息。可以从组合框中选择所需的按键,并在编辑框中输入时间间隔以控制按键发送之间的延迟。程…...
# LeetCode 1007 行相等的最少多米诺旋转
LeetCode 1007 行相等的最少多米诺旋转 原题英文:Minimum Domino Rotations For Equal Row 难度:中等 | 标签:数组、贪心 1 题目重述 给定两行长度相同的多米诺骨牌: tops[i] 表示第 i 张骨牌上面的数字;bottoms[…...
【Agent搭建】利用coze平台搭建一个AI销售?
目录 一、关于coze 核心功能 二、搭建属于你自己智能体 备注:(以下说明比较需要调整的板块) 1、从Prompt工程开始 2、搭建工作流 3、添加知识 三、总结 一、关于coze Coze是字节跳动推出的AI应用开发平台,专注于帮助用户快速…...
Linux系统中安装GitLab
一、安装前准备:确认系统要求(新手必看!) 系统版本:推荐 Ubuntu 20.04 或更高(本文以 Ubuntu 22.04 为例)。内存要求: 最低:2GB RAM(仅建议测试环境…...
PowerShell安装Chocolatey
文章目录 环境背景安装参考 环境 Windows 11 专业版PowerShell 7.5.1.NET Framework 4.0Chocolatey v2.4.3 背景 Chocolatey是Windows上的包管理工具,有点类似于Linux的 yum 和 apt 命令。比如,PowerShell里默认没有 grep 命令,则可以通过…...
UDP / TCP 协议
目录 一、前言: 数据封装与分用: 二、网络协议分层模型: 三、UDP / TCP 协议 UDP 协议: 1、UDP 协议段格式: 2、UDP 的特点: TCP 协议: 1、TCP 协议段格式: 2、TCP 协议的十…...
Coding Practice,48天强训(28)
Topic 1:悠悠的重组数组 游游的重组偶数__牛客网 比较简单的一个题,因为前两天写了快速幂算法,一直想着用进位 &1之类的处理偶数,其实就正常用string装数字遍历%2就行了 #include <bits/stdc.h> using namespace std;…...