不需要配置文件实现Javaweb项目的启动

1.首先看一下web.xml主要配置内容

<?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">
    <!-- 配置 DispatcherServlet 以处理所有HTTP请求 -->
    <servlet>
        <servlet-name>app</servlet-name> <!-- 定义 Servlet 的名称 -->
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 指定前端控制器类 -->

        <init-param>
            <param-name>contextConfigLocation</param-name> <!-- 初始化参数名:上下文配置文件位置 -->
            <param-value>classpath:app-context.xml</param-value> <!-- 上下文配置文件的位置,在类路径下查找 -->

        </init-param>
        <load-on-startup>1</load-on-startup> <!-- 定义在服务器启动时加载该 Servlet 的优先级,数字越小优先级越高 -->
    </servlet>

    <!-- 将所有请求映射到 DispatcherServlet -->
    <servlet-mapping>
        <servlet-name>app</servlet-name> <!-- 映射到上面定义的 Servlet 名称 -->
        <url-pattern>/</url-pattern> <!-- URL 模式,这里使用 "/" 表示拦截所有请求,但不包括静态资源 -->
    </servlet-mapping>
</web-app>
  • DispatcherServlet 配置
<servlet>
    <servlet-name>app</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:app-context.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
    <multipart-config>
        <max-file-size>10485760</max-file-size>
        <max-request-size>10485760</max-request-size>
    </multipart-config>
</servlet>

<servlet-mapping>
    <servlet-name>app</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

:定义了一个名为app的Servlet,它实际上是一个Spring MVC的前端控制器DispatcherServlet。
:指定了用于处理请求的类,这里是DispatcherServlet。
:初始化参数,指定了Spring应用上下文的位置为classpath:app-context.xml,即从类路径中加载配置文件。
:表示在Web应用启动时立即加载此Servlet,值1表明优先级较高(数值越小优先级越高)。

  • 对应配置类
package com.pyb.config;

import jakarta.servlet.Filter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

/**
 * Spring Web应用初始化器,用于配置Spring和SpringMVC上下文以及DispatcherServlet映射
 */
public class EpidemicApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    private static final Logger logger = LoggerFactory.getLogger(EpidemicApplicationInitializer.class);

    /**
     * 用来配置ContextLoaderListener创建对应上下文的bean
     */
    @Override
    protected Class<?>[] getRootConfigClasses() {
        logger.info("Loading root configuration classes.");
        return new Class[]{SpringConfig.class};
    }
    /**
     * 用于定义DispatcherServlet应用上下文的bean
     */
    @Override
    protected Class<?>[] getServletConfigClasses() {
        logger.info("Loading servlet configuration classes.");
        return new Class[]{SpringMVCConfig.class};
    }

    /**
     * 配置拦截器,将所有请求映射到DispatcherServlet
     */
    @Override
    protected String[] getServletMappings() {
        logger.info("Mapping all requests to DispatcherServlet.");
        return new String[]{"/"};
    }

    /**
     * 可选:配置过滤器(如果需要)
     */
    @Override
    protected Filter[] getServletFilters() {

        return new Filter[]{new CharacterEncodingFilter("UTF-8", true)};
    }
}

在这里插入图片描述

类的核心功能介绍

  1. 加载根配置类

@Override
protected Class<?>[] getRootConfigClasses() {
logger.info(“Loading root configuration classes.”);
return new Class[]{SpringConfig.class};
}
作用:指定哪些配置类应该被用来创建应用的根(全局)Spring应用上下文。这里指定了SpringConfig类作为根配置。
意义:这些配置类中定义的bean可以在整个应用程序中使用,不仅限于Web层。
2. 加载Servlet配置类

@Override
protected Class<?>[] getServletConfigClasses() {
logger.info(“Loading servlet configuration classes.”);
return new Class[]{SpringMVCConfig.class};
}
作用:指定哪些配置类应该被用来创建DispatcherServlet的应用上下文。这里指定了SpringMVCConfig类作为Servlet配置。
意义:这些配置类中定义的bean主要用于Web层,例如控制器、视图解析器等。
3. 映射请求到DispatcherServlet

@Override
protected String[] getServletMappings() {
logger.info(“Mapping all requests to DispatcherServlet.”);
return new String[]{“/”};
}
作用:定义了哪个URL模式应该由DispatcherServlet处理。这里的"/"表示拦截所有非静态资源的请求。
意义:确保所有进入应用的HTTP请求都会经过Spring MVC框架进行处理。
4. 配置过滤器

