基于Ant DesignPro Vue + SpringBoot 前后端分离 - 后端微服化 + 接口网关 + Nacos

news2024/9/20 20:37:46

基于Ant DesignPro Vue + SpringBoot 前后端分离 - 后端微服化 + 接口网关 + Nacos

通过Ant DesignPro Vue + SpringBoot 搭建的后台管理系统后,实现了前后端分离,并实现了登录认证,认证成功后返回该用户相应权限范围内可见的菜单。

  • 后端采用SpringCloud构建微服,采用SpringCloud Gateway做为服务网关,采用Nacos做为统一配置中心,并在服务网关部分解决了前端跨域调用的问题。
  • 前端VUE的所有向后端的请求全部指向服务网关,接口网关根据Url请求路径为/api/auth/或/api/account/,则将请求转发至ms-login服务;接口网关根据Url请求路径为/api/user/,则将请求转发至ms-user服务;

Ant Design Pro相关系列文章:
一、AntDesign Pro安装过程
二、基于Ant DesignPro实现通过SpringBoot后台加载自定义菜单-前端部分
三、基于Ant DesignPro实现通过SpringBoot后台加载自定义菜单-SpringBoot后端部分
四、搭建Vue版Ant Design Pro后台管理系统
五、基于Ant DesignPro Vue实现通过SpringBoot后台加载自定义菜单- 前后端分离
六、基于Ant DesignPro Vue + SpringBoot 前后端分离 - 部署后解决跨域的问题
七、基于Ant DesignPro Vue + SpringBoot 前后端分离 - 后端微服化 + 接口网关 + Nacos
八、基于Ant DesignPro Vue + SpringBoot 前后端分离 - 后端微服化 + 接口网关 + Nacos + Sentinel

源码开源地址

  • 后端Springboot工程代码已上传gitee,地址:https://gitee.com/duyanjun/mc-cloud.git
  • 本文章中代码是将文章【六、基于Ant DesignPro Vue + SpringBoot 前后端分离 - 部署后解决跨域的问题】中单体改造为微服架构

目录

  • 基于Ant DesignPro Vue + SpringBoot 前后端分离 - 后端微服化 + 接口网关 + Nacos
  • 一、采用的技术架构
  • 二、Maven工程结构
  • 三、微服架构
  • 四、前期准备
    • 1、安装Nacos
      • 1)、下载Nacos docker脚本
      • 2)、快速启动
      • 3)、登录Nacos
    • 2、通过Ant DesignPro Vue构建前端
      • 1)、修改vue.config.js
      • 2)、修改.env
      • 3)、修改.env.development
  • 五、构建Root工程ms-cloud
  • 六、构建子模块 ms-gateway
    • 1、pom.xml
    • 2、application.yml
    • 3、启动类GatewayApplication.ava
    • 4、解决接口网关跨域配置类
  • 七、构建子模块 ms-mcv
    • 1、pom.xml
    • 2、构建子模块ms-mcv-common
    • 3、构建子模块ms-mcv-login
      • 1)、子模块ms-mcv-login的pom.xml
      • 2)、application.yml
    • 4、构建子模块ms-mcv-user
      • 1)、子模块ms-mcv-user的pom.xml
      • 2)、application.yml
  • 八、验证
    • 1、服务可以正常注册到Nacos
      • 1)、启动ms-gateway、ms-login、ms-user这三个服务
      • 2)、nacos中服务的注册状态
    • 2、启动前端服务
      • 1)、在前端代码根目录执行下面命令
      • 2)、访问前端页面

一、采用的技术架构

序号技术框架说明
1Spring Cloud AlibabaSpring Cloud Alibaba微服体系架构
2NacosApi网关、服务注册发现配置管理中心
3Spring Cloud GatewaySpring Cloud 网关
4Ant Design Pro Vue前端页面

二、Maven工程结构

