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

第一章 初识SpringMVC

一、什么是MVC

MVC是一种软件架构模式(是一种软件架构设计思想,不止Java开发中用到,其它语言也需要用到),它将应用分为三块:

  • M:Model(模型)

  • V:View(视图)

  • C:Controller(控制器)

应用为什么要被分为三块,优点是什么?

  • 低耦合,扩展能力增强

  • 代码复用性增强

  • 代码可维护性增强

  • 高内聚,让程序员更加专注业务的开发

MVC将应用分为三块,每一块各司其职,都有自己专注的事情要做,他们属于分工协作,互相配合:

  • Model:负责业务处理及数据的收集。

  • View:负责数据的展示

  • Controller:负责调度。它是一个调度中心,它来决定什么时候调用Model来处理业务,什么时候调用View视图来展示数据。

MVC架构模式如下所示:

MVC架构模式的描述:

前端浏览器发送请求给web服务器,

web服务器中的Controller接收到用户的请求,Controller负责将前端提交的数据进行封装,然后Controller调用Model来处理业务,当Model处理完业务后会返回处理之后的数据给Controller,

Controller再调用View来完成数据的展示,最终将结果响应给浏览器,浏览器进行渲染展示页面。



面试题:什么是三层模型,并说一说MVC架构模式与三层模型的区别?

三层模型:


MVC 和三层模型都采用了分层结构来设计应用程序,都是降低耦合度,提高扩展力,提高组件复用性。

区别在于:他们的关注点不同,三层模型更加关注业务逻辑组件的划分。 MVC架构模式关注的是整个应用程序的层次关系和分离思想。现代的开发方式大部分都是MVC架构模式结合三层模型一起用。

二、什么是SpringMVC

1.SpringMVC概述

SpringMVC是一个实现了MVC架构模式的Web框架,底层基于Servlet实现。 SpringMVC已经将MVC架构模式实现了,因此只要我们是基于SpringMVC框架写代码,编写的程序就是符合MVC架构模式的。(MVC的架子搭好了,我们只需要添添补补) Spring框架中有一个子项目叫做Spring Web,Spring Web子项目当中包含很多模块,例如:

  • Spring MVC

  • Spring WebFlux

  • Spring Web Services

  • Spring Web Flow

  • Spring WebSocket

  • Spring Web Services Client

可见 SpringMVC是Spring Web子项目当中的一个模块。因此也可以说SpringMVC是Spring框架的一部分。 所以学习SpringMVC框架之前要先学习Spring框架中的IoC和AOP等内容。 另外,使用SpringMVC框架的时候同样也可以使用IoC和AOP。 以下就是Spring官方给出的Spring架构图,其中Web中的servlet指的就是Spring MVC:

2.SpringMVC帮我们做了什么

SpringMVC框架帮我们做了什么,与纯粹的Servlet开发有什么区别?

  1. 入口控制:SpringMVC框架通过DispatcherServlet作为入口控制器,负责接收请求和分发请求。而在Servlet开发中,需要自己编写Servlet程序,并在web.xml中进行配置,才能接受和处理请求。

  2. 在SpringMVC中,表单提交时可以自动将表单数据绑定到相应的JavaBean对象中,只需要在控制器方法的参数列表中声明该JavaBean对象即可,无需手动获取和赋值表单数据。而在纯粹的Servlet开发中,这些都是需要自己手动完成的。

  3. IoC容器:SpringMVC框架通过IoC容器管理对象,只需要在配置文件中进行相应的配置即可获取实例对象,而在Servlet开发中需要手动创建对象实例。

  4. 统一处理请求:SpringMVC框架提供了拦截器、异常处理器等统一处理请求的机制,并且可以灵活地配置这些处理器。而在Servlet开发中,需要自行编写过滤器、异常处理器等,增加了代码的复杂度和开发难度。

  5. 视图解析:SpringMVC框架提供了多种视图模板,如JSP、Freemarker、Velocity等,并且支持国际化、主题等特性。而在Servlet开发中需要手动处理视图层,增加了代码的复杂度。

总之,与Servlet开发相比,SpringMVC框架可以帮我们节省很多时间和精力,减少代码的复杂度,更加专注于业务开发。同时,也提供了更多的功能和扩展性,可以更好地满足企业级应用的开发需求。