@Override
protected Filter[] getServletFilters() {
return new Filter[]{new CharacterEncodingFilter(“UTF-8”, true)};
}
作用:可以在这里添加自定义的或内置的过滤器。这段代码添加了一个字符编码过滤器,用于确保所有传入的请求都使用UTF-8编码。
意义:有助于防止乱码问题,特别是在处理国际化内容时。
日志记录
注意到在每个方法内部都有日志记录语句,使用的是SLF4J的日志接口。通过这种方式,开发者可以在应用启动过程中跟踪重要的配置信息,这对于调试和维护非常有帮助。

总结
EpidemicApplicationInitializer 类提供了一种现代化的方式来进行Spring Web应用程序的初始化和配置,完全摒弃了web.xml文件,转而采用全Java配置。这样做有几个优点:

类型安全:避免了XML配置中的字符串错误。
灵活性:更容易重构和修改配置。
简化部署:减少了对额外配置文件的依赖。
一致性:将所有的配置集中在一个地方,便于管理和理解。

2.用springconfig配置类代替springconfig.xml配置文件

package com.pyb.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.sql.DataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * Spring相关配置(替换掉了spring-bean.xml和spring-tx.xml)
 */
@Configuration
@ComponentScan(basePackages = "com.pyb") // 如果需要扫描所有组件,可以不加过滤器
@EnableTransactionManagement // 启用事务管理器
public class SpringConfig {

    private static final Logger logger = LoggerFactory.getLogger(SpringConfig.class);

    @Bean
    public PlatformTransactionManager transactionManager(DataSource dataSource) {
        logger.info("Initializing DataSourceTransactionManager with data source: {}", dataSource);
        try {
            DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();
            transactionManager.setDataSource(dataSource);
            return transactionManager;
        } catch (Exception e) {
            logger.error("Failed to initialize DataSourceTransactionManager", e);
            throw new RuntimeException("Failed to initialize DataSourceTransactionManager", e);
        }
    }

    /**
     * 数据源配置(根据实际情况调整)
     */
    @Bean
    public DataSource dataSource() {

        org.springframework.jdbc.datasource.DriverManagerDataSource dataSource = new org.springframework.jdbc.datasource.DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/studymysql");
        dataSource.setUsername("root");
        dataSource.setPassword("123456");
        return dataSource;
    }
}
  1. 组件扫描和配置类
    @Configuration
    @ComponentScan(basePackages = “com.pyb”) // 如果需要扫描所有组件,可以不加过滤器
    替代:在spring-bean.xml中使用context:component-scan标签来自动检测并注册带有特定注解(如@Component, @Service, @Repository, @Controller)的bean。
    作用:自动扫描指定包及其子包中的组件,并将它们注册为Spring容器中的bean。
  2. 启用事务管理
    Java
    深色版本
    @EnableTransactionManagement // 启用事务管理器
    替代:在spring-tx.xml中使用tx:annotation-driven/标签来启用基于注解的事务管理。
    作用:允许使用@Transactional注解来标记服务层的方法或类,从而实现声明式事务管理。
  3. 数据源配置

@Bean
public DataSource dataSource() {
org.springframework.jdbc.datasource.DriverManagerDataSource dataSource = new org.springframework.jdbc.datasource.DriverManagerDataSource();
dataSource.setDriverClassName(“com.mysql.cj.jdbc.Driver”);
dataSource.setUrl(“jdbc:mysql://localhost:3306/studymysql”);
dataSource.setUsername(“root”);
dataSource.setPassword(“123456”);
return dataSource;
}
替代:在spring-bean.xml中定义元素来创建DataSource bean。
作用:提供一个JDBC数据源,用于数据库连接池管理,使应用程序能够与数据库交互。
4. 事务管理器配置
@Bean
public PlatformTransactionManager transactionManager(DataSource dataSource) {
logger.info(“Initializing DataSourceTransactionManager with data source: {}”, dataSource);
try {
DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();
transactionManager.setDataSource(dataSource);
return transactionManager;
} catch (Exception e) {
logger.error(“Failed to initialize DataSourceTransactionManager”, e);
throw new RuntimeException(“Failed to initialize DataSourceTransactionManager”, e);
}
}
替代:在spring-tx.xml中定义元素来创建PlatformTransactionManager bean。
作用:提供一个事务管理器,用于管理和协调事务,确保多个操作要么全部成功,要么全部失败,以此维护数据的一致性。

3.用springmvc配置类替代springmvc.xml配置文件功能

package com.pyb.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.core.convert.converter.Converter;
import org.springframework.format.FormatterRegistry;
import org.springframework.web.servlet.config.annotation.*;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.JstlView;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * Spring MVC相关配置 (替换掉了springmvc.xml)
 */
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = {"com.pyb.controller","com.pyb.config"},
        includeFilters = @ComponentScan.Filter(type= FilterType.ANNOTATION, classes = org.springframework.stereotype.Controller.class))
