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

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开发时,通常首先自定义ServletFilter ( 过滤器 )、Listener ( 监听器 ) 三大组件,然后在文件 web.xml 中进行配置,而 Spring Boot 使用的是 内嵌式Servlet容器没有提供外部配置文件 web.xml ,那么Spring Boot是如何整合Servlet相关组件呢?
  • Spring Boot提供 了 ① 组件注册② 路径扫描两种方式整合Servlet三大组件 ( ServletFilterListener ),接下来将对分别对这
    两种整合方式进行详细讲解

1. 使用 “组件注册” 的方式 “整合Servlet三大组件” ( 实际操作为 : 创建自定义的"三大组件"对象 + 结合刚创建"的自定义组件对象"来 将 XxxRegistrationBean对象 通过”配置类“的方式加入到 IOC容器中 )

  • Spring Boot中,使用 组件注册 方式 整合内嵌Servlet容器ServletFilterListener三大组件时,只需这些 自定义组件 ( 即为自定义的“Servlet三大对象” ) 通过 ServletRegistrationBeanFilterRegistrationBeanServletListenerRegistrationBean类 注册容器 中即可。

使用 “组件注册” 方式 “整合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 接口,例如 ServletRequestListenerHtpSessionListenerServletContextListener 等,我们在自定义 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 全部注释并重启项目后,自定义ServletFilterListener组件 “仍然生效”
出现这种情况主要原因 是:
嵌入式Servlet容器ServletFilterListener 组件 进行自动化识别和配置,而自定义ServletFilterListener
继承/实现 了对应的 /接口,同时自定义ServletFilterListener组件都使用了 @Component注解这些组件/对象自动扫描Spring组件


ServletRegistrationBeanFilterRegistrationBeanServletListenerRegistrationBean 这些组件组装配置根本目的 是对一些 请求路径参数进行 初始化设置组装 。假设没有组件注册类,那么自定义Servlet虽然生效无法确定哪个访问路径生效自定义Filter对所有的请求都进行过滤不会出现选择性过滤的情况。 而自定义的Listener没有太大影响,因为定制该组件基本不需要设置什么参数

2. 使用 “路径扫描” 的方式 “整合Servlet三大组件” ( 就是通过 “注解” 的方式来"整合Servlet三大组件" )

  • Spring Boot中,除了使用“组件注册”的方式来"整合Servlet三大组件" ,还可以使用 “路径扫描” 的方式 整合 内嵌式 Servlet容器ServletFilterListener 三大组件时。

  • 使用 “路径扫描" 的方式"整合Servlet三大组件具体操作 为:

    第一步、 在自定义ServletFilterListener 分别添加 : @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&#xff…...

关注 | 我国已对百种产品实施强制性产品认证

市场监管总局在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…...

实验六 智能手机互联网程序设计(微信程序方向)实验报告

实验目的和要求 请完成创建图片库应用&#xff0c;显示一系列预设的图片。 提供按钮来切换显示不同类别的图片。 二、实验步骤与结果&#xff08;给出对应的代码或运行结果截图&#xff09; 1.WXML <view> <button bindtap"showAll">所有图片</but…...

Linux环境下,让Jar项目多线程部署成为可能

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 Linux环境下&#xff0c;让Jar项目多线程部署成为可能 前言背景介绍使用sh脚本实现使用systemd来实现使用docker-compose实现 前言 在当今互联网时代&#xff0c;应用程序的高可用性和性能是至关重要…...

k8s调度场景

15个KUBERNETES调度情景实用指南 Kubernetes调度是确保集群中的Pod在适当节点上运行的关键组件。通过灵活配置调度策略&#xff0c;可以提高资源利用率、负载平衡和高可用性。 在本文中&#xff0c;我们将深入探讨一些实际的Kubernetes调度场景&#xff0c;并提供相应的配置示…...

基于小程序实现的餐饮外卖系统

作者主页&#xff1a;Java码库 主营内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 技术选型 【后端】&#xff1a;Java 【框架】&#xff1a;spring…...

家居网购项目(手写分页)

文章目录 1.后台管理—分页显示1.程序框架图2.编写数据模型Page.java 3.编写dao层1.修改FurnDao增加方法 2.修改FurnDaoImpl增加方法 3.单元测试FurnDaoTest 4.编写service层1.修改FurnService增加方法 2.修改FurnServiceImpl增加方法3.单元测试FurnServiceTest 5.编写DataUtil…...