3.SpringMVC框架的特点

  1. 轻量级:相对于其他Web框架,Spring MVC框架比较小巧轻便。(只有几个几百KB左右的Jar包文件)

  2. 模块化:请求处理过程被分成多个模块,以模块化的方式进行处理。

    1. 控制器模块:Controller

    2. 业务逻辑模块:Model

    3. 视图模块:View

  3. 依赖注入:Spring MVC框架利用Spring框架的依赖注入功能实现对象的管理,实现松散耦合。

  4. 易于扩展:提供了很多口子,允许开发者根据需要插入自己的代码,以扩展实现应用程序的特殊需求。

    1. Spring MVC框架允许开发人员通过自定义模块和组件来扩展和增强框架的功能。

    2. Spring MVC框架与其他Spring框架及第三方框架集成得非常紧密,这使得开发人员可以非常方便地集成其他框架,以获得更好的功能。

  5. 易于测试:支持单元测试框架,提高代码质量和可维护性。 (对SpringMVC中的Controller测试时,不需要依靠Web服务器。)

  6. 自动化配置:提供自动化配置,减少配置细节。

    1. Spring MVC框架基于约定大于配置的原则,对常用的配置约定进行自动化配置。

  7. 灵活性:Spring MVC框架支持多种视图技术,如JSP、FreeMarker、Thymeleaf、FreeMarker等,针对不同的视图配置不同的视图解析器即可。

三、第一个SpringMVC程序

1.创建Maven模块

第一步:创建Empty Project,起名:springmvc。

第二步:将pom.xml文件中的打包方式修改为war

<groupId>com.powernode.springmvc</groupId>
<artifactId>springmvc-001</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 打包方式设置为war方式 -->
<packaging>war</packaging>

第三步:添加以下依赖

<dependencies><!-- Spring MVC依赖 --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>6.1.4</version></dependency><!--日志框架Logback依赖--><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.5.3</version></dependency><!--Servlet依赖--><dependency><groupId>jakarta.servlet</groupId><artifactId>jakarta.servlet-api</artifactId><version>6.0.0</version><scope>provided</scope></dependency><!--Spring6和Thymeleaf整合依赖--><dependency><groupId>org.thymeleaf</groupId><artifactId>thymeleaf-spring6</artifactId><version>3.1.2.RELEASE</version></dependency>
</dependencies>

2.添加web支持

第一步:在main目录下创建一个webapp目录

3.配置web.xml文件

Spring MVC是一个web框架,在javaweb中谁来负责接收请求,处理请求,以及响应呢?当然是Servlet。在SpringMVC框架中已经为我们写好了一个Servlet,它的名字叫做:DispatcherServlet,我们称其为前端控制器。既然是Servlet,那么它就需要在web.xml文件中进行配置:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd"version="6.0"><!--SpringMVC提供的前端控制器--><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><!-- /* 表示任何一个请求都交给DispatcherServlet来处理 --><!-- / 表示当请求不是xx.jsp的时候,DispatcherServlet来负责处理本次请求--><!-- jsp本质就是Servlet,因此如果请求是jsp的话,应该走它自己的Servlet,而不应该走DispatcherServlet --><!-- 因此我们的 url-pattern 使用 / --><url-pattern>/</url-pattern></servlet-mapping></web-app>

<servlet-class>和</url-pattern>的作用

DispatcherServlet是SpringMVC框架为我们提供的最核心的类,它是整个SpringMVC框架的前端控制器,负责接收HTTP请求、将请求路由到处理程序、处理响应信息,最终将响应返回给客户端。DispatcherServlet是Web应用程序的主要入口点之一,它的职责包括:

  1. 接收客户端的HTTP请求:DispatcherServlet监听来自Web浏览器的HTTP请求,然后根据请求的URL将请求数据解析为Request对象。

  2. 处理请求的URL:DispatcherServlet将请求的URL(Uniform Resource Locator)与处理程序进行匹配,确定要调用哪个控制器(Controller)来处理此请求。

  3. 调用相应的控制器:DispatcherServlet将请求发送给找到的控制器处理,控制器将执行业务逻辑,然后返回一个模型对象(Model)。

  4. 渲染视图:DispatcherServlet将调用视图引擎,将模型对象呈现为用户可以查看的HTML页面。

  5. 返回响应给客户端:DispatcherServlet将为用户生成的响应发送回浏览器,响应可以包括表单、JSON、XML、HTML以及其它类型的数据

4.编写控制器FirstController

DispatcherServlet接收到请求之后,会根据请求路径分发到对应的Controller,Controller来负责处理请求的核心业务。在SpringMVC框架中Controller是一个普通的Java类(一个普通的POJO类,不需要继承任何类或实现任何接口),需要注意的是:POJO类要纳入IoC容器来管理,POJO类的生命周期由Spring来管理,因此要使用注解标注:

package org.example1.controller;import org.springframework.stereotype.Controller;@Controller
public class FirstController {}

5.配置springmvc-servlet.xml文件