public class SpringMVCConfig implements WebMvcConfigurer {

    /**
     * 添加视图控制器,如果没有指定,就默认访问这个界面
     * @param registry
     */
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("epidemic"); // 访问的是epidemic.jsp
    }

    /**
     * 配置视图解析器(前后缀)
     */
    @Bean
    public InternalResourceViewResolver viewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".jsp");
        resolver.setViewClass(JstlView.class);
        return resolver;
    }

    /**
     * 配置日期转换器
     * @param registry
     */
    @Override
    public void addFormatters(FormatterRegistry registry) {
        registry.addConverter(new Converter<String, Date>() {
            private final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

            @Override
            public Date convert(String source) {
                try {
                    return dateFormat.parse(source);
                } catch (ParseException e) {
                    throw new IllegalArgumentException("无法解析日期:" + source, e);
                }
            }
        });
    }
    /**
     * 如果没有匹配到action,则使用servlet默认的访问
     * @param configurer
     */
    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }
}
  1. 组件扫描
    @ComponentScan(basePackages = {“com.pyb.controller”, “com.pyb.config”},
    includeFilters = @ComponentScan.Filter(type= FilterType.ANNOTATION, classes = org.springframework.stereotype.Controller.class))
    作用:指定哪些包需要被扫描以查找带有特定注解(如@Controller)的组件。
    意义:确保所有的控制器类都能被Spring容器检测到并注册为bean。

  2. 视图控制器配置
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
    registry.addViewController(“/”).setViewName(“epidemic”); // 访问的是epidemic.jsp
    }
    作用:定义了当用户访问根路径(/)时,直接渲染名为epidemic.jsp的视图,而无需调用任何控制器方法。
    意义:简化了对默认页面或首页的访问逻辑。

  3. 视图解析器配置
    @Bean
    public InternalResourceViewResolver viewResolver() {
    InternalResourceViewResolver resolver = new InternalResourceViewResolver();
    resolver.setPrefix(“/WEB-INF/views/”);
    resolver.setSuffix(“.jsp”);
    resolver.setViewClass(JstlView.class);
    return resolver;
    }
    作用:设置了视图解析器,指定了JSP视图的前缀和后缀,以及使用的视图类(JstlView),以便于正确地定位和渲染视图。
    意义:确保所有返回的视图名称能够被正确解析成实际的视图文件路径。

  4. 格式化器和转换器注册
    @Override
    public void addFormatters(FormatterRegistry registry) {
    registry.addConverter(new Converter<String, Date>() {
    private final SimpleDateFormat dateFormat = new SimpleDateFormat(“yyyy-MM-dd”);

    @Override
    

    public Date convert(String source) {
    try {
    return dateFormat.parse(source);
    } catch (ParseException e) {
    throw new IllegalArgumentException(“无法解析日期:” + source, e);
    }
    }
    });
    }
    作用:向Spring MVC的格式化器注册表中添加自定义的字符串到日期的转换器。
    意义:允许在数据绑定过程中自动将符合特定格式的字符串转换为Date对象,提高了数据处理的便利性。

  5. 默认Servlet处理
    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
    configurer.enable();
    }
    作用:启用默认的Servlet处理程序,这意呀着如果Spring MVC找不到匹配的处理器映射,则会将请求转发给容器的默认Servlet来处理。
    意义:确保静态资源(如CSS、JavaScript文件)可以被正确服务,同时避免未匹配的请求导致404错误。

4.最后删除web.xml文件,可以测试得出,启动tomcat,web项目依旧可以运行

