SpringMVC的工作流程及入门

news2024/11/20 18:36:35

目录

一、概述

( 1 )  是什么

( 2 )  作用

二、工作流程

( 1 )  流程

( 2 )  步骤

三、入门实例

( 1 )  入门实例 

( 2 )  静态资源处理

给我们带来的收获


一、概述

( 1 )  是什么

SpringMVC是一个基于Java的Web应用开发框架,它是Spring Framework的一部分。它提供了一种模型(Model)-视图(View)-控制器(Controller)(MVC)的架构模式,用于构建灵活、可扩展的Web应用程序。SpringMVC通过将应用程序分解为模型(数据)、视图(用户界面)和控制器(处理请求和响应)三个组件,实现了松耦合和高度可测试的开发方式。它还提供了许多功能,如请求映射、数据绑定、表单处理、验证、国际化等,以简化Web开发过程。SpringMVC还支持各种视图技术,如JSP、Thymeleaf、Freemarker等,使开发人员能够选择适合自己的视图模板。总的来说,SpringMVC是一个强大而灵活的框架,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合,广泛用于构建Java Web应用程序。

( 2 )  作用

SpringMVC具有以下几个主要作用:

  • 1. 分离关注点:SpringMVC通过将应用程序分解为模型、视图和控制器三个组件,实现了关注点的分离。模型负责处理数据,视图负责展示用户界面,控制器负责处理请求和响应。这种分离使得开发人员可以专注于各自的领域,提高了代码的可读性和可维护性。
  • 2. 灵活可扩展:SpringMVC采用了松耦合的设计,使得开发人员可以根据需求选择合适的组件和技术进行开发。它支持各种视图技术,如JSP、Thymeleaf、Freemarker等,使开发人员能够选择适合自己的视图模板。同时,SpringMVC还提供了丰富的功能和特性,如拦截器、数据绑定、表单处理、验证、异常处理等,以满足不同场景下的需求。
  • 3. 易于测试:由于SpringMVC采用了MVC架构模式,使得应用程序的各个组件可以独立测试。开发人员可以针对模型、视图和控制器编写单元测试,验证其功能和逻辑的正确性。这种可测试性有助于提高代码质量和开发效率。
  • 4. 提高开发效率:SpringMVC提供了一套简洁而强大的API和工具,使开发人员能够快速构建Web应用程序。它通过注解和约定大于配置的方式,简化了开发过程,减少了样板代码的编写。同时,SpringMVC还提供了丰富的文档和社区支持,使开发人员能够快速解决问题和获取帮助。

总的来说,SpringMVC作为一个Web应用开发框架,具有分离关注点、灵活可扩展、易于测试和提高开发效率等作用。它帮助开发人员构建高效、易于维护的Web应用程序,并提供了丰富的功能和特性,以满足不同场景下的需求。

二、工作流程

( 1 )  流程

当客户端发送请求到SpringMVC应用程序时,请求将由前端控制器(Front Controller)DispatcherServlet接收。DispatcherServlet是SpringMVC的核心组件,负责协调和管理请求的处理流程。

DispatcherServlet根据请求的URL找到对应的处理器(Handler),Handler是一个带有注解的方法或类,用于处理请求并生成响应。处理器可以根据请求的特征,如URL路径、请求方法、请求参数等进行匹配。

在执行处理器之前,SpringMVC通过处理器适配器(HandlerAdapter)对处理器进行封装和适配,使其符合统一的处理器接口(HandlerInterface)。这样就可以支持不同类型的处理器,如注解控制器(Annotation Controller)、Controller接口实现类、REST控制器等。

处理器执行过程中可以通过模型(Model)对象传递数据,模型是一个数据容器,用于保存处理结果并传递给视图(View)。处理器还可以返回一个逻辑视图名,告诉DispatcherServlet选择哪个视图来渲染响应。

DispatcherServlet根据逻辑视图名选择合适的视图解析器(ViewResolver)来解析视图,并生成最终的响应。视图解析器负责将逻辑视图名解析为具体的视图,如JSP、Thymeleaf模板等。视图负责生成最终的HTML、XML、JSON等响应内容。

