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

Spring MVC 全注解开发

1. Spring MVC 全注解开发

文章目录

  • 1. Spring MVC 全注解开发
  • 2. web.xml 文件 的替代
    • 2.1 Servlet3.0新特性
    • 2.2 编写 WebAppInitializer
  • 3. Spring MVC的配置
    • 3.1 Spring MVC的配置:开启注解驱动
    • 3.2 Spring MVC的配置:视图解析器
    • 3.3 Spring MVC的配置:开启默认Servlet处理
    • 3.4 Spring MVC的配置:视图控制器 view-controller
    • 3.5 Spring MVC的配置:异常处理器
    • 3.6 Spring MVC 的配置:拦截器
  • 4. 运行测试:
  • 5. 总结:
  • 6. 最后:


2. web.xml 文件 的替代

2.1 Servlet3.0新特性

Servlet3.0新特性:web.xml文件可以不写了。
在Servlet3.0的时候,规范中提供了一个接口:

在这里插入图片描述

服务器在启动的时候,会自动从容器中找 ServletContainerInitializer接口的实现类,自动调用它的 onStratup() 方法来完成 Servlet 上下文的初始化。

在Spring3.1版本的时候,提供了这样一个类,实现以上的接口:

在这里插入图片描述

它的核心方法如下:

在这里插入图片描述

可以看到在服务器启动的时候,它会去加载所有实现 WebApplicationInitializer 接口的类:

在这里插入图片描述

这个接口下有一个子类是我们需要的 : AbstractAnnotationConfigDispatcherServletInitializer

在这里插入图片描述

当我们编写类继承AbstractAnnotationConfigDispatcherServletInitializer之后,web服务器在启动的时候会根据它来初始化Servlet上下文。

在这里插入图片描述

2.2 编写 WebAppInitializer

以下这个类就是用来代替web.xml文件的:

注意:加上 @Configuration 注解表示:

标记该类是配置类注意:加上 @Configuration 注解表示:标记该类是配置类

在这里插入图片描述