SpringMVC框架有它自己的配置文件,该配置文件的名字默认为:<servlet-name>-servlet.xml,默认存放的位置是WEB-INF 目录下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"><!--组件扫描--><context:component-scan base-package="org.example1.controller"/><!--视图解析器--><bean id="thymeleafViewResolver" class="org.thymeleaf.spring6.view.ThymeleafViewResolver"><!--作用于视图渲染的过程中,可以设置视图渲染后输出时采用的编码字符集--><property name="characterEncoding" value="UTF-8"/><!--如果配置多个视图解析器,它来决定优先使用哪个视图解析器,它的值越小优先级越高--><property name="order" value="1"/><!--当 ThymeleafViewResolver 渲染模板时,会使用该模板引擎来解析、编译和渲染模板--><property name="templateEngine"><bean class="org.thymeleaf.spring6.SpringTemplateEngine"><!--用于指定 Thymeleaf 模板引擎使用的模板解析器。模板解析器负责根据模板位置、模板资源名称、文件编码等信息,加载模板并对其进行解析--><property name="templateResolver"><bean class="org.thymeleaf.spring6.templateresolver.SpringResourceTemplateResolver"><!--设置模板文件的位置(前缀)--><property name="prefix" value="/WEB-INF/templates/"/><!--设置模板文件后缀(后缀),Thymeleaf文件扩展名不一定是html,也可以是其他,例如txt,大部分都是html--><property name="suffix" value=".html"/><!--设置模板类型,例如:HTML,TEXT,JAVASCRIPT,CSS等--><property name="templateMode" value="HTML"/><!--用于模板文件在读取和解析过程中采用的编码字符集--><property name="characterEncoding" value="UTF-8"/></bean></property></bean></property></bean>
</beans>

在WEB-INF目录下新建springmvc-servlet.xml文件,并且提供以上配置信息。

以上配置主要两项:

  • 第一项:组件扫描。spring扫描这个包中的类,将这个包中的类实例化并纳入IoC容器的管理。

  • 第二项:视图解析器。视图解析器(View Resolver)的作用主要是将Controller方法返回的逻辑视图名称解析成实际的视图对象。视图解析器将解析出的视图对象返回给DispatcherServlet,并最终由DispatcherServlet将该视图对象转化为响应结果,呈现给用户。

注意:如果采用了其它视图,请配置对应的视图解析器,例如:

  • JSP的视图解析器:InternalResourceViewResolver

  • FreeMarker视图解析器:FreeMarkerViewResolver

  • Velocity视图解析器:VelocityViewResolver

6.提供视图

在WEB-INF目录下新建templates目录,在templates目录中新建html文件,例如:first.html,并提供以下代码:

<!DOCTYPE html>
<!--指定 th 命名空间,让 Thymeleaf 标准表达式可以被解析和执行-->
<!--th不是固定的,可以指定其它的命名空间,只不过大部分情况下用th-->
<!--表示程序中出现的 th 开头的后面代码都是 Thymeleaf语法,需要被 Thymeleaf识别-->
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>first springmvc</title>
</head>
<body>
<h1>我的第一个Spring MVC程序</h1>
</body>
</html>

对于每一个Thymeleaf文件来说 xmlns:th="http://www.thymeleaf.org" 是必须要写的,为了方便后续开发,可以将其添加到html模板文件中:

7.控制器FirstController处理请求返回逻辑视图名称

package org.example1.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;@Controller
public class FirstController {// 请求映射// 这个方法是一个实例方法// 这个方法目前返回一个String字符串// 返回值代表的是一个逻辑视图名称@RequestMapping(value = "/test")public String hehe(){// 返回一个逻辑视图名称return "first";}}

8.测试

第一步:配置Tomcat服务器

第二步:部署web模块到Tomcat服务器

第三步:启动Tomcat服务器。如果在控制台输出的信息有中文乱码,请修改tomcat服务器配置文件:apache-tomcat-10.1.19\conf\logging.properties

第四步:打开浏览器,在浏览器地址栏上输入地址

9.执行流程总结

  1. 浏览器发送请求:http://localhost:8080/springmvc/test

  2. SpringMVC的前端控制器DispatcherServlet接收到请求

  3. DispatcherServlet根据请求路径 /test 映射到 FirstController#名字随意(),调用该方法

  4. FirstController#名字随意() 处理请求

  5. FirstController#名字随意() 返回逻辑视图名称 first 给视图解析器

  6. 视图解析器找到 /WEB-INF/templates/first.html 文件,并进行解析,生成视图解析对象返回给前端控制器DispatcherServlet