|-- ms-cloud         # Root工程
|  |-- ms-gateway    # 服务网关
|  |-- ms-mcv        # 后端工程
|    |-- ms-mcv-common  # 后端工程-公共部分,例如实体类
|    |-- ms-mcv-login   # 后端工程-登录接口服务
|    |-- ms-mcv-user    # 后端工程-用户接口服务

在这里插入图片描述

三、微服架构

在这里插入图片描述

四、前期准备

1、安装Nacos

其它的获取启动方式请参照【Nacos官方文档】

1)、下载Nacos docker脚本

git clone https://github.com/nacos-group/nacos-docker.git
cd nacos-docker

2)、快速启动

docker-compose -f example/standalone-mysql-5.7.yaml up

3)、登录Nacos

执行完上述命令需要等待几分钟时间,需要下载nacos和mysql的镜像,下载完成后会自动启动,启动成功后可以访问http://ip:8848/nacos
在这里插入图片描述

2、通过Ant DesignPro Vue构建前端

参见 搭建Vue版Ant Design Pro后台管理系统

1)、修改vue.config.js

将devServer配置项中添加proxy配置项,并将target改为process.env.VUE_APP_API_BASE_URL

  devServer: {
    // development server port 8000
    port: 8000,
    // If you want to turn on the proxy, please remove the mockjs /src/main.jsL11
    proxy: {
       '/api': {
         target: process.env.VUE_APP_API_BASE_URL,
         ws: false,
         changeOrigin: true
       }
     }
  },

2)、修改.env

VUE_APP_API_BASE_URL=生产环境的后端服务网关地址

在这里插入图片描述

3)、修改.env.development

VUE_APP_API_BASE_URL=开发环境的后端服务网关地址

在这里插入图片描述

五、构建Root工程ms-cloud

ms-cloud的pom.xml如下

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.ms</groupId>
    <artifactId>ms-cloud</artifactId>
    <packaging>pom</packaging>
    <version>1.0</version>
    <name>${project.artifactId}</name>
    <url>https://blog.csdn.net/dyj095</url>

    <properties>
        <spring-boot.version>2.7.10</spring-boot.version>
        <spring-cloud.version>2021.0.6</spring-cloud.version>
        <spring-cloud-alibaba.version>2021.0.5.0</spring-cloud-alibaba.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <git.commit.plugin>4.9.9</git.commit.plugin>
        <spring.checkstyle.plugin>0.0.38</spring.checkstyle.plugin>
        <net.sf.json.version>1.0.2</net.sf.json.version>
    </properties>

    <!-- 以下依赖 全局所有的模块都会引入  -->
    <dependencies>
        <!--配置文件处理器-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <!--Lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
        </dependency>
        <!--测试依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <modules>
        <module>ms-gateway</module>
        <module>ms-mcv</module>
    </modules>
    <dependencyManagement>
        <dependencies>
            <!-- spring boot 依赖 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!-- spring cloud 依赖 -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!-- spring cloud alibaba 依赖 -->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring-cloud-alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

说明:

  • properties标签:配置各依赖包的版本信息
  • dependencies标签: 配置全局所有的模块都会引入依赖
  • modules标签: 配置ms-cloud模块下有两个子模块,分别是ms-gateway(服务网关)、ms-mcv(后台模块)
  • dependencyManagement:配置依赖

六、构建子模块 ms-gateway

在这里插入图片描述

1、pom.xml

ms-gateway子模块的pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>ms-cloud</artifactId>
        <groupId>com.ms</groupId>
        <version>1.0</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>ms-gateway</artifactId>
    <description>服务网关,基于 spring cloud gateway</description>
    <dependencies>
        <!--nacos服务注册发现依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <!--网关gateway依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-loadbalancer</artifactId>
        </dependency>
    </dependencies>

</project>

说明:

  • spring-cloud-starter-alibaba-nacos-discovery:nacos发现需要的依赖
  • spring-cloud-starter-alibaba-nacos-config: 自动从nacos上获取配置以及监控配置的变更并自动更新
  • spring-cloud-starter-gateway:Spring cloud 服务网关依赖
  • spring-cloud-loadbalancer:Spring cloud 服务网关路由需要的依赖,没有此依赖就不会将请求路由于相应后面的微服务上