最后,DispatcherServlet将响应发送给客户端进行展示。整个请求-响应过程通过中央调度器DispatcherServlet进行协调和控制,使开发者能够集中精力在业务逻辑的处理上,提高开发效率。

SpringMVC还提供了许多功能和特性,如拦截器(Interceptor)用于对请求进行预处理和后处理、数据绑定和类型转换、表单验证、异常处理、RESTful支持等,以满足不同场景下的需求。

总结而言,SpringMVC是一个基于Java的Web应用开发框架,通过MVC架构模式实现了灵活、可扩展的Web应用程序开发。它提供了一套全面的特性和组件,使开发人员能够快速构建高效、易于维护的Web应用程序。

( 2 )  步骤

当客户端发送请求到SpringMVC应用程序时,请求会经过以下详细的流程:

  • 1. 客户端发送请求:客户端通过浏览器发送HTTP请求,其中包含请求的URL、请求方法、请求头、请求参数等信息。
  • 2. 前端控制器接收请求:请求到达应用程序后,被前端控制器DispatcherServlet接收。DispatcherServlet是一个Servlet,是整个SpringMVC应用的入口点。
  • 3. 处理器映射器进行处理器匹配:DispatcherServlet通过处理器映射器(HandlerMapping)来确定请求对应的处理器(Handler)。处理器映射器根据配置的URL映射规则,将请求URL映射到相应的处理器。
  • 4. 处理器适配器处理处理器:处理器适配器(HandlerAdapter)根据处理器的类型调用相应的处理方法。处理器可以是注解控制器(如@Controller、@RequestMapping)、实现了Controller接口的类、RESTful控制器等。
  • 5. 处理器执行:处理器执行具体的业务逻辑,处理请求并生成一个Model(模型)对象。Model对象可以携带处理结果和数据,供视图渲染使用。
  • 6. 处理器拦截器的调用:在处理器执行前后,可以定义拦截器对请求进行拦截和处理。拦截器可以在请求前进行预处理,也可以在请求后进行后处理。拦截器的执行顺序可以通过配置进行控制。
  • 7. 处理器返回视图名或视图对象:处理器执行完毕后,会返回一个逻辑视图名或直接返回一个具体的视图对象。逻辑视图名是一个表示视图的逻辑名称,视图对象则代表具体的视图实现。
  • 8. 视图解析器进行视图解析:DispatcherServlet通过视图解析器(ViewResolver)将逻辑视图名解析为具体的视图实现。视图解析器根据配置的规则来查找对应的视图,如JSP、Thymeleaf等。
  • 9. 视图渲染:视图负责生成最终的响应内容,根据模型数据渲染视图模板,并生成最终的HTML、XML、JSON等响应。
  • 10. 视图返回响应:渲染完成后,视图将生成的响应返回给前端控制器DispatcherServlet。
  • 11. 处理器拦截器的后处理:在视图返回响应后,可以继续执行拦截器的后处理逻辑。拦截器可以对响应进行进一步的处理,如日志记录、跳转等。
  • 12. 响应发送给客户端:DispatcherServlet将响应发送给客户端,客户端根据响应类型进行展示,如在浏览器中渲染HTML页面或解析JSON数据。

整个SpringMVC的工作流程是一个基于Servlet的请求-响应模型,通过前端控制器、处理器映射器、处理器适配器、视图解析器和视图等组件的协作,实现了灵活、可扩展并且易于开发的Web应用框架。DispatcherServlet充当了中央调度器的角色,协调和控制请求的处理流程。通过这种流程,SpringMVC实现了松耦合、可扩展和易于测试的Web应用开发。

三、入门实例

这里是根据我博客中的文章进行了一个扩展增加代码 : 认识Mybatis的关联关系映射