  7. 前端控制器DispatcherServlet响应结果到浏览器。

10.一个Controller可以编写多个方法

一个Controller可以提供多个方法,每个方法通常是处理对应的请求,例如:

package org.example1.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;@Controller
public class FirstController {// 请求映射// 这个方法是一个实例方法// 这个方法目前返回一个String字符串// 返回值代表的是一个逻辑视图名称@RequestMapping(value = "/test")public String hehe(){// 返回一个逻辑视图名称return "first";}@RequestMapping("/other")public String other(){System.out.println("正在处理其它请求...");return "other";}}

提供 other.html 文件

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>other</title>
</head>
<body>
<h1>other ...</h1>
</body>
</html>

在 first.html 文件中,添加超链接,用超链接发送 /other 请求:

<!DOCTYPE html>
<!--指定 th 命名空间,让 Thymeleaf 标准表达式可以被解析和执行-->
<!--th不是固定的,可以指定其它的命名空间,只不过大部分情况下用th-->
<!--表示程序中出现的 th 开头的后面代码都是 Thymeleaf语法,需要被 Thymeleaf识别-->
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>first springmvc</title>
</head>
<body>
<h1>我的第一个Spring MVC程序</h1>
<!-- th: 表示后面的代码可以编写Thymeleaf语法,可以被Thymeleaf语法解析 -->
<!-- Thymeleaf检测到以 / 开始,表示绝对路径,自动会将webapp的上下文路径加上去 -->
<!-- 最终的效果是:href="/springmvc/other" -->
<a th:href="@{/other}">other请求</a>
</body>
</html>

四、第二个SpringMVC程序

1.创建Maven模块

  1. pom.xml文件中添加依赖

    1. springmvc依赖

    2. logback依赖

    3. servlet依赖(scope为provided)

    4. thymeleaf与spring6整合依赖

