Spring Boot | Spring Boot 整合 “Servlet三大组件“ ( Servlet / Filter / Listene )
目录:
- Spring Boot 整合 "Servlet三大组件" :
- 1. 使用 "组件注册" 的方式 "整合Servlet三大组件" ( 实际操作为 : 创建自定义的"三大组件"对象 + 结合刚创建"的自定义组件对象"来 将 XxxRegistrationBean对象 通过”配置类“的方式加入到 IOC容器中 )
- 使用 "组件注册" 方式 "整合Servlet"
- 使用 "组件注册" 方式 "整合Filter / 过滤器"
- 使用 "组件注册" 方式 "整合Listener / 监听器"
- 2. 使用 "路径扫描" 的方式 "整合Servlet三大组件" ( 就是通过 "注解" 的方式来"整合Servlet三大组件" )
- 使用 "路径扫描 / 注解" 方式 "整合Servlet"
- 使用 "路径扫描 / 注解" 方式 "整合Filter"
- 使用 "路径扫描 / 注解" 方式 "整合Listene"
Spring Boot 整合 “Servlet三大组件” :

作者简介 :一只大皮卡丘,计算机专业学生,正在努力学习、努力敲代码中! 让我们一起继续努力学习!
该文章参考学习教材为:
《Spring Boot企业级开发教程》 黑马程序员 / 编著
文章以课本知识点 + 代码为主线,结合自己看书学习过程中的理解和感悟 ,最终成就了该文章文章用于本人学习使用 , 同时希望能帮助大家。
欢迎大家点赞👍 收藏⭐ 关注💖哦!!!(侵权可联系我,进行删除,如果雷同,纯属巧合)
- 进行 Servlet开发时,通常首先自定义Servlet 、Filter ( 过滤器 )、Listener ( 监听器 ) 三大组件,然后在文件 web.xml 中进行配置,而 Spring Boot 使用的是 内嵌式Servlet容器,没有提供外部配置文件 web.xml ,那么Spring Boot是如何整合Servlet的相关组件呢?
- Spring Boot提供 了 ① 组件注册 和 ② 路径扫描两种方式整合Servlet三大组件 ( Servlet 、Filter、Listener ),接下来将对分别对这
两种整合方式进行详细讲解。
1. 使用 “组件注册” 的方式 “整合Servlet三大组件” ( 实际操作为 : 创建自定义的"三大组件"对象 + 结合刚创建"的自定义组件对象"来 将 XxxRegistrationBean对象 通过”配置类“的方式加入到 IOC容器中 )
- 在 Spring Boot中,使用 组件注册 方式 整合内嵌Servlet容器的 Servlet、Filter、Listener三大组件时,只需将这些 自定义组件 ( 即为自定义的“Servlet三大对象” ) 通过 ServletRegistrationBean、FilterRegistrationBean、ServletListenerRegistrationBean类 注册 到 容器 中即可。
使用 “组件注册” 方式 “整合Servlet”
使用 “组件注册” 方式 “整合Servlet” :
具体操作为 :
① 自定义一个Servlet对象 ( 该对象用于 ServletRegistrationBean对象中 )
② 通过 配置类的方式将ServletRegistrationBean对象 加入到IOC容器中,通过以上操作即实现了 SpringBoot中整合 “Servlet”。
MyServlet.java :
package com.myh.chapter_11.config;import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import org.springframework.stereotype.Component;import java.io.IOException;/*** SpringBoot中通过“注册组件”的方式来整合Servlet三大组件* 即通过创建XxxRegistrationBean对象并将其加入到IOC容器中的方式来在SpringBoot中整合Servlet的三大组件*/ @Component //加入到IOC容器中 public class MyServlet extends HttpServlet { ///*doGet()方法*/@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);}/*dopost方法*/@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//当url访问该Servlet中的doPost()方法会执行方法体中的代码//客户端(如浏览器)向Servlet发送请求并收到响应时,它会看到响应的内容是 "hello MyServlet" 这个字符串。response.getWriter().write("hello MyServlet");} }ServletConfig.java :
package com.myh.chapter_11.config;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.web.servlet.ServletRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;@Configuration //将该类标记为"配置类" public class ServletConfig { //Serlvet配置类@Autowiredprivate MyServlet myServlet;@Bean //将给方法的返回值对象加入到IOC容器中//在SpringBoot中注册XxxRegistrationBean组件/对象public ServletRegistrationBean getServlet() {/*/myServlet 这个请求映射到对应的Servlet对象上*/ServletRegistrationBean servletRegistrationBean =new ServletRegistrationBean(myServlet,"/myServlet");return servletRegistrationBean;} }
启动项目进行测试。项目启动成功后,在浏览器上访问 http://localhost:8080/mySerlvet , 效果如下图所示 :
从 上图可以看出,浏览器能访问/MyServlet并正常显示数据,说明SpringBoot 成功整合Servlet组件。
使用 “组件注册” 方式 “整合Filter / 过滤器”
使用 “组件注册” 方式 “整合Filter” :
具体操作为 :
① 自定义一个Filter对象 ( 该对象用于 ServletRegistrationBean对象 中 )
② 通过 配置类的方式将FilterRegistrationBean对象 加入到IOC容器中 ,通过以上操作即实现了 SpringBoot中整合 “Filter”。
MyFilter.java :
package com.myh.chapter_11.config;import jakarta.servlet.*; import org.springframework.stereotype.Component;import java.io.IOException;@Component //加入到IOC容器中 public class MyFilter implements Filter { //实现 Filter/过滤器接口@Overridepublic void init(FilterConfig filterConfig) throws ServletException {Filter.super.init(filterConfig);}/*** doFilter()方法在“请求处理之前”被执行,就是一个url请求,想到达doFilter()方法,再到达对应的Servlet组件的方法*/@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {//对url请求进行过滤,url请求先在doFilter()方法中拦截,如被放行,才会接着去执行Servlet中的方法System.out.println("hello MyFilter");//将请求和响应对象传递给过滤器链中的下一个实体,这个实体可以是一个过滤器,或者是最终的Servlet或JSP页面filterChain.doFilter(servletRequest, servletResponse);}@Overridepublic void destroy() {Filter.super.destroy();} //自定义“过滤器”/Filter类}ServletConfig.java :
package com.myh.chapter_11.config;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.boot.web.servlet.ServletRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;import java.util.Arrays;@Configuration //将该类标记为"配置类" public class ServletConfig { //Serlvet配置类@Autowiredprivate MyFilter myFilter;@Beanpublic FilterRegistrationBean getFilter() { //将Filter组件加入到IOC容器中FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(myFilter);//设置过滤器要过滤的url路径filterRegistrationBean.setUrlPatterns(Arrays.asList("/toLoginPage","/myFilter"));return filterRegistrationBean;}}上述代码中,使用 组件注册 方式 注册自定义 的 MyFilter类。在 getFilter( MyFilter filter ) 方法中,使 setUrlPatterns(Arrays.asList(“/toLoginPage”,“/myFilter”)) 方法定义了 过滤的请求路径 为 “/toLoginPage”和“/myFilter’”。
启动项目,项目启动成功后,在浏览器上访问 http://localhost:8080/myFilter 查看 控制台打印效果(由于没有编写对应路径的请求处理方法,所以浏览器会出现404错误页面,这里 重点关注控制台即可),具体如下图所示 :
从上图可以看出,控制台中打印了自定义Filter中的输出语句 “hello MyFilter”,这说明 SpringBoot整合自定义Filter组件成功。
使用 “组件注册” 方式 “整合Listener / 监听器”
使用 “组件注册” 方式 “整合Listener” :
具体操作为 :
① 自定义一个Listener对象 ( 该对象用于 ServletListenerRegistrationBean对象 中 )
② 通过 配置类的方式将 ServletListenerRegistrationBean对象 加入到IOC容器中 ,通过以上操作即 实现了 SpringBoot中整合 “Listener”。
MyListener.java :
package com.myh.chapter_11.config;import jakarta.servlet.ServletContextEvent; import jakarta.servlet.ServletContextListener; import org.springframework.stereotype.Component;@Component public class MyListener implements ServletContextListener { //自定义的“监听器”/Listener 对象/** contextInitialized()方法是Web应用程序启动时被执行。* 该方法的主要用途是对系统的全局变量、配置参数等进行初始化,确保系统在正常运行之前处于一个良好的状态*/@Overridepublic void contextInitialized(ServletContextEvent sce) { //该方法子啊web应用程序启动时被执行System.out.println("contextInitialized.....");}/*** contextDestroyed()方法在web应用程序的"生命周期结束"时/ web应用程序“销毁”时被执行*/@Overridepublic void contextDestroyed(ServletContextEvent sce) { //该方法在web应用程序的"生命周期结束"时被执行System.out.println("contextInitialized.....");} }需要说明的是,Servlet容器提供了很多 Listener 接口,例如 ServletRequestListener、HtpSessionListener、ServletContextListener 等,我们在自定义 Listener类时要根据自身需求选择实现对应接口。
ServletConfig.java :
package com.myh.chapter_11.config;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.boot.web.servlet.ServletRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;import java.util.Arrays;@Configuration //将该类标记为"配置类" public class ServletConfig { //Serlvet配置类@Autowiredprivate MyListener myListener;@Beanpublic ServletListenerRegistrationBean getListener() {ServletListenerRegistrationBean servletListenerRegistrationBean =new ServletListenerRegistrationBean(myListener);return servletListenerRegistrationBean;}}完成自定义Listener组件注册后 启动项目,项目启动成功后查看控制合打印效果,效果 如下图所示。程序启动成功后,控制台会打印出 自定义Listener组件 中定义的输出语句 : contextInitialized…
单击 IDEA 中的 Exit 按钮 关闭当前项目(注意,如果直接单击红色按钮会强制关闭程序,浏览器就无法打印关闭监听信息),再次查看控制合打印效果,效果 如下图所示 ,程序成功关闭后,控制台打印出了自定义Listener组件中定义的输出语句 : contextInitialized… 通过效果演示。
通过上面的代码和运行截图展示 :说明了 Spring Boot整合自定义Listener 组件成功。
注意点 :
如果我们将自定义的 Servlet组件配置类 : ServletConfig 全部注释并重启项目后,自定义的 Servlet、Filter、Listener组件 “仍然生效”。
出现这种情况的 主要原因 是:
嵌入式Servlet容器 对 Servlet、Filter 、Listener 组件 进行 了 自动化识别和配置,而自定义的Servlet、Filter、Listener都
继承/实现 了对应的 类/接口,同时自定义的Servlet、Filter、Listener组件都使用了 @Component注解 ,这些组件/对象会被自动扫描为Spring组件。
ServletRegistrationBean、FilterRegistrationBean、ServletListenerRegistrationBean 这些组件组装配置的 根本目的 是对一些 请求路径 和 参数进行 初始化设置和组装 。假设没有组件注册类,那么自定义Servlet虽然生效,无法确定 是哪个访问路径生效。 自定义的Filter会对所有的请求都进行过滤,不会出现选择性过滤的情况。 而自定义的Listener则没有太大影响,因为定制该组件基本不需要设置什么参数。
2. 使用 “路径扫描” 的方式 “整合Servlet三大组件” ( 就是通过 “注解” 的方式来"整合Servlet三大组件" )
在Spring Boot中,除了使用“组件注册”的方式来"整合Servlet三大组件" ,还可以使用 “路径扫描” 的方式 整合 内嵌式 Servlet容器 的 Servlet、Filter、Listener 三大组件时。
使用 “路径扫描" 的方式"整合Servlet三大组件” 具体操作 为:
第一步、 在自定义的 Servlet、Filter、Listener 类上 分别添加 : @WebServlet( )注解 、@WebFilter( )注解、@WebListener( )注解 。
第二步、在 项目主程序启动类上使用@ServletComponentScan注解 开启“组件扫描” / “注解扫描” 即可。
使用 “路径扫描 / 注解” 方式 “整合Servlet”
创建项目 :
MyServlet.Java :
package com.myh.chapter_11.config;import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import org.springframework.stereotype.Component;import java.io.IOException;//通过注解的方式来在SpringBoot中“整合Servlet” ( 就是通过注解的方式来SpringBoot中能使用Servlet ) //将 /annotationMyServlet请求映射到该Servlet类中 @WebServlet("/annotationMyServlet") public class MyServlet extends HttpServlet {/*doGet()方法*/@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);}/*dopost方法*/@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//当url访问该Servlet中的doPost()方法会执行方法体中的代码//客户端(如浏览器)向Servlet发送请求并收到响应时,它会看到响应的内容是 "hello MyServlet" 这个字符串。response.getWriter().write("hello MyServlet(annotaion)");} }Chapter11Application.Java ( 项目主程序启动类 ):
package com.myh.chapter_11;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.web.servlet.ServletComponentScan;@SpringBootApplication @ServletComponentScan //开启基于"注解方式"的"Servlet组件扫描"支持 ( 让整合Servlet的三大组件的注解生效 ) public class Chapter11Application {public static void main(String[] args) {SpringApplication.run(Chapter11Application.class, args);}}启动项目后,访问http://localhost:8080/annotationMyServlet ,效果如下所示 ,表示用”路径扫描“的方式 成功整合了Servlet。
使用 “路径扫描 / 注解” 方式 “整合Filter”
创建项目 :
MyFilter.Java :
package com.myh.chapter_11.config;import jakarta.servlet.*; import jakarta.servlet.annotation.WebFilter; import org.springframework.stereotype.Component;import java.io.IOException;//通过注解的方式来在SpringBoot中“整合Filter” ( 就是通过注解的方式来SpringBoot中能使用Filter ) //将 /annotationMyFilter 和 /annotationLogin 请求映射到该 该Filter(过滤器)类中 @WebFilter(value = {"/annotationMyFilter","/annotationLogin"}) public class MyFilter implements Filter { //实现 Filter/过滤器接口@Overridepublic void init(FilterConfig filterConfig) throws ServletException {Filter.super.init(filterConfig);}/*** doFilter()方法在“请求处理之前”被执行,就是一个url请求,想到达doFilter()方法,再到达对应的Servlet组件的方法*/@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {//对url请求进行过滤,url请求先在doFilter()方法中拦截,如被放行,才会接着去执行Servlet中的方法System.out.println("hello MyFilter(annotaion)");//将请求和响应对象传递给过滤器链中的下一个实体,这个实体可以是一个过滤器,或者是最终的Servlet或JSP页面filterChain.doFilter(servletRequest, servletResponse);}@Overridepublic void destroy() {Filter.super.destroy();} //自定义“过滤器”/Filter类}Chapter11Application.Java ( 项目主程序启动类 ):
package com.myh.chapter_11;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.web.servlet.ServletComponentScan;@SpringBootApplication @ServletComponentScan //开启基于"注解方式"的"Servlet组件扫描"支持 ( 让整合Servlet的三大组件的注解生效 ) public class Chapter11Application {public static void main(String[] args) {SpringApplication.run(Chapter11Application.class, args);}}启动项目后,访问http://localhost:8080/annotationMyFilter ,效果如下所示 ,表示用”路径扫描“的方式 成功整合了Filter。
使用 “路径扫描 / 注解” 方式 “整合Listene”
创建项目 :
MyListener.Java :
package com.myh.chapter_11.config;import jakarta.servlet.ServletContextEvent; import jakarta.servlet.ServletContextListener; import jakarta.servlet.annotation.WebListener; import org.springframework.stereotype.Component;//通过注解的方式来在SpringBoot中“整合Listener” ( 就是通过注解的方式来SpringBoot中能使用Listener ) //在web应用程序启动时会执行 contextInitialized()方法 , web应用程序结束/销毁后会执行contextDestroyed()方法 @WebListener public class MyListener implements ServletContextListener { //自定义的“监听器”/Listener 对象/** contextInitialized()方法是Web应用程序启动时被执行。* 该方法的主要用途是对系统的全局变量、配置参数等进行初始化,确保系统在正常运行之前处于一个良好的状态*/@Overridepublic void contextInitialized(ServletContextEvent sce) { //该方法子啊web应用程序启动时被执行System.out.println("contextInitialized.....(annotaion)");}/*** contextDestroyed()方法在web应用程序的"生命周期结束"时/ web应用程序“销毁”时被执行*/@Overridepublic void contextDestroyed(ServletContextEvent sce) { //该方法在web应用程序的"生命周期结束"时被执行System.out.println("contextInitialized.....(annotaion)");} }Chapter11Application.Java ( 项目主程序启动类 ):
package com.myh.chapter_11;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.web.servlet.ServletComponentScan;@SpringBootApplication @ServletComponentScan //开启基于"注解方式"的"Servlet组件扫描"支持 ( 让整合Servlet的三大组件的注解生效 ) public class Chapter11Application {public static void main(String[] args) {SpringApplication.run(Chapter11Application.class, args);}}启动项目后,访问http://localhost:8080/annotationMyFilter ,效果如下所示 ,表示用”路径扫描“的方式 成功整合了Listene。
相关文章:
Spring Boot | Spring Boot 整合 “Servlet三大组件“ ( Servlet / Filter / Listene )
目录: Spring Boot 整合 "Servlet三大组件" :1. 使用 "组件注册" 的方式 "整合Servlet三大组件" ( 实际操作为 : 创建自定义的"三大组件"对象 结合刚创建"的自定义组件对象"来 将 XxxRegistrationBean对象 通过…...
错误分析 (Machine Learning研习十九)
错误分析 您将探索数据准备选项,尝试多个模型,筛选出最佳模型,使用 Grid SearchCV微调其超参数,并尽可能实现自动化。在此,我们假设您已经找到了一个有前途的模型,并希望找到改进它的方法。其中一种方法就…...
SQL系统函数知识点梳理(Oracle)
这里写目录标题 函数系统函数转换函数to_date()to_char()将数值转换成字符格式 添加货币符号将日期转换成字符 其他不常用的转换函数 字符型函数连接函数大小写转换函数大写转换小写转换首字母大写,其余的小写 替换函数去除空格函数截取函数填充函数获取字符长度函数…...
面试突击---MySQL索引
面试突击---MYSQL索引 面试表达技巧:1、谈一下你对于mysql索引的理解?(为什么mysql要选择B树来存储索引)2、索引有哪些分类?3、聚簇索引与非聚簇索引4、回表、索引覆盖、最左匹配原则、索引下推(1ÿ…...
关注 | 我国已对百种产品实施强制性产品认证
市场监管总局在7日举行的新闻发布会上介绍,该局日前发布《市场监管总局关于对商用燃气燃烧器具等产品实施强制性产品认证管理的公告》,对具有较高安全风险的商用燃气燃烧器具、阻燃电线电缆、电子坐便器、电动自行车乘员头盔、可燃气体探测报警产品、水性…...
虚幻引擎架构自动化及蓝图编辑器高级开发进修班
课程名称:虚幻引擎架构自动化及蓝图编辑器高级开发进修班 课程介绍 大家好 我们即将推出一套课程 自动化系统开发。 自动化技术在项目开发的前中后期都大量运用。如何您是一家游戏公司,做的是网络游戏,是不是经常会遇到程序员打包加部署需…...
Weakly Supervised Audio-Visual Violence Detection 论文阅读
Weakly Supervised Audio-Visual Violence Detection 论文阅读 摘要III. METHODOLOGYA. Multimodal FusionB. Relation Modeling ModuleC. Training and Inference IV. EXPERIMENTSV. CONCLUSION阅读总结 文章信息: 发表于:IEEE TRANSACTIONS ON MULTIME…...
华为海思数字芯片设计笔试第六套
声明 下面的题目作答都是自己认为正确的答案,并非官方答案,如果有不同的意见,可以评论区交流。 这些题目也是笔者从各个地方收集的,感觉有些题目答案并不正确,所以在个别题目会给出自己的见解,欢迎大家讨论…...
重绘和重排:概念、区别和应用示例
还是大剑师兰特:曾是美国某知名大学计算机专业研究生,现为航空航海领域高级前端工程师;CSDN知名博主,GIS领域优质创作者,深耕openlayers、leaflet、mapbox、cesium,canvas,webgl,ech…...
创建k8s deploy yaml文件的imagePullSecrets语句
镜像仓库是harbor kubectl create secret docker-registry key --docker-server192.168.0.190 --docker-usernameadmin --docker-passwordHarbor12345...
大模型预测结果导入到Doccano,人工修正预测不准的数据
背景 使用大语言模型做实体识别的实验时,发现大模型关于实体的边界预测一直不准。 主要原因在于当时找了很多同学标注数据,由于不同组同学关于实体的边界没有统一,故导致数据集中实体边界也没统一。 (找太多人标,会有…...
python三方库_ciscoconfparse学习笔记
文章目录 介绍使用基本原理父子关系 属性ioscfg 获取配置信息,返回列表is_config_line 判断是否是配置行is_intf 判断IOSCfgLine是不是interfaceis_subintf 判断IOSCfgLine是不是子接口lineage 不知道用法is_ethernet_intf 判断IOSCfgLine是否是以太网接口is_loopback_intf 判断…...
HDFS详解(Hadoop)
Hadoop 分布式文件系统(Hadoop Distributed File System,HDFS)是 Apache Hadoop 生态系统的核心组件之一,它是设计用于存储大规模数据集并运行在廉价硬件上的分布式文件系统。 1. 分布式存储: HDFS 将文件分割成若干块…...
python创建word文档并向word中写数据
一、docx库的安装方法 python创建word文档需要用到docx库,安装命令如下: pip install python-docx 注意,安装的是python-docx。 二、使用方法 使用方法有很多,这里只介绍创建文档并向文档中写入数据。 import docxmydocdocx.Do…...
MongoDB的安装配置及使用
文章目录 前言一、MongoDB的下载、安装、配置二、检验MongoDB是否安装成功三、Navicat 操作MongoDB四、创建一个集合,存放三个文档总结 前言 本文内容: 💫 MongoDB的下载、安装、配置 💫 检验MongoDB是否安装成功 ❤️ Navicat 操…...
Go学习路线
Go学习路线 文章目录 Go学习路线入门阶段一、Go基础和Goland的安装二、学习日志文件及配置文件三、学习mysql四、html,css,js快速入门五、写一个简单的前后端分离的记事本项目六、Linux快速入门七、Docker快速入门八、Git命令快速入门九、使用Docker打包…...
安全大脑与盲人摸象
21世纪是数字科技和数字经济爆发的时代,互联网正从网状结构向类脑模型进行进化,出现了结构和覆盖范围庞大,能够适应不同技术环境、经济场景,跨地域、跨行业的类脑复杂巨型系统。如腾讯、Facebook等社交网络具备的神经网络特征&…...
如何使用Git-Secrets防止将敏感信息意外上传至Git库
关于Git-Secrets Git-secrets是一款功能强大的开发安全工具,该工具可以防止开发人员意外将密码和其他敏感信息上传到Git库中。 Git-secrets首先会扫描提交的代码和说明,当与用户预先配置的正则表达式模式匹配时,便会阻止此次提交。该工具的优…...
Day 14 网络协议
常见网络设备:交换机 路由器 中继器 多协议网关(路由器的前身) 交换机:用于连接统一网络的设备,实现内网设备通信。 从广义上分为:局域网交换机,广域网交换机 从网络构成分为:接…...
msyql中SQL 错误 [1118] [42000]: Row size too large (> 8126)
场景: CREATE TABLE test-qd.eqtree (INSERT INTO test.eqtree (idocid VARCHAR(50) NULL,sfcode VARCHAR(50) NULL,sfname VARCHAR(50) NULL,sfengname VARCHAR(50) NULL,…… ) ENGINEInnoDB DEFAULT CHARSETutf8 COLLATEutf8_general_ci;或 alter table eqtre…...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...
FFmpeg:Windows系统小白安装及其使用
一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...
抽象类和接口(全)
一、抽象类 1.概念:如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象,这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法,包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中,⼀个类如果被 abs…...
深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向
在人工智能技术呈指数级发展的当下,大模型已然成为推动各行业变革的核心驱动力。DeepSeek 开源模型以其卓越的性能和灵活的开源特性,吸引了众多企业与开发者的目光。如何高效且合理地部署与运用 DeepSeek 模型,成为释放其巨大潜力的关键所在&…...
Unity中的transform.up
2025年6月8日,周日下午 在Unity中,transform.up是Transform组件的一个属性,表示游戏对象在世界空间中的“上”方向(Y轴正方向),且会随对象旋转动态变化。以下是关键点解析: 基本定义 transfor…...
云原生周刊:k0s 成为 CNCF 沙箱项目
开源项目推荐 HAMi HAMi(原名 k8s‑vGPU‑scheduler)是一款 CNCF Sandbox 级别的开源 K8s 中间件,通过虚拟化 GPU/NPU 等异构设备并支持内存、计算核心时间片隔离及共享调度,为容器提供统一接口,实现细粒度资源配额…...