( 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">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.example</groupId>
  <artifactId>index</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>index Maven Webapp</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <maven.compiler.plugin.version>3.7.0</maven.compiler.plugin.version>

    <!--添加jar包依赖-->
    <!--1.spring 5.0.2.RELEASE相关-->
    <spring.version>5.0.2.RELEASE</spring.version>
    <!--2.mybatis相关-->
    <mybatis.version>3.4.5</mybatis.version>
    <!--mysql-->
    <mysql.version>5.1.44</mysql.version>
    <!--pagehelper分页jar依赖-->
    <pagehelper.version>5.1.2</pagehelper.version>
    <!--mybatis与spring集成jar依赖-->
    <mybatis.spring.version>1.3.1</mybatis.spring.version>
    <!--3.dbcp2连接池相关 druid-->
    <commons.dbcp2.version>2.1.1</commons.dbcp2.version>
    <commons.pool2.version>2.4.3</commons.pool2.version>
    <!--4.log日志相关-->
    <log4j2.version>2.9.1</log4j2.version>
    <!--5.其他-->
    <junit.version>4.12</junit.version>
    <servlet.version>4.0.0</servlet.version>
    <lombok.version>1.18.2</lombok.version>
    <!-- jstl+standard -->
    <jstl.version>1.2</jstl.version>
    <standard.version>1.1.2</standard.version>
    <!-- spring -->
    <spring.version>5.0.2.RELEASE</spring.version>

  </properties>


  <dependencies>
    <!--1.spring相关-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-orm</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aspects</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <!--2.mybatis相关-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>${mybatis.version}</version>
    </dependency>
    <!--mysql-->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>${mysql.version}</version>
    </dependency>
    <!--pagehelper分页插件jar包依赖-->
    <dependency>
      <groupId>com.github.pagehelper</groupId>
      <artifactId>pagehelper</artifactId>
      <version>${pagehelper.version}</version>
    </dependency>
    <!--mybatis与spring集成jar包依赖-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>${mybatis.spring.version}</version>
    </dependency>

    <!--3.dbcp2连接池相关-->
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-dbcp2</artifactId>
      <version>${commons.dbcp2.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-pool2</artifactId>
      <version>${commons.pool2.version}</version>
    </dependency>

    <!--4.log日志相关依赖-->
    <!--核心log4j2jar包-->
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-core</artifactId>
      <version>${log4j2.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-api</artifactId>
      <version>${log4j2.version}</version>
    </dependency>
    <!--web工程需要包含log4j-web,非web工程不需要-->
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-web</artifactId>
      <version>${log4j2.version}</version>
    </dependency>

    <!--5.其他-->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>${junit.version}</version>
      <!--            <scope>test</scope>-->
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>${servlet.version}</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>${lombok.version}</version>
      <scope>provided</scope>
    </dependency>

    <!-- spring mvc相关依赖 -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>jstl</groupId>
      <artifactId>jstl</artifactId>
      <version>${jstl.version}</version>
    </dependency>
    <dependency>
      <groupId>taglibs</groupId>
      <artifactId>standard</artifactId>
      <version>${standard.version}</version>
    </dependency>

  </dependencies>

  <build>
    <finalName>index</finalName>

    <resources>
      <!--解决mybatis-generator-maven-plugin运行时没有将XxxMapper.xml文件放入target文件夹的问题-->
      <resource>
        <directory>src/main/java</directory>
        <includes>
          <include>**/*.xml</include>
        </includes>
      </resource>
      <!--解决mybatis-generator-maven-plugin运行时没有将jdbc.properites文件放入target文件夹的问题-->
      <resource>
        <directory>src/main/resources</directory>
        <includes>
          <include>jdbc.properties</include>
          <include>*.xml</include>
        </includes>
      </resource>
    </resources>

      <plugins>

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>${maven.compiler.plugin.version}</version>
          <configuration>
            <source>${maven.compiler.source}</source>
            <target>${maven.compiler.target}</target>
            <encoding>${project.build.sourceEncoding}</encoding>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.mybatis.generator</groupId>
          <artifactId>mybatis-generator-maven-plugin</artifactId>
          <version>1.3.2</version>
          <dependencies>
            <!--使用Mybatis-generator插件不能使用太高版本的mysql驱动 -->
            <dependency>
              <groupId>mysql</groupId>
              <artifactId>mysql-connector-java</artifactId>
              <version>${mysql.version}</version>
            </dependency>
          </dependencies>
          <configuration>
            <overwrite>true</overwrite>
          </configuration>
        </plugin>


        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
      </plugins>
  </build>
</project>

缺少jstl+standard的这两个jar包会报java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/Config,那是因为org.springframework.web.servlet.view.JstlView在视图解析时需要这二个jar包。

创建 spring-mvc.xml,这里又在spring-mvc.xml中配置了一次全局扫描,导致多次扫描装配问题。(防止重复扫描装配

<?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"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
      http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <!--1) 扫描com.CloudJun及子子孙孙包下的控制器(扫描范围过大,耗时)-->
    <context:component-scan base-package="com.CloudJun"/>

    <!--2) 此标签默认注册DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter -->
    <mvc:annotation-driven />

    <!--3) 创建ViewResolver视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- viewClass需要在pom中引入两个包:standard.jar and jstl.jar -->
        <property name="viewClass"
                  value="org.springframework.web.servlet.view.JstlView"></property>
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

    <!--4) 单独处理图片、样式、js等资源 -->
    <!-- <mvc:resources location="/css/" mapping="/css/**"/>
     <mvc:resources location="/js/" mapping="/js/**"/>
     <mvc:resources location="WEB-INF/images/" mapping="/images/**"/>-->

    <!--   处理static包里的所有静态资源 -->
    <mvc:resources location="/static/" mapping="/static/**"/>

</beans>
配置web.xml

配置步骤:

  1. 配置Spring与Web项目集成

  2. 配置中文乱码过滤器

  3. 配置SpringMVC核心控制器DispatcherServlet

<?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_3_1.xsd"
         version="3.1">
  <display-name>Archetype Created Web Application</display-name>
  <!-- Spring和web项目集成start -->
  <!-- spring上下文配置文件 -->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring-context.xml</param-value>
  </context-param>
  <!-- 读取Spring上下文的监听器 -->
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <!-- Spring和web项目集成end -->

  <!-- 中文乱码处理 -->
  <filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <async-supported>true</async-supported>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

  <!-- Spring MVC servlet -->
  <servlet>
    <servlet-name>SpringMVC</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!--此参数可以不配置,默认值为:/WEB-INF/springmvc-servlet.xml-->
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:spring-mvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
    <!--web.xml 3.0的新特性,是否支持异步-->
    <async-supported>true</async-supported>
  </servlet>
  <servlet-mapping>
    <servlet-name>SpringMVC</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

创建一个 IndexController 

package com.CloudJun.web;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * @author CloudJun
 * @create  2023-09-04 16:19
 */
@Controller
@RequestMapping("/Cloud")
public class IndexController {

    @RequestMapping("/Jun")
    public String primary(){
        System.out.println("SpringMVC 使用。。。。。");
        return "hello";
    }
}

之后我们开启服务器,在浏览器中发送这个请求测试 :  http://localhost:8080/index/Cloud/Jun

                                     ( 根据自己的配置进行请求访问才可以 )

测试结果 : 

( 2 )  静态资源处理

首先先将随便一个静态资源放进项目的静态资源包中

这里我们以以下图片为例

然后在 spring-mvc.xml 配置文件中增加以下代码 

     <!--   处理static包里的所有静态资源 -->
    <mvc:resources location="/static/" mapping="/static/**"/>

        ( 这里是会处理所有的静态资源,也就是处理static包里的所有静态资源 )

开启服务器,在浏览器中发送这个请求测试,请求根据所在的资源目录结构来输入。

如我的图片资源目录结构如图 : 

所有我需要发送的请求为 : http://localhost:8080/index/static/images/preview.jpg

测试结果如图

给我们带来的收获

学习了SpringMVC的工作流程和静态资源处理,我们可以获得以下收获:

  • 1. 理解了SpringMVC的整体工作流程:学习了请求的流程,包括DispatcherServlet的作用、HandlerMapping的匹配过程、HandlerAdapter的处理过程以及ViewResolver的视图解析过程等。这使我们能够更好地理解SpringMVC框架的工作原理,从而更好地进行开发和调试。
  • 2. 掌握了静态资源处理的方法:学习了如何配置SpringMVC来处理静态资源,包括图片、样式表、脚本等。这使我们可以将静态资源与动态内容分离,提高网站的性能和可维护性。
  • 3. 学会了如何配置静态资源的映射:学习了如何配置SpringMVC来映射静态资源的URL路径,以及如何配置静态资源的存放位置。这使我们可以自定义静态资源的URL路径,更好地组织和管理静态资源。
  • 4. 了解了静态资源的缓存机制:学习了如何配置SpringMVC来启用静态资源的缓存,以减少网络请求和提高网站的加载速度。这使我们可以更好地优化网站的性能,提升用户体验。

总之,学习了SpringMVC的工作流程和静态资源处理,我们可以更好地理解和使用SpringMVC框架,提高开发效率和网站性能。

 

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

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

相关文章

算法专栏——双指针

1.移动零 题目链接&#xff1a;移动 0_牛客题霸_牛客网 (nowcoder.com) 算法原理&#xff1a; 像这样子的将一整块数组划分很多部分可以称为数组划分&#xff0c;常用的解法可以是双指针。 说是双指针&#xff0c;但操作的对象是数组&#xff0c;因此下标就是指针。 双指针的…

第10章_索引优化与查询优化(覆盖索引, 索引下推等)

4. 子查询优化 MySQL 从 4.1 版本开始支持子查询&#xff0c;使用子查询可以进行 SELECT 语句的嵌套查询&#xff0c;即一个 SELECT 查询的结果作为另一个SELECT 语句的条件。 子查询可以一次性完成很多逻辑上需要多个步骤才能完成的 SQL 操作 。 子查询是 MySQL 的一项重…

第 361 场周赛 (AC 1,第二题过了但是考试结束了)

7020.统计对称整数的数目 思路一&#xff1a;指定区间统计对称整数 1.遍历区间2.判断该数对不对称 对称逻辑&#xff1a;首尾同时开始遍历&#xff0c;并且同时累加为两个数&#xff0c;最后判断两个数是否相等 class Solution { public:bool judge(int num){if(num<10) …

AUTOSAR PN介绍

为了在总线通信激活情况下实现节能目的,AUTOSAR提出了PN(Partial Networking)。 PN主要作用 允许跨网络关闭多个ECU的通信,而其他ECU继续保持通信使用NM消息在参与的ECU之间传递PNC(Partial Network Cluster)的请求/释放信息。PN的好处 使用PN的最大好处是可以使当前功能…

算法通关村第11关【白银】| 位运算高频算法题

一、移位的妙用 1.位1的个数 思路&#xff1a; 利用一个数和1与操作&#xff0c;结果就是最低位的特点&#xff0c;每次右移都能知道一位是不是1 public class Solution {// you need to treat n as an unsigned valuepublic int hammingWeight(int n) {int count 0;for(in…

密码学入门——环游密码世界

文章目录 参考书目一、基本概念1.1 本书主要角色1.2 加密与解密 二、对称密码与公钥密码2.1 密钥2.2 对称密码和公钥密码2.3 混合密码技术 三、其他密码技术 参考书目 图解密码技术 第三版 一、基本概念 1.1 本书主要角色 1.2 加密与解密 加密 解密 密码破译 二、对称密…

grid网格布局的使用?

一、定义 CSS 网格是一个用于 web 的二维布局系统。利用网格&#xff0c;你可以把内容按照行与列的格式进行排版。另外&#xff0c;网格还能非常轻松地实现一些复杂的布局。 网格是由一系列水平及垂直的线构成的一种布局模式。根据网格&#xff0c;我们能够将设计元素进行排列…

Ubuntu系统下使用宝塔面板实现一键搭建Z-Blog个人博客的方法和流程

文章目录 1.前言2.网站搭建2.1. 网页下载和安装2.2.网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar临时数据隧道3.2.Cpolar稳定隧道&#xff08;云端设置&#xff09;3.3.Cpolar稳定隧道&#xff08;本地设置&#xff09; 4.公网访问测试5.结语 1.前言 Ubuntu系统作…

单向链表和双向链表的增删改查以及排序问题

文章目录 单向链表双向链表运行结果完整代码 本文介绍链表的增删改查以及排序问题&#xff0c;其中最重要的还是指针的使用&#xff01; 单向链表 定义一个单向链表&#xff0c;里面包含一个整型数据和一个指向后向的指针。 typedef struct linklist{int data;struct linkli…

InnoDB 的默认隔离级别是什么?

分析&回答 大部分数据库系统&#xff08;如Oracle&#xff09;都将都将读提交&#xff08;Read-Commited&#xff09;作为默认隔离级别&#xff0c;而MySQL却选择可重复读&#xff08;Repeatable-Read&#xff09;作为其默认隔离级别。 如果没有隔离级别基础知识的话先看…

数学建模之插值法

目录 1 插值法概述2 插值法原理3 拉格朗日插值4 牛顿插值5 三次Hermite插值&#xff08;重点&#xff09;6 三次样条插值&#xff08;重点&#xff09;7 各种插值法总结8 n 维数据的插值9 插值法拓展10 课后作业 1 插值法概述 数模比赛中&#xff0c;常常需要根据已知的函数点进…

【Unity3D赛车游戏优化篇】新【八】汽车实现镜头的流畅跟随,以及不同角度的切换

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…

YOLOV8实例分割——详细记录环境配置、自定义数据处理到模型训练与部署

前言 Ultralytics YOLOv8是一种前沿的、最先进的&#xff08;SOTA&#xff09;模型&#xff0c;它在前代YOLO版本的成功基础上进行了进一步的创新&#xff0c;引入了全新的特性和改进&#xff0c;以进一步提升性能和灵活性。作为一个高速、精准且易于操作的设计&#xff0c;YO…

合宙Air724UG LuatOS-Air LVGL API控件-标签 (Label)

标签 (Label) 标签是 LVGL 用来显示文字的控件。 示例代码 label lvgl.label_create(lvgl.scr_act(), nil) lvgl.label_set_recolor(label, true) lvgl.label_set_text(label, "#0000ff Re-color# #ff00ff words# #ff0000 of\n# align the lines …

Vision Transformer(VIT 网络架构)

论文下载链接&#xff1a;https://arxiv.org/abs/2010.11929 文章目录 引言1. VIT与传统CNN的比较2. 为什么需要Transformer在图像任务中&#xff1f; 1. 深入Transformer1.1 Transformer的起源&#xff1a;NLP领域的突破1.2 Transformer的基本组成1.2.1 自注意机制 (Self-Atte…

C++将派生类赋值给基类

在 C/C++ 中经常会发生数据类型的转换,例如将 int 类型的数据赋值给 float 类型的变量时,编译器会先把 int 类型的数据转换为 float 类型再赋值;反过来,float 类型的数据在经过类型转换后也可以赋值给 int 类型的变量。 数据类型转换的前提是,编译器知道如何对数据进行取舍…

星际争霸之小霸王之小蜜蜂(十)--鼠道

系列文章目录 星际争霸之小霸王之小蜜蜂&#xff08;九&#xff09;--狂鼠之灾 星际争霸之小霸王之小蜜蜂&#xff08;八&#xff09;--蓝皮鼠和大脸猫 星际争霸之小霸王之小蜜蜂&#xff08;七&#xff09;--消失的子弹 星际争霸之小霸王之小蜜蜂&#xff08;六&#xff09;-…

大数据课程K20——Spark的SparkSql概述

文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 了解Spark的SparkSQL由来; ⚪ 了解Spark的SparkSQL特点; ⚪ 了解Spark的SparkSQL优势; ⚪ 掌握Spark的SparkSQL入门; 一、SparkSQL概述 1. 概述 Spark为结构化数据处理引入了一个称…

SQLI-labs-第四关

知识点&#xff1a;get双引号(")和括号注入 思路&#xff1a; 1、判断注入点 首先&#xff0c;输入?id1 --&#xff0c;看看正常的回显状态 接着输入?id1 --&#xff0c;结果还是正常回显&#xff0c;说明这里不存在单引号问题 试试双引号&#xff0c;这里爆出了sql语…

深入了解GCC编译过程

关于Linux的编译过程&#xff0c;其实只需要使用gcc这个功能&#xff0c;gcc并非一个编译器&#xff0c;是一个驱动程序。其编译过程也很熟悉&#xff1a;预处理–编译–汇编–链接。在接触底层开发甚至操作系统开发时&#xff0c;我们都需要了解这么一个知识点&#xff0c;如何…