goland2024安装包(亲测可用)

目录 一、软件简介 二、软件下载 一、软件简介 Goland 是一款由 JetBrains 公司开发的集成开发环境&#xff08;IDE&#xff09;&#xff0c;专门用于 Go 语言的开发。它提供了丰富的功能和工具&#xff0c;帮助开发者更高效地编写、调试和管理 Go 语言项目。 功能特点&#x…...

35、链表-LRU缓存

思路&#xff1a; 首先要了解LRU缓存的原理&#xff0c;首先定下容量&#xff0c;每次get请求和put请求都会把当前元素放最前/后面&#xff0c;如果超过容量那么头部/尾部元素就被移除&#xff0c;所以最近最少使用的元素会被优先移除&#xff0c;保证热点数据持续存在。 不管放…...

数据结构速成--栈

由于是速成专题&#xff0c;因此内容不会十分全面&#xff0c;只会涵盖考试重点&#xff0c;各学校课程要求不同 &#xff0c;大家可以按照考纲复习&#xff0c;不全面的内容&#xff0c;可以看一下小编主页数据结构初阶的内容&#xff0c;找到对应专题详细学习一下。 目录 一…...

算法练习第15天|226.翻转二叉树

226.翻转二叉树 力扣链接https://leetcode.cn/problems/invert-binary-tree/description/ 题目描述&#xff1a; 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&am…...

C#面向对象——封装、封装案例示例

C#面向对象——封装 什么是封装? &#xff08;1&#xff09;封装是将数据和操作数据的方法&#xff08;行为&#xff09;封装在一起。 &#xff08;2&#xff09;程序中封装的体现&#xff1a;属性&#xff0c;方法&#xff0c;类&#xff0c;接口&#xff0c;命名空间&#…...

bbc wordpress 0day/南京响应式网站建设

原文&#xff1a;https://www.jianshu.com/p/9395c90e0055 一直都说&#xff0c;Threed.sleep是不会释放锁&#xff0c;而wait是释放锁的(对象锁)&#xff0c;现理论上来分析一下啊。 由于CPU分配的每个线程的时间片极为短暂(一般为几十毫秒)&#xff0c;所以&#xff0c;CPU…...

做网站大量视频怎么存储/十大接单推广app平台

在拆解苹果(Apple)首款智能音箱设备HomePod后表示&#xff0c;虽然HomePod平均售价(ASP)远高于Google Home或亚马逊(Amazon) Echo的智能音箱&#xff0c;但该设备成本高达248.4美元&#xff0c;因而使HomePod产品毛利率仅达29%&#xff0c;远低于Google Home的61%&#xff0c;以…...

手机批发市场进货网站/seo搜索引擎优化营销案例

一函数原型及参数function MessageBox(hWnd: HWND; Text, Caption: PChar; Type: Word): Integer;hWnd &#xff1a;对话框父窗口句柄&#xff0c;对话框显示在 Delphi 窗体内&#xff0c;可使用窗体的 Handle 属性&#xff0c;否则可用 0 &#xff0c;使其直接作为桌面窗口的子…...

微网站模板开发/广州seo优化

在天翼空间社区上看到的&#xff0c;转来收藏。在android 当中显示一张网络图片的时候&#xff0c;其实是比较麻烦的。在android当中显示一张网络图片的时候&#xff0c;其实是比较麻烦的。一般在doInBackground中执行后台的逻辑&#xff0c;如下载图片或其他需要耗时长的任务&…...

怎样做电商网站的财务分析/软文营销实施背景

变频调速技术在晶闸管出现后&#xff0c;就已经开始研究&#xff0c;但直到70年代才出现了变频器。这是因为变频器技术是完全随着电力电子器件、微电子技术、计算机技术和自动控制理论的发展而不断发展的。从最初的电力晶体管 &#xff08;GTR&#xff09; 、门极可关断晶闸管 …...

网站备案核验系统/新冠疫苗接种最新消息

出差是不少员工的工作常态&#xff0c;尤其对于那些从事产品销售、运维等工作的员工而言&#xff0c;出差更是家常便饭。一般而言&#xff0c;对公司的合理安排&#xff0c;员工应当服从。然而&#xff0c;如果公司明知员工不适宜出差&#xff0c;却仍然频繁作出异地出差的工作…...