5.所需依赖

  <dependencies>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.33</version>
    </dependency>
    <!-- Spring Web -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>6.1.14</version> <!-- 请根据实际情况调整版本号 -->
    </dependency>
    <!-- Spring JDBC Support -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>6.0.9</version> <!-- 请根据实际情况调整版本号 -->
    </dependency>
    <!-- Spring Transaction Management -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>6.0.9</version> <!-- 请根据实际情况调整版本号 -->
    </dependency>
    <!-- Thymeleaf Template Engine -->
    <dependency>
      <groupId>org.thymeleaf</groupId>
      <artifactId>thymeleaf-spring6</artifactId>
      <version>3.1.2.RELEASE</version> <!-- 请根据实际情况调整版本号 -->
    </dependency>
    <dependency>
      <groupId>jakarta.servlet.jsp.jstl</groupId>
      <artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
      <version>3.0.0</version>
    </dependency>
    <dependency>
      <groupId>org.glassfish.web</groupId>
      <artifactId>jakarta.servlet.jsp.jstl</artifactId>
      <version>3.0.0</version>
    </dependency>
    <!-- Apache Commons FileUpload for file upload support -->
    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.5</version>
    </dependency>
    <!-- Servlet API (if not provided by your container) -->
    <dependency>
      <groupId>jakarta.servlet</groupId>
      <artifactId>jakarta.servlet-api</artifactId>
      <version>6.0.0</version> <!-- 请根据实际情况调整版本号 -->
      <scope>provided</scope> <!-- 通常由Servlet容器提供,所以设置为provided -->
    </dependency>
    <!-- For logging -->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>2.0.7</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-simple</artifactId>
      <version>2.0.7</version>
    </dependency>
    <!-- Optional: If using Java 8 or above, consider using commons-io as well -->
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.14.0</version>
    </dependency>
  </dependencies>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【网络篇】IP知识

IPv4首部与IPv6首部 IPv4相对于IPv6的好处&#xff1a; 1.IPv6可自动配置&#xff0c;即使没有DHCP服务器也可以实现自动分配IP地址&#xff0c;实现即插即用。 2.IPv6包首部长度采用固定40字节&#xff0c;删除了选项字段&#xff0c;以及首部校验和&#xff0c;简化了首部…

MyBatis核心流程

目录 数据处理的发展 MyBatis概述 ​编辑 MyBatis核心流程 观察测试类 重要对象和流程 SqlSessionFactory [初始化] 创建SqlSession会话对象 创建XxxMapper[代理]对象 执行SQL操作 [复杂一丢丢] ​编辑 数据处理的发展 1.原生JDBC 2. DBUtils工具类 [jdbctemp..] 3. …

低代码独特架构带来的编译难点及多线程解决方案

前言 在当今软件开发领域&#xff0c;低代码平台以其快速构建应用的能力&#xff0c;吸引了众多开发者与企业的目光。然而&#xff0c;低代码平台独特的架构在带来便捷的同时&#xff0c;也给编译过程带来了一系列棘手的难点。 一&#xff0c;低代码编译的难点 &#xff08;1…

Spring Security单点登录

本文介绍了Spring Security单点登录的概念和基本原理。单点登录是指用户只需登录一次&#xff0c;即可在多个相互信任的系统中实现无缝访问和授权。通过Spring Security框架的支持&#xff0c;可以实现有效的用户管理和权限控制。最后&#xff0c;本文提供了实际应用案例&#…

查找某个年龄段的用户信息TCP头格式为什么需要 TCP 协议? TCP 工作在哪一层?

查找某个年龄段的用户信息 select device_id,gender,age from user_profile where age>20 and age<23; TCP头格式 序列号&#xff1a;在建立连接时由计算机生成的随机数作为其初始值&#xff0c;通过 SYN 包传给接收端主机&#xff0c;每发送一次数据&#xff0c;就「累…

后端技术选型 sa-token校验学习 下 结合项目学习 后端鉴权

目录 后端注册拦截器 实现对 WebMvcConfigurer 接口的类实现 静态变量 方法重写 注册 Spring Framework拦截器 Sa-Token中SaServletFilter拦截器 思考 为什么使用两个拦截器 1. Spring Framework 拦截器 2. SaServletFilter 为什么要注册两个拦截器&#xff1f; 总结 …

使用 Charles 调试 Flutter 应用中的 Dio 网络请求

为了成功使用 Charles 抓取并调试 Flutter 应用程序通过 Dio 发起的网络请求&#xff0c;需遵循特定配置步骤来确保应用程序能够识别 Charles 的 SSL 证书&#xff0c;并正确设置代理服务器。 配置 Charles 以支持 HTTPS 请求捕获 Charles 默认会拦截 HTTP 流量&#xff1b;…

亿道三防丨三防笔记本是什么意思?和普通笔记本的优势在哪里?

三防笔记本是什么意思&#xff1f;和普通笔记本的优势在哪里&#xff1f; 在现代社会中&#xff0c;笔记本电脑已经成为人们工作和生活中不可或缺的一部分。然而&#xff0c;在一些特殊行业或环境中&#xff0c;普通笔记本电脑由于其脆弱性和对环境条件的敏感性&#xff0c;往…

Spring Boot教程之五十七:在 Apache Kafka 上发布 JSON 消息

