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. 最后:

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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/46838.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SourceTree rebase(变基)的使用

参考资料 【Sourcetree】コミットを一つにまとめる【Sourcetree】リベースする 目录 前提0.1 merge与rebase0.2 merge合并分支0.3 rebase合并分支0.4 &#x1f4a5;超级注意事项&#x1f4a5; 一. 代码已提交&#xff0c;未推送&#xff0c;交互式变基1.1 通过SourceTree操作1…

UWA学堂上新|服务器AOI(Area Of Interest)算法和功能实现

课程是《基于.NetCore开发MMORPG分布式游戏服务器》系列课程第6节&#xff0c;本系列课程旨在帮助大家从零开始搭建商业化MMORPG的分布式服务器框架&#xff0c;包括不同种类服务器的线程模型&#xff0c;如中心服务器、网关服务器、游戏服务器、寻路服务器等&#xff0c;并讲解…

PICO,迷途VR?

随着科技的持续向前发展&#xff0c;越来越多的智能可穿戴设备涌现出来。除了最为大众所熟知的智能手环、智能手表之外&#xff0c;VR设备同样是可穿戴设备领域的一大细分领域&#xff0c;不少巨头都在VR领域有所布局。 回溯过往可知&#xff0c;VR并非新鲜事物&#xff0c;早…

【NLP实战】基于TextCNN的新闻文本分类

TextCNN文本分类在pytorch中的实现 基于TextCNN和transformers.BertTokenizer的新闻文本分类实现&#xff0c;包括训练、预测、数据加载和准确率评估。 目录 项目代码TextCNN网络结构相关模型仓库准备工作项目调参预测与评估 1.项目代码 https://github.com/NeoTse0622/Te…

怎么选流量套餐最划算呢,这篇文章建议收藏!

据小编了解&#xff0c;现在大多数用户手上都不止一张SIM卡&#xff0c;大部分都是双卡&#xff0c;甚至三卡了&#xff0c;那么&#xff0c;这些卡槽你真的利用对了吗&#xff1f; 这篇文章就告诉大家&#xff0c;如何更好的利用这两个卡槽&#xff0c;让你即省钱&#xff0c…

XML 验证器:确保数据完整性和准确性的关键工具

XML 验证器&#xff1a;确保数据完整性和准确性的关键工具 引言 在当今数字化时代&#xff0c;数据的有效管理和交换至关重要。XML&#xff08;可扩展标记语言&#xff09;作为一种用于存储和传输数据的语言&#xff0c;广泛用于各种应用程序和系统之间。为确保XML数据的完整…

vue3中常用组件封装及使用

vue3组件 文件上传属性与方法完整代码组件使用 文件上传 属性与方法 <!-- 属性1. multiple多选2. action上传文件服务器地址3. before-upload上传前校检格式和大小4. file-list上传的文件列表5. limit数量限制6. on-error上传失败触发7. on-exceed文件个数超出触发8. on-s…

(02)Unity使用在线AI大模型(调用Python)

目录 一、概要 二、改造Python代码 三、制作Unity场景 一、概要 查看本文需完成&#xff08;01&#xff09;Unity使用在线AI大模型&#xff08;使用百度千帆服务&#xff09;的阅读和实操&#xff0c;本文档接入指南的基础上使用Unity C#调用百度千帆大模型&#xff0c;需要…

十五、C++11常用新特性—Lambda表达式

1.基本 这个好像是很好用的&#xff0c;其有以下有点&#xff1a; 声明式的编程风格&#xff1a;直接匿名定义目标函数或函数对象&#xff0c;不需要额外写一个命名函数或函数对象。简洁&#xff1a;避免了代码膨胀和功能分散&#xff0c;让开发更加高效。在需要的时间和地点…

Sentieon应用教程 | 唯一分子标识符(UMI)

介绍 本文介绍了使用Sentieon工具处理下一代测序数据的方法&#xff0c;同时利用分子条码信息&#xff08;也称为唯一分子索引或UMI&#xff09;。分子条码可以在测序之前在模板DNA分子的末端引入唯一标签&#xff0c;从而大大减少PCR重复和测序错误对变异调用过程的影响。 S…