  2. 打包方式war

2.添加web支持

3.配置web.xml文件

重点:SpringMVC配置文件的名字和路径是可以手动设置的,如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><!--配置前端控制器--><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!--手动设置springmvc配置文件的路径及名字--><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param><!--为了提高用户的第一次访问效率,建议在web服务器启动时初始化前端控制器--><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>/</url-pattern></servlet-mapping>
</web-app>

<init-param>和<load-on-startup>的作用

通过<init-param>来设置SpringMVC配置文件的路径和名字。在DispatcherServlet的init方法执行时设置的。 <load-on-startup>1</load-on-startup>建议加上,这样可以提高用户第一次访问的效率。表示在web服务器启动时初始化DispatcherServlet。

4.编写IndexController

package org.example1.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;@Controller
public class IndexController {@RequestMapping("/")public String index(){return "index";}
}

表示请求路径如果是:http://localhost:8080/springmvc/ ,则进入 /WEB-INF/templates/index.html 页面。 这就是项目的首页效果!!!!!

5.在resources目录下配置springmvc.xml文件

配置内容和之前一样,一个是视图解析器,一个是组件扫描。

6.提供视图

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>index page</title>
</head>
<body>
<h1>index page</h1>
</body>
</html>

7.测试

部署到web服务器,启动web服务器,打开浏览器,在地址栏上输入:http://localhost:8080/springmvc/

相关文章:

第一章 初识SpringMVC

一、什么是MVC MVC是一种软件架构模式&#xff08;是一种软件架构设计思想&#xff0c;不止Java开发中用到&#xff0c;其它语言也需要用到&#xff09;&#xff0c;它将应用分为三块&#xff1a; M&#xff1a;Model&#xff08;模型&#xff09; V&#xff1a;View&#xf…...

虚幻引擎入门笔记

【虚幻5】UE5新手入门尝试 虚幻引擎的基础设置 1.验证-当文件误删的时候&#xff0c;对其进行验证&#xff0c;可以恢复。 2.虚幻引擎极其强大&#xff0c;可以实现多种复合技能&#xff0c;所在创建项目页面可以看见不只是创建游戏的项目 3.更改虚幻引擎默认的缓存地址。有些…...

Oracle 11g通过dg4odbc配置dblink连接神通数据库

1、安装unixodbc 2、安装神通数据库 3、 配置神通数据库odbc数据源&#xff0c;测试连通性 4、配置透明网关、监听文件以及对应编写的hsodbc的ora文件&#xff0c;我这里是initst.ora ##对应编写的hsodbc的ora文件 vim $ORACLE_HOME/hs/admin/initst.ora ##添加如下 HS_FDS_CO…...

2.2 矩阵

考点一&#xff1a;方阵的幂 1. 计算方法 (1) ​找规律法​ ​适用场景​&#xff1a;低阶矩阵或具有周期性规律的矩阵。​示例​&#xff1a; 计算 A ( 0 1 1 0 ) n A \begin{pmatrix} 0 & 1 \\ 1 & 0 \end{pmatrix}^n A(01​10​)n&#xff1a; 当 n n n 为奇…...

Linux《进程概念(下)》

在之前我们已经了解了进程基本的概念、知道了如何去创建子进程&#xff1b;还了解了进程状态、进程切换、进程O(1)调度算法等&#xff0c;那么接下来在本篇当中我们就来学习环境变量和程序地址空间的相关知识&#xff0c;相信通过本篇的学习你会有很大的所获&#xff0c;一起加…...

MySQL 比较运算符详解

&#xff08;1&#xff09;符号类型运算符 运算符名称作用示例等于运算符判断两个值、字符串或表达式是否相等SELECT * FROM users WHERE age 25SELECT name FROM products WHERE category Electronics<>安全等于运算符安全地判断两个值、字符串或表达式是否相等&…...

No qualifying bean of type ‘XXX‘ available

没有某类型的bean可供使用 问题一解决方案错误问题配置类YuApiClientConfig依赖导入测试方法 问题二解决方法问题现场问题解决 问题一 Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type ‘com.transbit.yuapiclientsd…...

手搓一个 MCP Server 实现水质在线数据查询

随着人工智能技术的快速发展,如何将大语言模型(LLM)与实际业务场景结合,提供精准、可控的服务成为一个热门话题。MCP(Model Context Protocol)作为一种开放协议,为应用程序向 LLM 提供标准化的上下文接口,极大地简化了这一过程。本文将以构建一个水质在线查询 MCP 服务…...

neo4j初尝试

neo4j 下载并安装 这里以ubuntu 下载为例 打开neo4j官网,如下图所示&#xff0c;找到下载中心 选择 每个人可以根据自己的系统进行下载。然后解压tar -xf neo4j-community-2025.04.0-unix.tar.gz&#xff0c;如果不出意外的话&#xff0c;这里就可以直接输入命令启动了&#…...

数据分析业务拆解底层思维

业务拆解 分析前要有方法&#xff0c;从用户体验入手&#xff0c;将业务拆解&#xff0c;找到对象以及对象之间的关系。 电商平台卖的不是用户时间&#xff0c;不是流量&#xff0c;而是机会&#xff0c;而作为一个分析师就得分析机会在哪&#xff0c;帮助平台将机会更好的提…...

Linux运维——Vim技巧一

Vim技巧 一、优化重复操作1.1、 . 命令1.2、* 命令1.3、重复修改示例 二、删除单词&#xff08;daw&#xff09;三、对数字做算数运算四、操作符与动作五、插入模式5.1、插入模式下删除5.2、返回普通模式5.3、插入-普通模式5.4、不离开插入模式&#xff0c;粘贴寄存器中的文本5…...

第一节:OpenCV 基础入门-简介与环境搭建

一、OpenCV 是什么&#xff1f;为什么值得学习&#xff1f; OpenCV&#xff08;Open Source Computer Vision Library&#xff09; 是一个开源的计算机视觉和机器学习库&#xff0c;由英特尔实验室于1999年发起&#xff0c;现已成为全球计算机视觉领域最广泛使用的工具之一。它…...

前端面经-VUE3篇(二)--vue3组件知识(一)组件注册、props 与 emits、透传、插槽(Slot)

组件允许我们将 UI 划分为独立的、可重用的部分&#xff0c;并且可以对每个部分进行单独的思考。在实际应用中&#xff0c;组件常常被组织成一个层层嵌套的树状结构&#xff1a; 一、注册 Vue 组件本质上是一个可以复用的 自定义 HTML 元素&#xff0c;为了在其他组件中使用一…...

Python的简单练习

两数的最大公约数 def gcd(a, b):while b ! 0:a, b b, a % breturn a# 示例 a 36 b 60 print(f"{a} 和 {b} 的最大公约数是: {gcd(a, b)}") while b ! 0: while&#xff1a;是 Python 的 循环语句&#xff0c;意思是“当...的时候一直重复做某事”。 b ! 0&am…...

ipvsadm,是一个什么工具?

1. ipvsadm 是什么&#xff1f; ipvsadm&#xff08;IP Virtual Server Administration&#xff09;是 Linux 内核中 IPVS&#xff08;IP Virtual Server&#xff09; 模块的管理工具&#xff0c;用于配置和监控内核级的负载均衡规则。它是 Kubernetes 中 kube-proxy 在 IPVS …...

QT6 源(72):阅读与注释单选框这个类型的按钮 QRadioButton,及各种属性验证,

&#xff08;1&#xff09;按钮间的互斥&#xff1a; &#xff08;2&#xff09;源码来自于头文件 qradiobutton . h &#xff1a; #ifndef QRADIOBUTTON_H #define QRADIOBUTTON_H#include <QtWidgets/qtwidgetsglobal.h> #include <QtWidgets/qabstractbutton.h>…...

Qt 中实现观察者模式(Observer Pattern)

在 Qt 中实现**观察者模式(Observer Pattern)通常利用其内置的信号与槽(Signals & Slots)**机制,这是最符合 Qt 设计哲学的方式。以下是详细实现方法和关键点: —### 1. 观察者模式的核心思想- Subject(被观察者):维护一个观察者列表,在状态变化时通知观察者。- …...

Vue3源码学习5-不使用 `const enum` 的原因

文章目录 前言✅ 什么是 const enum❌ 为什么 Vue 3 不使用 const enum1. &#x1f4e6; **影响构建工具兼容性**2. &#x1f501; **难以做模块间 tree-shaking**3. &#x1f9ea; **调试困难**4. &#x1f4e6; **Vue 是库&#xff0c;不掌控用户配置** ✅ 官方推荐做法&…...

自己部署后端,浏览器显示久久未响应

CIDER地址写错了&#xff0c;应该要写成0.0.0.0/0 。。。。...

【RocketMQ NameServer】- NettyEventExecutor 处理 Netty 事件

文章目录 1. 前言2. NettyEventExecutor 线程3. NettyEvent 是怎么来的4. NettyEventExecutor 线程处理不同事件的逻辑4.1 IDLE\CLOSE\EXCEPTION - onChannelIdle4.2 CONNECT - onChannelConnect 5. 小结 本文章基于 RocketMQ 4.9.3 1. 前言 【RocketMQ】- 源码系列目录 上一…...

JAVA刷题记录: 递归,搜索与回溯

专题一 递归 面试题 08.06. 汉诺塔问题 - 力扣&#xff08;LeetCode&#xff09; class Solution {public void hanota(List<Integer> A, List<Integer> B, List<Integer> C) {dfs(A, B, C, A.size());}public void dfs(List<Integer> a, List<In…...

【进阶】C# 委托(Delegate)知识点总结归纳

1. 委托的基本概念 定义&#xff1a;委托是一种类型安全的函数指针&#xff0c;用于封装方法&#xff08;静态方法或实例方法&#xff09;。 核心作用&#xff1a;允许将方法作为参数传递&#xff0c;实现回调机制和事件处理。 类型安全&#xff1a;委托在编译时会检查方法签…...

推理能力:五一模型大放送

--->更多内容&#xff0c;请移步“鲁班秘笈”&#xff01;&#xff01;<--- 近日人工智能领域迎来了一波密集的模型发布潮&#xff0c;多家科技巨头和研究机构相继推出了具有突破性特点的AI模型。这些新模型在参数规模、计算效率、多模态能力以及推理能力等方面都展现出…...

数据库=====

创建数据库 1.直接创建数据库 语法&#xff1a;CREATE DATABASE [IF NOT EXISTS] 数据库名 ——[]表示内部内容可省略 2.指定字符集和排序规则方式创建数据库 语法&#xff1a;CREATE DATABASE[IF NOT EXISTS] 数据库名 CHARACTER SET 字符集 COLLATE 排序规则 示例&#xff1a…...

VITA STANDARDS LIST,VITA 标准清单下载

VITA STANDARDS LIST&#xff0c;VITA 标准清单下载 DesignationTitleAbstractStatusVMEbus Handbook, 4th EditionA users guide to the VME, VME64 and VME64x bus specifications - features over 70 product photos and over 160 circuit diagrams, tables and graphs. The…...

npm pnpm yarn 设置国内镜像

国内镜像 常用的国内镜像&#xff1a; 淘宝镜像 https://registry.npmmirror.com 腾讯云镜像​​ https://mirrors.cloud.tencent.com/npm/ 华为云镜像​​ https://repo.huaweicloud.com/repository/npm/ CNPM&#xff08;阿里系&#xff09; ​​ https://r.cnpmjs.org/ 清华…...

互联网大厂Java面试:从Spring到微服务的技术探讨

场景&#xff1a;互联网大厂Java求职者面试 在一家知名的互联网大厂面试中&#xff0c;面试官王严肃正在面试一位名叫谢飞机的程序员。谢飞机以其独特的幽默感而闻名&#xff0c;但在技术面前&#xff0c;他的能力能否得到认可呢&#xff1f; 第一轮提问&#xff1a;核心技术…...

[machine learning] Transformer - Attention (二)

本文介绍带训练参数的self-attention&#xff0c;即在transformer中使用的self-attention。 首先引入三个可训练的参数矩阵Wq, Wk, Wv&#xff0c;这三个矩阵用来将词向量投射(project)到query, key, value三个向量上。下面我们再定义几个变量&#xff1a; import torch inpu…...

Java多语言DApp质押挖矿盗U源码(前端UniApp纯源码+后端Java)

内容&#xff1a; 这款Java多语言DApp质押挖矿盗U源码提供了完整的前端与后端开发框架&#xff0c;适用于区块链应用开发。系统包括&#xff1a; 前端源码&#xff08;UniApp&#xff09;&#xff1a;采用UniApp开发&#xff0c;跨平台支持iOS、Android及H5。界面简洁&#xf…...

如何解决 403 错误:请求被拒绝,无法连接到服务器

解决 403 错误&#xff1a;请求被拒绝&#xff0c;无法连接到服务器 当您在浏览网站或应用时&#xff0c;遇到 403 错误&#xff0c;通常会显示类似的消息&#xff1a; The request could not be satisfied. Request blocked. We can’t connect to the server for this app o…...

CGI(Common Gateway Interface)协议详解

CGI&#xff08;通用网关接口&#xff09;是一种标准化的协议&#xff0c;定义了 Web服务器 与 外部程序&#xff08;如脚本或可执行文件&#xff09;之间的数据交互方式。它允许服务器动态生成网页内容&#xff0c;而不仅仅是返回静态文件。 1. CGI 的核心作用 动态内容生成&a…...

HybridCLR 详解:Unity 全平台原生 C# 热更新方案

HybridCLR&#xff08;原 Huatuo&#xff09;是 Unity 平台革命性的热更新解决方案&#xff0c;它通过扩展 Unity 的 IL2CPP 运行时&#xff0c;实现了基于原生 C# 的完整热更新能力。下面从原理到实践全面解析这一技术。 一、核心原理剖析 1. 技术架构 原始 IL2CPP 流程&am…...

电脑RGB888P转换为JPEG方案 ,K230的RGB888P转换为JPEG方案

K230开发板本身具备将RGB888P转换为JPEG的能力&#xff0c;但需要正确调用硬件或软件接口。以下是具体分析及解决方案&#xff1a; 一、K230原生支持性分析 1. 硬件支持 K230的NPU&#xff08;神经网络处理器&#xff09;和图像处理单元&#xff08;ISP&#xff09;理论上支持…...

基于SpringBoot+Vue实现的电影推荐平台功能三

一、前言介绍&#xff1a; 1.1 项目摘要 2023年全球流媒体用户突破15亿&#xff0c;用户面临海量内容选择困难&#xff0c;传统推荐方式存在信息过载、推荐精准度低等问题。传统推荐系统存在响应延迟高&#xff08;平均>2s&#xff09;。随着互联网的快速发展&#xff0c;…...

NHANES指标推荐:triglyceride levels

文章题目&#xff1a;Association between triglyceride levels and rheumatoid arthritis prevalence in women: a cross-sectional study of NHANES (1999-2018) DOI&#xff1a;10.1186/s12905-025-03645-y 中文标题&#xff1a;女性甘油三酯水平与类风湿性关节炎患病率之间…...

打印Activity的调用者

有时候我们会发现自己应用中的某个Activity被陌名奇妙的打开了&#xff0c;但是不知道是哪里的代码打开的&#xff0c;此时可以打印Activity的调用堆栈&#xff0c;在Activity的onCreate函数中添加如下代码&#xff1a; Arrays.stream(Thread.currentThread().getStackTrace()…...

深入解析 SqlSugar 与泛型封装:实现通用数据访问层

在现代软件开发中&#xff0c;ORM&#xff08;对象关系映射&#xff09;框架的使用已经成为不可或缺的部分&#xff0c;SqlSugar 是一款非常流行且强大的 ORM框架。它不仅提供了简单易用的数据库操作&#xff0c;还具备了高效的性能和灵活的配置方式。为了进一步提升数据库操作…...

普通 html 项目引入 tailwindcss

项目根目录安装依赖 npm install -D tailwindcss3 postcss autoprefixer 初始化生成tailwind.config.js npx tailwindcss init 修改tailwind.config.js /** type {import(tailwindcss).Config} */ module.exports {content: ["./index.html"], //根据自己的项目…...

Go小技巧易错点100例(二十七)

本期分享&#xff1a; 1. Go语言中的Scan函数 2. debug.Stack()打印堆栈信息 3. Go条件编译 正文&#xff1a; Go语言中的Scan函数 在Go语言中&#xff0c;Scan函数是一个强大的工具&#xff0c;它主要用于从输入源&#xff08;如标准输入、文件或网络连接&#xff09;读取…...

单细胞测序数据分析流程的最佳实践

单细胞测试数据分析流程是整个论文数据分析过程中相对固定的部分&#xff0c;有一定的标准流程&#xff0c;以下整理了发表论文的相关内容供简要了解&#xff0c;详细内容可以参照2019年发表的综述&#xff1a;Luecken MD, Theis FJ. Current best practices in single-cell RN…...

Elasticsearch:RAG 和 grounding 的价值

作者&#xff1a;来自 Elastic Toms Mura 了解 RAG、grounding&#xff0c;以及如何通过将 LLM 连接到你的文档来减少幻觉。 更多阅读&#xff1a;Elasticsearch&#xff1a;在 Elastic 中玩转 DeepSeek R1 来实现 RAG 应用 想获得 Elastic 认证吗&#xff1f;查看下一期 Elast…...

经典算法 求解台阶问题

求解台阶问题 题目描述 实现一个算法求解台阶问题。介绍如下&#xff1a; 对于高度为 n 的台阶&#xff0c;从下往上走&#xff0c;每一步的阶数为 1、2 或 3 中的一个。问要走到顶部一共有多少种走法。 输入描述 输入一个数字 N&#xff1a; 1 ≤ N ≤ 35表示台阶的高度 …...

伊甸园之东: 农业革命与暴力的复杂性

农业革命的开始 农业革命是人类历史上的第一次重大经济和社会变革&#xff0c;标志着人们从狩猎采集转向农耕。 该变革虽然进展缓慢&#xff0c;却彻底改变了人类的生活方式和社会结构。狩猎采集社会的特征 狩猎采集者生活在小规模、低密度的部落中&#xff0c;依赖于不稳定的自…...

MCP多智能体消息传递机制(Message Passing Between Agents)

目录 &#x1f680; MCP多智能体消息传递机制&#xff08;Message Passing Between Agents&#xff09; &#x1f31f; 为什么要引入消息传递机制&#xff1f; &#x1f3d7;️ 核心设计&#xff1a;Agent间消息传递模型 &#x1f6e0;️ 1. 定义标准消息格式 &#x1f6e…...

Deformable DETR模型解读(附源码+论文)

Deformable DETR 论文链接&#xff1a;Deformable DETR: Deformable Transformers for End-to-End Object Detection 官方链接&#xff1a;Deformable-DETR(这个需要在linux上运行&#xff0c;所以我是用的是mmdetection里面的Deformable DERT&#xff0c;看了一下源码基本是…...

游戏引擎学习第255天:构建配置树

为今天的内容设定背景 今天的任务是构建性能分析&#xff08;profiling&#xff09;视图。 目前来看&#xff0c;展示性能分析图形本身并不复杂&#xff0c;大部分相关功能在昨天已经实现。图形显示部分应该相对直接&#xff0c;工作量不大。 真正需要解决的问题&#xff0c;是…...

JavaScript性能优化实战之调试与性能检测工具

在进行 JavaScript 性能优化时,了解和使用正确的调试与性能检测工具至关重要。它们能够帮助我们识别性能瓶颈,精确定位问题,并做出有针对性的优化措施。本文将介绍一些常见的调试和性能检测工具,帮助你更好地分析和优化你的 JavaScript 代码。 1️⃣ Chrome DevTools Chro…...

C#VisionMaster算子二次开发(非方案版)

前言 在网上VisionMaster的教程通常都是按照方案执行的形式&#xff0c;当然海康官方也是推荐使用整体方案的形式进行开发。但是由于我是做标准设备的&#xff0c;为了适配原有的软件框架和数据结构&#xff0c;就需要将特定需要使用的算子进行二次封装。最直接的好处是&#…...

计算机总线系统入门:理解数据传输的核心

一、总线系统简介&#xff1a;计算机内部的交通网络 在计算机系统中&#xff0c;总线是指连接各个组件的一组共享信号线或传输通道&#xff0c;用于在系统内不同的硬件模块之间传递数据、地址、控制信号等信息。它类似于交通系统中的道路&#xff0c;帮助计算机各个部件&#…...

【Linux】Petalinux驱动开发基础

基于Petalinux做Linux驱动开发。 部分图片和经验来源于网络,若有侵权麻烦联系我删除,主要是做笔记的时候忘记写来源了,做完笔记很久才写博客。 专栏目录:记录自己的嵌入式学习之路-CSDN博客 目录 1 一个完整的Linux系统(针对Zynq) 1.1 PS部分 1.2 PL部分(若…...