package com.rainbow.springmvc.config;import jakarta.servlet.Filter;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.filter.HiddenHttpMethodFilter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;// 在这个配置类当中编写的其实就是 web.xml 文件中的配置
// 用来标注这个类当中的配置文件
@Configuration  // 表示该类是配置类
public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {/*** Spring 的配置* @return*/@Overrideprotected Class<?>[] getRootConfigClasses() {return new Class[]{SpringMvcConfig.class};}/*** 配置过滤器* @return*/@Overrideprotected Filter[] getServletFilters() {// 配置字符编码过滤器CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();characterEncodingFilter.setEncoding("UTF-8");characterEncodingFilter.setForceRequestEncoding(true);characterEncodingFilter.setForceRequestEncoding(true);// 配置 HiddenHttpMethodFilter ???HiddenHttpMethodFilter hiddenHttpMethodFilter = new HiddenHttpMethodFilter();return new Filter[]{characterEncodingFilter,hiddenHttpMethodFilter};}/*** Spring MVC 的配置** @return*/@Overrideprotected Class<?>[] getServletConfigClasses() {return new Class[]{SpringMvcConfig.class};}/*** 用来配置 DispatcherServlet 的 <url-pattern></url-pattern>*用于配置 DispatcherServlet 的映射路径* @return*/@Overrideprotected String[] getServletMappings() {return new String[]{"/"};}
}

3. Spring MVC的配置

命名一个名为 SpringMvcConfig 的类,作为 Spring MVC 的配置类。

在这里插入图片描述

// 指定该类是一个配置类,可以当配置文件使用
@Configuration
// 开启组件扫描
@ComponentScan("com.rainbow.springmvc.controller")
public class SpringMVCConfig {
}
 在springmvc.xml 文件中都可以配置什么?
* 1.组件扫描
* 2.视图解析器
* 3.静态资源处理 default-servlet-handler
* 4.视图控制器 view-controller
* 5.开启注解驱动
* 6.异常处理器
* 7.拦截器

3.1 Spring MVC的配置:开启注解驱动

在类上,使用 @EnableWebMvc 注解表示:开启注解驱动。

在这里插入图片描述

// 以下相当于是 Springmvc.xml 的配置文件
@Configuration  // 表示该类是配置类, 指定该类是一个配置类,可以当配置文件使用
// 开启组件扫描
@ComponentScan("com.rainbow.springmvc.controller")
// 开启注解驱动
@EnableWebMvc
public class SpringMvcConfig {

3.2 Spring MVC的配置:视图解析器

在这里插入图片描述


import com.rainbow.springmvc.interceptors.MyInterceptor;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.handler.SimpleMappingExceptionResolver;
import org.thymeleaf.spring6.SpringTemplateEngine;
import org.thymeleaf.spring6.templateresolver.SpringResourceTemplateResolver;
import org.thymeleaf.spring6.view.ThymeleafViewResolver;
import org.thymeleaf.templatemode.TemplateMode;
import org.thymeleaf.templateresolver.ITemplateResolver;import java.util.List;
import java.util.Properties;// 以下相当于是 Springmvc.xml 的配置文件
@Configuration  // 表示该类是配置类, 指定该类是一个配置类,可以当配置文件使用
// 开启组件扫描
@ComponentScan("com.rainbow.springmvc.controller")
// 开启注解驱动
@EnableWebMvc
public class SpringMvcConfig {// 以下三个方法合并起来就是开启视图解析器@Beanpublic ThymeleafViewResolver getViewResolver(SpringTemplateEngine springTemplateEngine) {ThymeleafViewResolver resolver = new ThymeleafViewResolver();resolver.setTemplateEngine(springTemplateEngine);resolver.setCharacterEncoding("UTF-8");resolver.setOrder(1);return resolver;}@Beanpublic SpringTemplateEngine templateEngine(ITemplateResolver iTemplateResolver) {SpringTemplateEngine templateEngine = new SpringTemplateEngine();templateEngine.setTemplateResolver(iTemplateResolver);return templateEngine;}@Beanpublic ITemplateResolver templateResolver(ApplicationContext applicationContext) {SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();resolver.setApplicationContext(applicationContext);resolver.setPrefix("/WEB-INF/thymeleaf/");resolver.setSuffix(".html");resolver.setTemplateMode(TemplateMode.HTML);resolver.setCharacterEncoding("UTF-8");resolver.setCacheable(false);//开发时关闭缓存,改动即可生效。发布的时候,则将其开启即可return resolver;}
}

3.3 Spring MVC的配置:开启默认Servlet处理

让SpringMVCConfig类实现这个接口:WebMvcConfigurer
并且重写以下的方法:

@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {configurer.enable();
}

在这里插入图片描述


import com.rainbow.springmvc.interceptors.MyInterceptor;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.handler.SimpleMappingExceptionResolver;
import org.thymeleaf.spring6.SpringTemplateEngine;
import org.thymeleaf.spring6.templateresolver.SpringResourceTemplateResolver;
import org.thymeleaf.spring6.view.ThymeleafViewResolver;
import org.thymeleaf.templatemode.TemplateMode;
import org.thymeleaf.templateresolver.ITemplateResolver;import java.util.List;
import java.util.Properties;// 以下相当于是 Springmvc.xml 的配置文件
@Configuration  // 表示该类是配置类, 指定该类是一个配置类,可以当配置文件使用
// 开启组件扫描
@ComponentScan("com.rainbow.springmvc.controller")
// 开启注解驱动
@EnableWebMvc
public class SpringMvcConfig implements WebMvcConfigurer {// 以下三个方法合并起来就是开启视图解析器@Beanpublic ThymeleafViewResolver getViewResolver(SpringTemplateEngine springTemplateEngine) {ThymeleafViewResolver resolver = new ThymeleafViewResolver();resolver.setTemplateEngine(springTemplateEngine);resolver.setCharacterEncoding("UTF-8");resolver.setOrder(1);return resolver;}@Beanpublic SpringTemplateEngine templateEngine(ITemplateResolver iTemplateResolver) {SpringTemplateEngine templateEngine = new SpringTemplateEngine();templateEngine.setTemplateResolver(iTemplateResolver);return templateEngine;}@Beanpublic ITemplateResolver templateResolver(ApplicationContext applicationContext) {SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();resolver.setApplicationContext(applicationContext);resolver.setPrefix("/WEB-INF/thymeleaf/");resolver.setSuffix(".html");resolver.setTemplateMode(TemplateMode.HTML);resolver.setCharacterEncoding("UTF-8");resolver.setCacheable(false);//开发时关闭缓存,改动即可生效。发布的时候,则将其开启即可return resolver;}// 开启静态资源处理,开启默认的 Servlet 处理@Overridepublic void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {configurer.enable();}
}

3.4 Spring MVC的配置:视图控制器 view-controller

view-controller : 不写对应的 Controller 只需要 html页面就可以访问的配置 。只需要重写 WebMvcConfigurer 接口中的 addViewControllers(ViewControllerRegistry registry) 方法即可。

在这里插入图片描述


import com.rainbow.springmvc.interceptors.MyInterceptor;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.handler.SimpleMappingExceptionResolver;
import org.thymeleaf.spring6.SpringTemplateEngine;
import org.thymeleaf.spring6.templateresolver.SpringResourceTemplateResolver;
import org.thymeleaf.spring6.view.ThymeleafViewResolver;
import org.thymeleaf.templatemode.TemplateMode;
import org.thymeleaf.templateresolver.ITemplateResolver;import java.util.List;
import java.util.Properties;// 以下相当于是 Springmvc.xml 的配置文件
@Configuration  // 表示该类是配置类, 指定该类是一个配置类,可以当配置文件使用
// 开启组件扫描
@ComponentScan("com.rainbow.springmvc.controller")
// 开启注解驱动
@EnableWebMvc
public class SpringMvcConfig implements WebMvcConfigurer {// 以下三个方法合并起来就是开启视图解析器@Beanpublic ThymeleafViewResolver getViewResolver(SpringTemplateEngine springTemplateEngine) {ThymeleafViewResolver resolver = new ThymeleafViewResolver();resolver.setTemplateEngine(springTemplateEngine);resolver.setCharacterEncoding("UTF-8");resolver.setOrder(1);return resolver;}@Beanpublic SpringTemplateEngine templateEngine(ITemplateResolver iTemplateResolver) {SpringTemplateEngine templateEngine = new SpringTemplateEngine();templateEngine.setTemplateResolver(iTemplateResolver);return templateEngine;}@Beanpublic ITemplateResolver templateResolver(ApplicationContext applicationContext) {SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();resolver.setApplicationContext(applicationContext);resolver.setPrefix("/WEB-INF/thymeleaf/");resolver.setSuffix(".html");resolver.setTemplateMode(TemplateMode.HTML);resolver.setCharacterEncoding("UTF-8");resolver.setCacheable(false);//开发时关闭缓存,改动即可生效。发布的时候,则将其开启即可return resolver;}// 开启静态资源处理,开启默认的 Servlet 处理@Overridepublic void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {configurer.enable();}// 不写对应的 Controller 只需要 html页面就可以访问的配置@Overridepublic void addViewControllers(ViewControllerRegistry registry) {registry.addViewController("/test").setViewName("test");}
}

3.5 Spring MVC的配置:异常处理器

Spring MVC 的配置:异常处理器只需要,重写 WebMvcConfigurer 接口中的 configureHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) 方法即可。

在这里插入图片描述

// 配置异常处理器@Overridepublic void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {// 可以配置多个异常处理器,这是其中的一个SimpleMappingExceptionResolver simpleMappingExceptionResolver = new SimpleMappingExceptionResolver();// 将异常处理器添加到List集合中resolvers.add(simpleMappingExceptionResolver);// 配置异常信息,跳转的内容// 设置其中的 exceptionMapping 属性Properties properties = new Properties();properties.setProperty("java.lang.Exception","tip");simpleMappingExceptionResolver.setExceptionMappings(properties);// 设置其中的 exceptionAttribute 属性,将错误信息添加到请求域当中simpleMappingExceptionResolver.setExceptionAttribute("e");// 将异常处理器添加到 List 集合中resolvers.add(simpleMappingExceptionResolver);}

import com.rainbow.springmvc.interceptors.MyInterceptor;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.handler.SimpleMappingExceptionResolver;
import org.thymeleaf.spring6.SpringTemplateEngine;
import org.thymeleaf.spring6.templateresolver.SpringResourceTemplateResolver;
import org.thymeleaf.spring6.view.ThymeleafViewResolver;
import org.thymeleaf.templatemode.TemplateMode;
import org.thymeleaf.templateresolver.ITemplateResolver;import java.util.List;
import java.util.Properties;// 以下相当于是 Springmvc.xml 的配置文件
@Configuration  // 表示该类是配置类, 指定该类是一个配置类,可以当配置文件使用
// 开启组件扫描
@ComponentScan("com.rainbow.springmvc.controller")
// 开启注解驱动
@EnableWebMvc
public class SpringMvcConfig implements WebMvcConfigurer {// 以下三个方法合并起来就是开启视图解析器@Beanpublic ThymeleafViewResolver getViewResolver(SpringTemplateEngine springTemplateEngine) {ThymeleafViewResolver resolver = new ThymeleafViewResolver();resolver.setTemplateEngine(springTemplateEngine);resolver.setCharacterEncoding("UTF-8");resolver.setOrder(1);return resolver;}@Beanpublic SpringTemplateEngine templateEngine(ITemplateResolver iTemplateResolver) {SpringTemplateEngine templateEngine = new SpringTemplateEngine();templateEngine.setTemplateResolver(iTemplateResolver);return templateEngine;}@Beanpublic ITemplateResolver templateResolver(ApplicationContext applicationContext) {SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();resolver.setApplicationContext(applicationContext);resolver.setPrefix("/WEB-INF/thymeleaf/");resolver.setSuffix(".html");resolver.setTemplateMode(TemplateMode.HTML);resolver.setCharacterEncoding("UTF-8");resolver.setCacheable(false);//开发时关闭缓存,改动即可生效。发布的时候,则将其开启即可return resolver;}// 开启静态资源处理,开启默认的 Servlet 处理@Overridepublic void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {configurer.enable();}// 不写对应的 Controller 只需要 html页面就可以访问的配置@Overridepublic void addViewControllers(ViewControllerRegistry registry) {registry.addViewController("/test").setViewName("test");}// 配置异常处理器@Overridepublic void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {// 可以配置多个异常处理器,这是其中的一个SimpleMappingExceptionResolver simpleMappingExceptionResolver = new SimpleMappingExceptionResolver();// 将异常处理器添加到List集合中resolvers.add(simpleMappingExceptionResolver);// 配置异常信息,跳转的内容// 设置其中的 exceptionMapping 属性Properties properties = new Properties();properties.setProperty("java.lang.Exception","tip");simpleMappingExceptionResolver.setExceptionMappings(properties);// 设置其中的 exceptionAttribute 属性,将错误信息添加到请求域当中simpleMappingExceptionResolver.setExceptionAttribute("e");// 将异常处理器添加到 List 集合中resolvers.add(simpleMappingExceptionResolver);}
}

3.6 Spring MVC 的配置:拦截器

Spring MVC 的配置:拦截器只需要,重写 WebMvcConfigurer 接口中的 addInterceptors(InterceptorRegistry registry) 方法即可。

在这里插入图片描述

package com.rainbow.springmvc.config;import com.rainbow.springmvc.interceptors.MyInterceptor;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.handler.SimpleMappingExceptionResolver;
import org.thymeleaf.spring6.SpringTemplateEngine;
import org.thymeleaf.spring6.templateresolver.SpringResourceTemplateResolver;
import org.thymeleaf.spring6.view.ThymeleafViewResolver;
import org.thymeleaf.templatemode.TemplateMode;
import org.thymeleaf.templateresolver.ITemplateResolver;import java.util.List;
import java.util.Properties;// 以下相当于是 Springmvc.xml 的配置文件
@Configuration  // 表示该类是配置类, 指定该类是一个配置类,可以当配置文件使用
// 开启组件扫描
@ComponentScan("com.rainbow.springmvc.controller")
// 开启注解驱动
@EnableWebMvc
public class SpringMvcConfig implements WebMvcConfigurer {// 以下三个方法合并起来就是开启视图解析器@Beanpublic ThymeleafViewResolver getViewResolver(SpringTemplateEngine springTemplateEngine) {ThymeleafViewResolver resolver = new ThymeleafViewResolver();resolver.setTemplateEngine(springTemplateEngine);resolver.setCharacterEncoding("UTF-8");resolver.setOrder(1);return resolver;}@Beanpublic SpringTemplateEngine templateEngine(ITemplateResolver iTemplateResolver) {SpringTemplateEngine templateEngine = new SpringTemplateEngine();templateEngine.setTemplateResolver(iTemplateResolver);return templateEngine;}@Beanpublic ITemplateResolver templateResolver(ApplicationContext applicationContext) {SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();resolver.setApplicationContext(applicationContext);resolver.setPrefix("/WEB-INF/thymeleaf/");resolver.setSuffix(".html");resolver.setTemplateMode(TemplateMode.HTML);resolver.setCharacterEncoding("UTF-8");resolver.setCacheable(false);//开发时关闭缓存,改动即可生效。发布的时候,则将其开启即可return resolver;}// 开启静态资源处理,开启默认的 Servlet 处理@Overridepublic void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {configurer.enable();}// 不写对应的 Controller 只需要 html页面就可以访问的配置@Overridepublic void addViewControllers(ViewControllerRegistry registry) {registry.addViewController("/test").setViewName("test");}// 配置异常处理器@Overridepublic void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) {// 可以配置多个异常处理器,这是其中的一个SimpleMappingExceptionResolver simpleMappingExceptionResolver = new SimpleMappingExceptionResolver();// 将异常处理器添加到List集合中resolvers.add(simpleMappingExceptionResolver);// 配置异常信息,跳转的内容// 设置其中的 exceptionMapping 属性Properties properties = new Properties();properties.setProperty("java.lang.Exception","tip");simpleMappingExceptionResolver.setExceptionMappings(properties);// 设置其中的 exceptionAttribute 属性,将错误信息添加到请求域当中simpleMappingExceptionResolver.setExceptionAttribute("e");// 将异常处理器添加到 List 集合中resolvers.add(simpleMappingExceptionResolver);}// 配置拦截器@Overridepublic void addInterceptors(InterceptorRegistry registry) {MyInterceptor myInterceptor = new MyInterceptor();// 除了 /test 请求路径,不拦截,其他的路径都进行拦截处理registry.addInterceptor(myInterceptor).addPathPatterns("/**").excludePathPatterns("/test");}/*** 在springmvc.xml 文件中都可以配置什么?* 1.组件扫描* 2.视图解析器* 3.静态资源处理 default-servlet-handler* 4.视图控制器 view-controller* 5.开启注解驱动* 6.异常处理器* 7.拦截器*/
}

4. 运行测试:

编写对应测试的 Controller 类

在这里插入图片描述

编写对应测试的 Interceptor 类,拦截器类

在这里插入图片描述

编写对应测试的 html 前端页面展示:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

测试拦截器

在这里插入图片描述

在这里插入图片描述

测试异常处理器

在这里插入图片描述

5. 总结:

  1. 定义配置类,用 @Configuration 注解进行标注,表示:标记该类是配置类

  2. WebAppInitializer 这个类就是用来代替 web.xml文件的:

  3. SpringMvcConfig 的类,作为 Spring MVC 的配置类。

  4. 让SpringMVCConfig类实现这个接口:WebMvcConfigurer,同时重写其中的方法可以,配置(默认 Servlet 处理,以及异常处理器,拦截器)

  5. 在springmvc.xml 文件中都可以配置什么?

- 1.组件扫描
- 2.视图解析器
- 3.静态资源处理 default-servlet-handler
- 4.视图控制器 view-controller
- 5.开启注解驱动
- 6.异常处理器
- 7.拦截器
  1. 进行了异常处理后,拦截器就不起作用了。

6. 最后:

“在这个最后的篇章中,我要表达我对每一位读者的感激之情。你们的关注和回复是我创作的动力源泉,我从你们身上吸取了无尽的灵感与勇气。我会将你们的鼓励留在心底,继续在其他的领域奋斗。感谢你们,我们总会在某个时刻再次相遇。”

在这里插入图片描述

相关文章:

  • Go语言--广播式并发聊天服务器
  • TCP重传、滑动窗口、流量控制、拥塞控制机制
  • 【堆 优先队列 第k大】2551. 将珠子放入背包中
  • Flask启动5000端口后关不掉了?
  • 云原生(Cloud native)
  • AV1 编码标准中帧内预测技术概述
  • 黑马头条-环境搭建、SpringCloud
  • 云盘挂载 开机自动模拟 cmd- alist server
  • 笔记 2 :linux 0.11 中的重要的全局变量 (a)
  • ARM架构(一)—— ARMV8V9基础概念
  • Java中常见的语法糖
  • 昇思25天学习打卡营第02天|张量 Tensor
  • Hive 常见问题
  • 超市管理系统 需求分析与设计 UML 方向
  • cesium 实现地图环境功能 - 雨,雪,雾特效
  • C++11: atomic 头文件
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • CSS中外联样式表代表的含义
  • Flannel解读
  • HTTP 简介
  • JSONP原理
  • Python学习之路13-记分
  • quasar-framework cnodejs社区
  • 从零开始学习部署
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 设计模式走一遍---观察者模式
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 微信小程序填坑清单
  • 为视图添加丝滑的水波纹
  • 无服务器化是企业 IT 架构的未来吗?
  • 字符串匹配基础上
  • ​ArcGIS Pro 如何批量删除字段
  • ​探讨元宇宙和VR虚拟现实之间的区别​
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • (1)无线电失控保护(二)
  • (13)DroneCAN 适配器节点(一)
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (java)关于Thread的挂起和恢复
  • (PADS学习)第二章:原理图绘制 第一部分
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (含笔试题)深度解析数据在内存中的存储
  • (回溯) LeetCode 46. 全排列
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (七)理解angular中的module和injector,即依赖注入
  • (四)JPA - JQPL 实现增删改查
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • (转)visual stdio 书签功能介绍
  • *p++,*(p++),*++p,(*p)++区别?
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .net framework4与其client profile版本的区别
  • .NET框架类在ASP.NET中的使用(2) ——QA
  • .pyc文件是什么?