2、application.yml

server:
  port: 9999
logging:
  level:
    com.ms: debug
  pattern:
    dateformat: MM-dd HH:mm:ss:SSS

spring:
  application:
    name: ms-gateway
  cloud:
    nacos:
      server-addr: 192.168.2.146:8848
    gateway:
      enabled: true
      routes:
        - id: ms-login
          uri: lb://ms-login
          predicates:
            - Path=/api/auth/**,/api/account/**
        - id: ms-user
          uri: lb://ms-user
          predicates:
            - Path=/api/user/**

  config:
    import:
      - optional:nacos:application.yml
      - optional:nacos:${spring.application.name}.yml

参数说明:

  • spring.cloud.nacos.server-addr: nacos服务器地址:端口
  • spring.gateway: 配置springCloud gateway的参数

3、启动类GatewayApplication.ava

package com.ms.gateway;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient
public class GatewayApplication {

    public static void main(String[] args){
        SpringApplication.run(GatewayApplication.class, args);
    }
}

说明:
项目启动类

  • @EnableDiscoveryClient注解:标注当前工程会向Nacos注册

4、解决接口网关跨域配置类

package com.ms.gateway.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.reactive.CorsConfigurationSource;
import org.springframework.web.cors.reactive.CorsWebFilter;
import org.springframework.web.server.ServerWebExchange;

@Configuration
public class CrossOriginConfig {

    @Bean
    public CorsWebFilter corsFilter() {
        CorsConfigurationSource corsConfigurationSource = new CorsConfigurationSource() {
            @Override
            public CorsConfiguration getCorsConfiguration(ServerWebExchange serverWebExchange) {
                CorsConfiguration corsConfiguration = new CorsConfiguration();
                corsConfiguration.addAllowedHeader("*");
                corsConfiguration.addAllowedMethod("*");
                corsConfiguration.addAllowedOriginPattern("*");
                corsConfiguration.setAllowCredentials(true);


                return corsConfiguration;
            }
        };
        return new CorsWebFilter(corsConfigurationSource);
    }
}

说明:

  • 此类非常重要,用于解决前端跨域的问题,采用的方案是前端和服务网关添加跨域代码,后端微服务不需要添加跨域代码
  • 1、前端:VUE添加跨域相关代码,详细请参见文章 - 【六、基于Ant DesignPro Vue + SpringBoot 前后端分离 - 部署后解决跨域的问题】
  • 2、服务网关:添加跨域相关代码,就是当前类
  • 3、后端微服务:不添加任何跨域相关代码

七、构建子模块 ms-mcv

在这里插入图片描述

1、pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>ms-cloud</artifactId>
        <groupId>com.ms</groupId>
        <version>1.0</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>ms-mcv</artifactId>
    <packaging>pom</packaging>
    <modules>
        <module>ms-mcv-login</module>
        <module>ms-mcv-user</module>
        <module>ms-mcv-common</module>
    </modules>
</project>

说明:
当前模块只是一个后端父模块,定义了3个子模块

  • ms-mcv-common:定义了后端模块中公共代码,例如实例类、工具类…
  • ms-mcv-login: 实现了/api/auth/**和/api/account/**这两部分的请求
  • ms-mcv-user: 实现了/api/user/**这部分的请求

2、构建子模块ms-mcv-common

在这里插入图片描述

子模块ms-mcv-common的pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>ms-mcv</artifactId>
        <groupId>com.ms</groupId>
        <version>1.0</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>ms-mcv-common</artifactId>
</project>

说明:
当前模块只定义了实体类,并未依赖第三方依赖

3、构建子模块ms-mcv-login

加粗样式

1)、子模块ms-mcv-login的pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>ms-mcv</artifactId>
        <groupId>com.ms</groupId>
        <version>1.0</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>ms-mcv-login</artifactId>
    <packaging>jar</packaging>
    <description>mcv ant design pro vue后端接口服务-登录接口处理模块</description>

    <dependencies>
        <dependency>
            <groupId>com.ms</groupId>
            <artifactId>ms-mcv-common</artifactId>
            <version>1.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--json需要的依赖 -->
        <dependency>
            <groupId>net.sf.json-lib</groupId>
            <artifactId>json-lib-ext-spring</artifactId>
            <version>${net.sf.json.version}</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>io.fabric8</groupId>
                <artifactId>docker-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

说明:

  • ms-mcv-common:依赖ms-mcv-common模块中定义的实体类
  • spring-boot-starter-web:当前模块需要以springboot启动并需要web容器发布http接口
  • spring-cloud-starter-alibaba-nacos-discovery:需要Nacos的注册与发现
  • json-lib-ext-spring:json依赖

2)、application.yml

server:
  port: 8000
  servlet:
    context-path: /
logging:
  file:
    name: ms-login
    path: ./logs/ms-login/
    max-size: 10MB
    max-history: 7
  config: classpath:logback-spring.xml
spring:
  application:
    name: ms-login
  cloud:
    nacos:
      server-addr: 192.168.2.146:8848

说明:

  • server.port: 服务端口8000
  • spring.cloud.nacos.server-addr:配置nacos服务器的ip:端口
  • spring.application.name: 配置当前模块的应用名称,也是注册到nacos的服务名称:ms-login

4、构建子模块ms-mcv-user

在这里插入图片描述

1)、子模块ms-mcv-user的pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>ms-mcv</artifactId>
        <groupId>com.ms</groupId>
        <version>1.0</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>ms-mcv-user</artifactId>
    <packaging>jar</packaging>
    <description>mcv ant design pro vue后端接口服务-User接口处理模块</description>

    <dependencies>
        <dependency>
            <groupId>com.ms</groupId>
            <artifactId>ms-mcv-common</artifactId>
            <version>1.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--json需要的依赖 -->
        <dependency>
            <groupId>net.sf.json-lib</groupId>
            <artifactId>json-lib-ext-spring</artifactId>
            <version>${net.sf.json.version}</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>io.fabric8</groupId>
                <artifactId>docker-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

说明:

  • ms-mcv-common:依赖ms-mcv-common模块中定义的实体类
  • spring-boot-starter-web:当前模块需要以springboot启动并需要web容器发布http接口
  • spring-cloud-starter-alibaba-nacos-discovery:需要Nacos的注册与发现
  • json-lib-ext-spring:json依赖

2)、application.yml

server:
  port: 8001
  servlet:
    context-path: /
logging:
  file:
    name: ms-user
    path: ./logs/ms-user/
    max-size: 10MB
    max-history: 7
  config: classpath:logback-spring.xml

spring:
  application:
    name: ms-user
  cloud:
    nacos:
      server-addr: 192.168.2.146:8848

说明:

  • server.port: 服务端口8001
  • spring.cloud.nacos.server-addr:配置nacos服务器的ip:端口
  • spring.application.name: 配置当前模块的应用名称,也是注册到nacos的服务名称:ms-user

八、验证

1、服务可以正常注册到Nacos

1)、启动ms-gateway、ms-login、ms-user这三个服务

在这里插入图片描述

2)、nacos中服务的注册状态

在这里插入图片描述

2、启动前端服务

1)、在前端代码根目录执行下面命令

npm run serve

在这里插入图片描述

2)、访问前端页面

在浏览器中访问http://127.0.0.1:8002
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

说明:
通过验证,前端VUE画面可以通过服务网关路由,正常的可以请求到后端多个微服务的接口

  • http://127.0.0.1:9999/api/auth/2step-code: 服务网关根据请求根据url匹配,将其路由至http://ms-login/api/auth/2step-code
  • http://127.0.0.1:9999/api/auth/login:服务网关根据请求根据url匹配,将其路由至http://ms-login/api/auth/login
  • http://127.0.0.1:9999/api/user/info: 服务网关根据请求根据url匹配,将其路由至http://ms-user/api/user/info

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

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

相关文章

一、枚举类型——新特性(将 switch 作为表达式)

switch 一直以来都只是一个语句&#xff0c;并不会生成结果。 JDK 14 使得 switch 还可以作为 一个表达式来使用&#xff0c;因此它可以得到一个值&#xff1a; SwitchExpression.java public class SwitchExpression {static int colon(String s) {var result switch (s) {ca…

基于单片机的智能点滴速度输液液体检测

功能介绍 以51单片机作为主控系统&#xff1b;显示液位&#xff0c;滴数&#xff0c;温度等信息&#xff1b;通过水位传感器检测当前药瓶是否有水&#xff1b;通过滴速传传感器利用单片机定时器计算当前滴速&#xff1b;通过DS18B20温度传感器采集当前药液温度&#xff0c;继电…

【前端】JS语法——数据类型转换

一、字符串&#xff08;里面必须数字&#xff09;转换为数字类型&#xff08;number&#xff09; 1、强制转换&#xff1a;(parseInt()、parseFloat()、Number())&#xff1b; 2、隐式转换&#xff08;number[-/*%]string&#xff09;&#xff1b; <script>let s &qu…

红米K60刷入MIUI.EU安装面具magisk与root教程

文章目录 前言1.解锁BootLoader2.刷入Recovery3.刷入EU的ROM包4.刷入magisk面具后话 前言 教程大概就是四步&#xff0c;解锁&#xff0c;刷入rec&#xff0c;刷入系统&#xff0c;刷入面具&#xff0c;跟着教程走即可。这次是刷机方式&#xff1a;卡刷&#xff08;Recovery&a…

SELECT * 会导致查询效率低的原因

SELECT * 会导致查询效率低的原因 前言一、适合SELECT * 的使用场景二、SELECT * 会导致查询效率低的原因2.1、数据库引擎的查询流程2.2、SELECT * 的实际执行过程2.3、使用 SELECT * 查询语句带来的不良影响 三、优化查询效率的方法四、总结 前言 因为 SELECT * 查询语句会查…

PCL可视化 3D点云PCD文件

工具安装 sudo apt install pcl-tools 启动命令&#xff1a; pcl_viewer 000000.pcd

chatgpt赋能python:在Python官网上下载Python:一位有10年Python编程经验的工程师分享

在Python官网上下载Python&#xff1a;一位有10年Python编程经验的工程师分享 Python是如今最受欢迎的编程语言之一。它是一种易学易用、具有广泛用途的开源语言。如果您刚开始使用Python&#xff0c;或者想要更新到最新版本的Python&#xff0c;Python官网是一个很好的起点。…

QT学习笔记4--自定义信号的槽

逻辑&#xff1a;下课后&#xff0c;老师饿了&#xff0c;学生请吃饭。 使用connect函数连接自定义的信号和槽函数。 创建类 信号 #ifndef TEACHER_H #define TEACHER_H#include <QObject>class teacher : public QObject {Q_OBJECT public:explicit teacher(QObjec…

浙江专升本高等数学易错例题讲解-函数间断点

例题 考察内容&#xff1a;间断点的判断 易错点分析&#xff1a;化简时不能把负数带入根号 浙江专升本高等数学易错例题讲解-函数间断点

【前端1】标签,css,js

文章目录 1.标签&#xff1a;input1.1 html&#xff1a;HTML&#xff08;用于创建网页结构&#xff09;&#xff0c;CSS&#xff08;对页面进行美化&#xff09;&#xff0c;JavaScript&#xff08;用于与用户交互&#xff09;1.2 文本标签&#xff1a;字体属性1.3 a标签&#…

【动手学习深度学习--逐行代码解析合集】03图像分类数据集

【动手学习深度学习】逐行代码解析合集 03图像分类数据集 视频链接&#xff1a;B站-动手学习深度学习 课程主页&#xff1a;https://courses.d2l.ai/zh-v2/ 教材&#xff1a;https://zh-v2.d2l.ai/ 代码 以下代码是在PyCharm中运行的 import matplotlib # 注意这个也要import一…

word整理pdf转换来的文章,或者从网页复制的格式

这是对文章的格式整理。 1、去除 分节符 首先&#xff0c;用格式工厂或者别的pdf转换器等&#xff0c;都会出现为了保持原有格式不变因此增加分节符的情况 添加分节符后&#xff0c;即使这一页还有很大的空白&#xff0c;下一段也会另起一页 而且&#xff0c;单纯的backspa…

Java+控制台实现员工信息管理系统

Java控制台实现员工信息管理系统 一、系统介绍二、功能展示1.主页2.添加员工3.员工列表4.根据员工号查询信息5.根据员工号删除信息6.根据员工号调整员工工资7.退出系统 四、其它1.其他系统实现2.获取源码 一、系统介绍 使用ArrayList对完成一个员工管理系统&#xff0c;员工信…

Flutter 实现任意控件拖动

文章目录 前言一、如何实现&#xff1f;1、使用GestureDetector响应拖动事件2、使用Transform变换控件位置3、计算拖动区域 二、完整代码三、使用示例1、基本用法 总结 前言 使用flutter开发是需要控件能拖动&#xff0c;比如画板中的元素&#xff0c;或者工具条&#xff0c;搜…

chatgpt赋能python:用Python进行数据挖掘来优化SEO排名

用Python进行数据挖掘来优化SEO排名 您是否一直在为如何在搜索引擎排名上优化自己的网站而苦恼&#xff1f;事实上&#xff0c;Python可以成为您的得力助手&#xff0c;来简化您的分析和优化过程&#xff0c;并帮助您在搜索引擎排名上获得更好的结果。 什么是SEO&#xff1f;…

tomcat与自定义类加载器

类加载器与类的”相同“判断 类加载器除了用于加载类外&#xff0c;还可用于确定类在Java虚拟机中的唯一性。 不同类加载器加载的类在 JVM 看来是两个不同的类&#xff0c;因为在 JVM 中一个类的唯一标识是 类加载器类名(包括包名)。 类加载器种类 启动类加载器&#xff0c;…

phpstorm左边变黄,页面内跳转追踪等功能不好使了

第一种方法&#xff1a;删除项目根目录中.idea文件夹(确保删除成功)&#xff0c;然后再重新打开项目即可&#xff08;这个方法对我无效&#xff09; 第二种方法&#xff1a;点击File(文件)->Repair IDE(修复IDE)&#xff0c;按照右下角的指示一步步操作即可&#xff08;这种…

华为OD机试真题 Python 实现【静态代码扫描服务】【2023Q1 100分】

目录 一、题目描述二、输入描述三、输出描述四、解题思路五、Python算法源码六、效果展示1、输入2、输出 一、题目描述 静态扫描快速识别源代码的缺陷&#xff0c;静态扫描的结果以扫描报告作为输出&#xff1a; 文件扫描的成本和文件大小相关&#xff0c;如果文件大小为N&am…

echarts折线图背景空白太大

1、没有调间距的效果&#xff1a; 2、更改间距后的效果&#xff1a; 3、其实只要更改grid定位值就行了&#xff0c;上代码&#xff1a; grid: {top: 20px,left: 20px,right: 20px,bottom: 20px,containLabel: true},4、将代码copy到option里面就行了

【中间件】Ngnix入门

文章目录 下载地址相关概念*反向代理&#xff1a;*负载均衡&#xff1a;轮询权重轮询iphash*动静分离 文件解释/conf/nginx.conf 基本使用双击运行&#xff08;不建议&#xff09;使用命令行 常用命令&#xff08;Linux下&#xff09; 下载地址 Nginx官网下载页 相关概念 *反…