Spring Boot | 如何在 Apache Kafka 上发布 JSON 消息 Apache Kafka是一个发布-订阅消息系统。消息队列允许您在进程、应用程序和服务器之间发送消息。在本文中&#xff0c;我们将了解如何在 Spring Boot 应用程序中向 Apache Kafka 发送 JSON 消息。 为了了解如何创建 Spring…

解决“无法定位程序输入点 av_buffer_create 于动态链接库 XXX\Obsidian.exe 上”问题

解决“无法定位程序输入点 av_buffer_create 于动态链接库 XXX\Obsidian.exe 上”问题 问题描述 本人在使用zotero中的zotero one&#xff08;青柠学术插件&#xff09;的时候&#xff0c;使用插件跳转obsidian中的对应笔记&#xff0c;出现上图情况。&#xff08;错误中提到的…

切削刀具热处理的作用学习笔记分享

对于一个搞冷加工的打工仔来说&#xff0c;热工的知识总是感觉那么新鲜。本期一起来学习一下切削刀具的热处理的一点点内容&#xff0c;虽然不是那么专业&#xff0c;但是了解一些还是很有好处的&#xff0c;废话不多说了&#xff0c;直接开始&#xff1a; 切削刀具热处理的作…

基于Web的宠物医院看诊系统设计与实现(源码+定制+开发)在线预约平台、宠物病历管理、医生诊疗记录、宠物健康数据分析 宠物就诊预约、病历管理与健康分析

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

WPS excel使用宏编辑器合并 Sheet工作表

使用excel自带的工具合并Sheet表&#xff0c;我们会发现需要开通WPS会员才能使用合并功能&#xff1b; 那么WPS excel如何使用宏编辑器进行合并 Sheet表呢&#xff1f; 1、首先我们要看excel后缀是 .xlsx 还是 .xls &#xff1b;如果是.xlsx 那么 我们需要修改为 .xls 注…

ubuntu22.4 ROS2 安装gazebo(环境变量配置)

ubuntu版本&#xff1a;ubuntu22.4 最近在学习ROS2 视频教程古月居的入门课&#xff1a; 视频教程 文字笔记 问题 在学到关于Gazebo的时候&#xff0c;遇到下面问题&#xff1a; 运行 $ ros2 launch gazebo_ros gazebo.launch.py在这里卡住&#xff0c;不弹出gazebo 解决…

【Linux】7.Linux基础开发工具使用(1)

文章目录 1. Linux 软件包管理器 yum1.1 什么是软件包1.2 关于 rzsz1.3 查看软件包1.4 如何安装软件1.5 如何卸载软件我怎么知道要安装什么软件呢&#xff1f;源常用命令对照表&#xff1a; 2. Linux开发工具Linux编辑器-vim使用2.1 vim的基本概念命令模式&#xff1a;2.2 简单…

漫话架构师|什么是系统架构设计师(开篇)

~犬&#x1f4f0;余~ “我欲贱而贵&#xff0c;愚而智&#xff0c;贫而富&#xff0c;可乎&#xff1f; 曰&#xff1a;其唯学乎” 关注犬余&#xff0c;共同进步 技术从此不孤单

DevOps实用场景:在哪些业务中应用DevOps最有效

随着科技的迅猛发展和客户需求的不断变化&#xff0c;IT初创公司在不断追求更高的效率、更快速的交付和更强的市场适应力。在这个背景下&#xff0c;DevOps成为了推动组织成功的关键策略之一。本文将帮助您了解什么是DevOps&#xff0c;哪些团队或企业最适合实施DevOps&#xf…

如何学习网络安全?有哪些小窍门?

学好网络安全其实没有所谓的捷径&#xff0c;也没有什么小窍门。 入门网络安全首先要有浓厚的学习兴趣&#xff0c;不然很容易就变成了从入门到放弃了。 其次要能静下心&#xff0c;踏踏实实的打好基础。如果你是零基础&#xff0c;建议从Web安全入手&#xff0c;课程难度相对…

Windows下载MySQL8.0

Windows下载MySQL8.0 MySQL :: Download MySQL Installer (Archived Versions) 在这个网页中选择相应的版本&#xff0c;点击下载即可。 但是在下载之前需要保证&#xff1a; 电脑用户名是英文相应的防火墙要关闭以前的mysql要在系统中卸载干净在控制命令里&#xff0c;以管…

使用Java Socket实现GPS定位数据处理

在许多应用场景中&#xff0c;如车辆追踪、移动设备定位等&#xff0c;GPS定位数据的实时获取和处理至关重要。本文将介绍如何使用Java Socket编程来接收GPS设备发送的数据并进行处理。 业务说明&#xff1a; 车辆追踪系统需要实时获取车辆的GPS定位信息。车辆上的GPS设备通过…