影视迷必备:揭秘高效影视app开发幕后

影视迷必备的高效影视APP开发幕后涉及多个关键环节&#xff0c;从需求分析、规划设计、技术开发到测试上线&#xff0c;再到后续的运营与维护&#xff0c;每一个环节都至关重要。 一、需求分析 在开发影视APP之前&#xff0c;首要任务是进行深入的需求分析。这一阶段的主要目标…

CSS选择器(1)

以内部样式表编写CSS选择器&#xff0c;其主要编写在<head></head>元素里&#xff0c;通过<style></style>标签来定义内部样式表。 基本语法为&#xff1a; 选择器{ 声明块 } 声明块&#xff1a;是由一对大括号括起来&#xff0c;声明块中是一个一个的…

python-矩阵加法(赛氪OJ)

[题目描述] 输入两个 n 行 m 列的矩阵 A 和 B &#xff0c;输出它们的和 AB。矩阵加法的规则是两个矩阵中对应位置的值进行加和&#xff0c;具体参照样例。输入&#xff1a; 输入共 2⋅n1 行&#xff0c;第一行包含两个整数 n 和 m&#xff0c;表示矩阵的行数和列数 (1≤n,m≤1…

艺术创作的新维度:yicaiai照片风格化

艺术创作的新维度&#xff1a;yicaiai照片风格化 一、用户友好的设计理念 1.1 yicaiai照片风格化的核心设计理念 yicaiai平台以其创新的AI技术&#xff0c;颠覆了传统照片处理的方式&#xff0c;将艺术与科技完美融合。其核心设计理念在于赋予普通照片无尽的艺术潜力&#xf…

Python面试题:如何在 Python 中实现一个简单的 Web 服务器?

自动化测试的框架和技术体系 引言 自动化测试是现代软件开发流程中不可或缺的一部分。通过自动化测试&#xff0c;可以显著提高测试效率、覆盖范围和测试的可靠性&#xff0c;减少人为错误。本文将详细介绍常见的自动化测试框架和技术体系&#xff0c;涵盖单元测试、集成测试…

这3种人适合学习人工智能,看看你在不在其中?

人工智能&#xff08;AI&#xff09;的浪潮正席卷全球&#xff0c;它不仅是科技领域的一场革命&#xff0c;更是社会进步的重要推手。随着AI技术的不断成熟和应用领域的不断拓展&#xff0c;越来越多的人开始关注并渴望掌握这一前沿技术。那么&#xff0c;究竟哪些人适合学习人…

华为od机试真题 — 测试用例执行计划(Python)

题目描述 某个产品当前迭代周期内有N个特性&#xff08;F1, F2, ..., FN&#xff09;需要进行覆盖测试&#xff0c;每个特性都被评估了对应的优先级&#xff0c;特性使用其ID作为下标进行标识。 设计了M个测试用例&#xff08;T1, T2,...,TM&#xff09;&#xff0c;每个用例…

Richtek立锜科技可用于智能门铃的电源管理解决方案

新型的智能门铃不仅能满足呼叫、提醒的需要&#xff0c;还能在线监控、远程操作、闯入通知、记录过程&#xff0c;系统构成相对复杂&#xff0c;与传统门铃相比有了很大的改变。 从电源管理的角度来观察&#xff0c;满足这样需求的系统构成也相对复杂&#xff1a; 处于外置状态…

一个糟糕的决策带来无尽的折磨

一个糟糕的决策带来无尽的折磨 你也时常有这种感觉么&#xff1f;怎么每次迭代都让人感觉很费劲&#xff0c;很疲惫&#xff0c;似乎每次都要对之前的代码进行修改才能满足本次迭代的需求。 整个项目像是一团乱麻一样理不清楚&#xff0c;项目工程给人一次性纸杯的感觉&#xf…

Linux环境下安装Nodejs

Linux环境下安装Nodejs 下载地址&#xff1a;https://nodejs.org/zh-cn/download/package-manager 一、使用压缩包自定义安装 上述链接下载好对应版本的软件包后&#xff0c;我存放到 /evn/nodejs 目录下&#xff08;根据自己实际情况设置&#xff09; 设置软链接 sudo ln…