【JavaEE进阶】SpringBoot 快速上⼿

  1. 了解Maven,并配置国内源
  • 使⽤SpringBoot创建⼀个项⽬, 输出HelloWorld

一、Maven

1.什么是Maven

官⽅对于Maven的描述:

Apache Maven is a software project management and comprehension tool. Based on the
concept of a project object model (POM), Maven can manage a project's build, reporting and documentation from a central piece of information.
引⽤来⾃: https://maven.apache.org/index.html
翻译过来就是:
Maven是⼀个项⽬管理⼯具。基于POM(Project Object Model,项⽬对象模型)的概念,Maven可以通过⼀⼩段描述信息来管理项⽬的构建,报告和⽂档的项⽬管理⼯具软件。
⼤⽩话: Maven是⼀个项⽬管理⼯具, 通过pom.xml⽂件的配置获取jar包,⽽不⽤⼿动去添加jar包

2.为什么要学Maven

⼀句话: 简单, ⽅便, 提⾼我们的开发效率, 减少我们的开发Bug.
Maven提供的功能⾮常多, Maven在咱们课程中的体现主要是以下两个⽅⾯:

  1. 项⽬构建
  2. 管理依赖

3.创建⼀个Maven项⽬

IDEA本⾝已经集成了Maven, 我们可以直接使⽤, ⽆需安装
以下截图的idea版本为: 2022.1.4, 不同版本的idea界⾯展⽰会有所不同

File -> New -> Project
点击 Create, 就创建好了⼀个Maven项⽬

4. Maven 核⼼功能

接下来, 我们结合项⽬, 介绍Maven在项⽬开发中的作⽤.
主要体现在两个⽅⾯:

  1. 项⽬构建
  2. 管理依赖

(1) 项⽬构建

Maven 提供了标准的,跨平台(Linux, Windows, MacOS等)的⾃动化项⽬构建⽅式
当我们开发了⼀个项⽬之后, 代码需要经过编译, 测试, 打包, 发布等流程, 每次代码的修改, 都需要经过这些流程, 如果代码反复调试修改, 这个流程就需要反复进⾏, 就显得特别⿇烦,, ⽽Maven 给我们提供了⼀套简单的命令来完成项⽬的构建.

⽐如, 点击package, 就可以完成项⽬的打包操作

打包就是把所有的class⽂件, 全部放在⼀起, 打成jar包或者war包

jar包和war包都是⼀种压缩⽂件
jar包就是把开发⼈员已经写好的⼀些代码进⾏打包. 打好的jar包就可以引⼊到其他项⽬中, 也可以直接使⽤这些jar包中的类和属性. 另外也可以打成可执⾏jar包, 这样的包就可以通过java -jar命令来执⾏
war包可以理解为是⼀个web项⽬,⾥⾯是项⽬的所有东西, 通常⽤于⽹站.

(2) 依赖管理

上⾯说到, Maven是⼀个项⽬管理⼯具, 通过pom.xml⽂件的配置获取jar包,⽽不⽤⼿动去添加jar包
获取的jar包, 其实就是依赖.

pom.xml 就是maven 的配置⽂件,⽤以描述项⽬的各种信息

依赖配置

依赖: 指当前项⽬运⾏所需要的jar包.
⽐如前⾯学习JDBC时, 我们需要⼿动下载mysql-connector-java的包.并且添加到项⽬中.
如果使⽤Maven, 我们只需要在pom.xml中引⼊mysql-connector-java的依赖就可以了

java 复制代码
<dependencies>
     <!--⾥⾯放置项⽬的依赖坐标, 可为多个 -->
</dependencies>

  1. 在pom⽂件 <dependencies> 标签内, 添加依赖坐标
java 复制代码
<dependencies>
        <!-- MySQL 数据库驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.23</version>
        </dependency>
    </dependencies>
  1. 点击刷新按钮, 引⼊新加⼊的依赖jar包


后续有添加新的jar包, 或者修改jar包版本, 都需要通过该⽅式在项⽬中添加依赖.
3. 刷新完之后, 就可以在项⽬中看到新加⼊的jar包

依赖传递

早期我们没有使⽤maven时, 向项⽬中添加依赖的jar包,需要把所有的jar包都复制到项⽬⼯程下.
⽐如 A 依赖B, B依赖C, 那么 A项⽬引⼊B 的同时, 也需要引⼊C, 如果我们⼿动管理这个依赖, 这个过程就会⽐较⿇烦, 我们需要知道每个库都依赖哪些库, 以及这些依赖之间的版本是如何关联的

⽐如我们要吃⽕锅, 需要有锅, 有调料, 有⻝材, 以及确认什么样的锅, 什么样的⻝材.
⽐如去医院看病, 需要带上以往的病历, 检查结果, 处⽅等, 并且要确认带的资料是正确的, 如果⽇期错了, 或者患者错了, 带少了, 就需要回去重新拿.
但使⽤maven的话, 就可以避免管理所需依赖的关系。我们只需要在pom⽂件中, 定义直接依赖就可以了, 由于maven的依赖具有传递性,所以会⾃动把所依赖的其他jar包也⼀起导⼊
⽐如吃⽕锅, 现在我们可以点⼀个海底捞外卖, 直接就把所有⻝材都送过来了, 包括什么锅, 配什么菜.
⽐如去医院看病, 借助"互联⽹", 实现了信息共享, 只需要带上⾝份证, 以往的病历和检查结果就都可以看到了.

如上图, 项⽬A 通过Maven 引⼊ Jar A 时, 会⾃动引⼊ Jar B 和Jar C.
Jar A 和项⽬B就是项⽬A的直接依赖.
Jar B, Jar C是间接依赖.
直接依赖:在当前项⽬中通过依赖配置建⽴的依赖关系
间接依赖:被依赖的资源如果依赖其他资源,当前项⽬间接依赖其他资源

依赖排除

当前阶段我们需要依赖的库并不多, 但随着项⽬的越来越复杂, 库之间的依赖关系也会变得越来越复杂.
如上图中, 如果项⽬A不需要Jar B,也可以通过排除依赖的⽅式来实现.

排除依赖:
指主动断开依赖的资源。(被排除的资源⽆需指定版本)
⽐如, 我下了⼀个快递单⼦, 默认会有⼀个服务, 就是快递⼩哥会上⻔取件, 但是我刚好要出⻔, ⽽且顺路经过站点, 也可以选择⾃⼰送过去

java 复制代码
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>6.0.6</version>
        <!--排除依赖-->
        <exclusions>
            <exclusion>
                <artifactId>spring-jcl</artifactId>
                <groupId>org.springframework</groupId>
            </exclusion>
        </exclusions>
    </dependency>

maven还有⼀些功能是依赖调解, 可选依赖等
依赖调解:
当项⽬中的依赖存在依赖冲突时, 例如 存在这样的依赖:
A->B->C->X(1.0)
A->D->X(2.0)
Maven会采⽤最短路径优先的原则去选择依赖,这⾥2的依赖路径更短,所以会选择X(2.0), 当然我们也可以选择指定某个依赖的版本
当然也可以指定X的版本

(3) Maven Help插件

当项⽬⽐较复杂时, 我们就会有Jar包冲突的问题, 这时候就需要去解决依赖冲突. 解决冲突之前, 需要先找到冲突, 我们可以使⽤Maven Help插件来观察包和包之间的依赖关系.

理解 "插件" (plugin)
天⽕ + 擎天柱 => 会⻜的擎天柱.
天⽕在牺牲之前把⾃⼰变成了擎天柱的 "⻜⾏插件". 在擎天柱需要起⻜的时候就变成翅膀装在擎天柱⾝上. 不需要起⻜的时候就卸下来放到擎天柱的集装箱⾥.
程序开发的时候也经常如此.
像 IDEA 这样的程序虽然功能强⼤, 但是也⽆法⾯⾯俱到. 对于⼀些特殊场景的功能, 开发者就可以开发⼀些 "插件". 如果需要这个插件, 就单独安装.
插件就是对程序的⼀些特定场景, 做出⼀些特定的功能的扩展.
安装插件: File -> Settings ->Plugins -> 搜索'Maven Help' -> 找到对应插件, 点击Install 安装即可, 安装后需要重启下idea, 才能⽣效

安装之后, 打开pom⽂件, 可以看到Jar包之间的依赖关系

也可以右键排除掉⼀些依赖

5.Maven 仓库

我们通过短短⼏⾏代码, 就把依赖jar包放在了项⽬⾥, 具体是如何做的呢?

java 复制代码
   <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.30</version>
    </dependency>

这个代码, 我们称之为 "坐标", 也就是唯⼀的.
在Maven中, 根据 groupId、artifactId、version 的配置, 来唯⼀识别⼀个 jar 包, 缺⼀不可.
当我们在pom⽂件中配置完依赖之后, 点击刷新, Maven会根据坐标的配置, 去仓库⾥寻找Jar包, 并把他下载下来, 添加到项⽬中. 这个Jar包下载的地⽅就称为仓库.
仓库:⽤于存储资源,管理各种jar包

Maven仓库的本质就是⼀个⽬录(⽂件夹),这个⽬录被⽤来存储开发中所有依赖(jar包, 插件等).

Maven仓库分为两⼤类: 本地仓库和远程仓库. 其中远程仓库⼜分为中央仓库, 私服 和其他公共库

(1)本地仓库

本地仓库: ⾃⼰计算机上的⼀个⽬录(⽤来存储jar包)
当项⽬中引⼊对应依赖jar包后,⾸先会查找本地仓库中是否有对应的jar包

  • 如果有,则在项⽬直接引⽤
  • 如果没有,则去中央仓库中下载对应的jar包到本地仓库

本地仓库地址可以通过Maven配置查看:
File -> Settings

查看该仓库⽬录, 可以看到该⽬录下有很多的jar(最开始是空的, 随着Maven的使⽤, 该仓库下⽂件会越来越多)

(2)中央仓库

中央仓库: maven 软件中内置⼀个远程仓库地址,就是中央仓库,服务于整个互联⽹. 由 Maven 团队维护,全球唯⼀.

仓库地址: https://repo1.maven.org/maven2/
可以通过 https://mvnrepository.com 这个⽹站来查询并下载
我们可以把⾃⼰写好的Jar包上传到中央仓库(具备⼀定的要求), 也可以从中央仓库下载Jar包
查找Jar的坐标

1.访问 https://mvnrepository.com/

2.进⾏查找, ⽐如mysql

3.选择要添加的Jar包版本

4.查看Jar包对应坐标

(3)私有服务器, 也称为私服

私服: ⼀般由公司团队搭建的私有仓库.
私服属于某个公司,或者某个部⻔, 往往需要⼀定权限.
有了私服之后, Maven依赖下载的顺序⼜发⽣了变化

当Maven需要下载资源的时候

  1. 先从本地仓库获取, 本地仓库存在, 则直接返回
  2. 如果本地仓库没有, 就从私服请求, 私服存在该资源, 就直接返回
  3. 如果私服上不存在该资源,则从中央仓库下载, 中央仓库不存在, 就报错了...
  4. 如果中央仓库中存在, 就先缓存在私服上之后,再缓存到本地仓库⾥, 再为Maven的下载请求提供服务

私服是很多⼈在使⽤的, 所以只需要第⼀个使⽤者下载⼀次就可以了

6.Maven 设置国内源

因为中央仓库在国外, 所以下载起来会⽐较慢, 所以咱们选择借助国内⼀些公开的远程仓库来下载资源
接下来介绍, 如何设置国内源

(1)配置当前项⽬setting

File -> Settings

  1. 查看配置⽂件的地址, 如上图所⽰, Maven配置⽂件地址为: D:\Maven\.m2\settings.xml

不同电脑设置的Maven路径不同
settings和repository 可以修改设置为其他路径, 两个路径不要有中⽂

  1. 配置国内源
    Maven 仓库默认在国外 https://mvnrepository.com/ , 国内使⽤时会⽐较慢,我们可以更换为阿⾥云的仓库
    也可以选择别的仓库, 参考: Maven 镜像地址⼤全
    打开settings.xml, 在 mirrors 节点上,添加内容如下:
java 复制代码
<mirror>
<id>aliyunmaven</id>
<mirrorOf>central</mirrorOf>
<name>阿⾥云公共仓库</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>

(2)设置新项⽬的setting

上述配置的内容, 只对当前项⽬⽣效, 为了让后续新建的项⽬也⽣效, 需要重新设置⼀下新项⽬的
Settings

当前项⽬和新项⽬共⽤⼀个setttings⽂件即可, 所以新项⽬的设置, 只需要确认⼀下settings⽂件的路径即可.

二、第⼀个SpringBoot程序

1.Spring Boot介绍

在学习SpringBoot之前, 我们先来认识⼀下Spring
我们看下Spring官⽅( https://spring.io/ )的介绍可以看到, Spring让Java程序更加快速, 简单和安全. Spring对于速度、简单性和⽣产⼒的关注使其成为世界上最流⾏的Java框架。

Spring官⽅提供了很多开源的项⽬, 覆盖范围从Web开发到⼤数据, Spring发展到了今天, 已经形成了⾃⼰的⽣态圈. 我们在开发时, 也倾向于使⽤Spring官⽅提供的技术, 来解决对应的问题.

这些项⽬都是基于Spring Framework来进⾏开发的, 但是Spring Framework存在配置多, ⼊⻔难的问题, Spring 也意识到了这个问题, 为了简化开发者的使⽤, 从⽽创造性的推出了SpringBoot.
接下来我们看下什么是Spring Boot.
Spring Boot 的诞⽣是为了简化 Spring 程序开发的.
Spring Boot 翻译⼀下就是 Spring 脚⼿架,什么是脚⼿架呢?如下图所⽰:

盖房⼦的这个架⼦就是脚⼿架,脚⼿架的作⽤是砌筑砖墙,浇筑混凝⼟、⽅便墙⾯抹灰,装饰和粉刷的,简单来说,就是使⽤脚⼿架可以更快速的盖房⼦.
⽽ Spring Boot 就是 Spring 框架的脚⼿架,它是为了快速开发 Spring 框架⽽诞⽣的.
以前铺路是这样的:

改造之后的效率是这样的:

或者是这样的:

可以看到,每次技术的诞⽣和改进相⽐于之前的效率会有⼀个质的提升,⽽ Spring Boot 相⽐于Spring 也是如此.

2.Spring Boot 项⽬创建

(1)使⽤ Idea 创建

因为我们⽤的 Idea 社区版(其他版本也同样适⽤),所以先要安装 Spring Boot Helper插件才能创建Spring Boot 项⽬.

安装Spring Boot Help插件

使⽤专业版Idea的同学不需要安装插件, Idea已经集成了

  1. 查找插件并下载

    点击 Plugin homepage , 进⼊⽹⻚下载插件

此处不要直接点击 Install
直接点击Install, 安装的是收费版(⼟豪请随意)
插件地址: https://plugins.jetbrains.com/plugin/18622-spring-boot-helper/versions

插件对Idea版本有要求, Idea版本需要在2021.1 -2022.1.4范围内, 不在这个范围内需要重新卸载安装卸载要删除注册表的内容

  1. 安装插件
    按下图序号操作, 逐步安装插件
    选择刚才下载的插件, 安装, 重启Idea即可
    此时查看已安装插件
    安装好之后,它的名字就变成了 Spring Initializr and Assistant,如下图所⽰∶
    不要点击 update!!!
创建SpringBoot项⽬

接下来我们来创建 Spring Boot 项⽬:
File -> New ->Project

关于version的一些说明:

版本管理

SNAPSHOT 快照版,非稳定版,可以修改的

其他版本,是稳定版,发布之后就不能改了,哪怕有bug也不能改,只能通过升级版本的方式修复

SNAPSHOT 可以理解为开发版本

版本号由3位数字组成大中小版本号

第一位: 大版本 比较大的改动

第二位: 中版本 新增小的功能

第三位: 小版本 修复bug, 又小又少的功能

上图说明
① SpringBoot版本 , 选择任意3.X的, 这个版本会随着SpringBoot的升级⽽发⽣变化, 不固定
3.X版本使⽤的是jdk17, 3.X以下使⽤的是JDK8
② 打勾表⽰创建项⽬之初, 就引⼊的第三⽅依赖(框架, 插件, 组件等...后⾯再细讲)
点击 Create 就完成 Spring Boot 的项⽬创建了。
注意事项
第⼀次打开 Spring Boot 项⽬需要加载很久,因为当前 Spring Boot 框架并没有在⾃⼰的本地仓库. 为了加速 Spring Boot 项⽬的下载,在打开项⽬之前,请先确认⾃⼰的 Maven 已经配置为国内源
(2)⽹⻚版创建(了解)
不使⽤ Idea 也可以创建 Spring Boot 项⽬,我们可以使⽤ Spring 官⽅提供的⽹⻚版来创建 Spring
Boot 项⽬。
⽹⻚版创建项⽬先访问: https://start.spring.io ,如下图所⽰:

Idea创建项⽬时, 显⽰的界⾯, 就是来⾃于这个⽹站, 所以⽹络不好的情况下, 这个界⾯也会打不开
点击⽣成按钮会下载⼀个 Spring Boot 的 zip 包,解压 zip 之后⽬录如下:
然后再使⽤ Idea 打开之后,Spring Boot 项⽬就算创建成功了.

3.项⽬代码和⽬录介绍

观察pom⽂件

java 复制代码
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>3.3.6</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.sherry</groupId>
	<artifactId>springboot_demo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>demo</name>
	<description>Demo project for Spring Boot</description>
	<url/>
	<licenses>
		<license/>
	</licenses>
	<developers>
		<developer/>
	</developers>
	<scm>
		<connection/>
		<developerConnection/>
		<tag/>
		<url/>
	</scm>
	<properties>
		<java.version>17</java.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<version>3.3.6</version>
			</plugin>
		</plugins>
	</build>

</project>

pom.xml⽂件⾥的具体信息, 不需要过度关注, 我们主要看 <dependencies> 标签⾥⾯的内容
pom⽂件中, 引⼊了两个依赖

  • spring-boot-starter-web:包含了web应⽤开发所需要的常⻅依赖
  • spring-boot-starter-test:包含了单元测试所需要的常⻅依赖

引入依赖失败解决方法

包下不下来

1.重新刷新maven

2.看一下,是部分没下载下来,还是全部都没下下来,多次尝试刷新

  • 全部都没下下来:多次尝试刷新,没有权限等原因
  • 部分没下载下来:多次尝试刷新

3.刷新很多次,还是下载不下来

  • 删除本地仓库,再刷新
  • 插件下载不下来,添加版本号

5.jar包不存在

6.换下网络

换网络可能会导致一个情况: jar包下载了一半

⽗⼯程

但是我们发现, 这个依赖没有指定具体的版本号, 但我们的jar包也正常引⼊到项⽬中了.并且查看的话, 是有版本号的.

我们来看看本地仓库的的jar包是否下载下来了呢? .

也下载下来了
为什么没有指定 <version> , 程序也可以正常运⾏呢?
因为每⼀个SpringBoot⼯程,都有⼀个⽗⼯程. 依赖的版本号,在⽗⼯程中统⼀管理.
⽗⼯程指定版本号后, 就会⾃动引⼊和所指定版本对应的依赖, 创建的SpringBoot项⽬, 会继承
SpringBoot⽗⼯程.

⽬录介绍

Spring Boot 项⽬有两个主要的⽬录:

  • src/main/java: Java 源代码
  • src/main/resources: 为静态资源或配置⽂件:
    • /static:静态资源⽂件夹, ⽐如前期学的js, css, html等静态⽂件, 不需要服务器数据进⾏绑定的 ⻚⾯
    • /templates:模版资源⽂件夹, 主要存放动态模板⽂件, ⽐如JSP, Freemarker, Thymeleaf等需
  • 要服务器动态渲染数据的⽂件
  • src/test/java: 测试代码源代码
  • target: 编译后的⽂件路径
  • pom.xml: maven 配置⽂件

4.运⾏项⽬

点击启动类的 main ⽅法就可以运⾏ Spring Boot 项⽬了,启动成功如下图所⽰:

5.输出 Hello world

我们的Java EE部分, 更多是围绕着如何使⽤Java来进⾏web开发.
咱们前⾯, 讲的是Java基础, 是没办法直接和浏览器进⾏互动的. 所以接下来我们要⽤ Spring Boot 来实现和浏览器及⽤⼾的交互。
在创建的项⽬包路径下创建 UserController ⽂件,实现代码如下:

java 复制代码
package com.springboot.demo;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {
    @RequestMapping("/sayHi")
    public String sayHi(){
        return "hello,Spring";
    }
}

重新启动项⽬,访问 http://127.0.0.1:8080/sayHi 最终效果如下:

6.Web服务器

浏览器和服务器两端进⾏数据交互, 使⽤的就是HTTP协议

前⾯我们已经学习了 HTTP 协议, 知道了 HTTP 协议就是 HTTP 客⼾端和 HTTP 服务器之间的交互数据的格式.
Web 服务器就是对HTTP协议进⾏封装, 程序员不需要直接对协议进⾏操作(⾃⼰写代码去解析http协议规则),让Web开发更加便捷, 所以Web服务器也被称为WWW服务器, HTTP服务器, 主要功能是提供⽹上信息浏览服务.
常⻅的Web服务器有: Apache,Nginx, IIS, Tomcat, Jboss等
SpringBoot 内置了Tomcat服务器, ⽆需配置即可直接运⾏

Tocmat默认端⼝号是8080, 所以我们程序访问时的端⼝号也是8080

7.请求响应流程分析

浏览器输⼊URL之后, 发起请求, 就和服务器之间建⽴了连接
服务器:

浏览器:

  • 输⼊⽹址:http://127.0.0.1:8080/hello
    • 通过IP地址127.0.0.1定位到⽹络上的⼀台计算机, 127.0.0.1就是本机
    • 通过端⼝号8080找到计算机上对应的进程 , 也就是在本地计算机中找到正在运⾏的8080端⼝的程序
    • /user/sayhi是请求资源位置
      • 资源:对计算机⽽⾔资源就是数据
        • web资源:通过⽹络可以访问到的资源(通常是指存放在服务器上的数据)
  • http://127.0.0.1:8080/user/sayhi ,就是向本地计算机中的8080端⼝程序,获取资源位置 是/user/sayhi的数据
  • 8080端⼝程序,在服务器找/hello位置的资源数据,发给浏览器

服务器:

  • 接收到浏览器发送的信息(如:/user/sayhi)
  • 在服务器上找到/user/sayhi的资源
  • 把资源发送给浏览器

8.访问出错怎么办

(1)404

404 表⽰⽤⼾访问的资源不存在. ⼤概率是 URL 的路径写的不正确.

错误实例1: url单词拼错
错误实例2: 注解写错
java 复制代码
@Controller
public class UserController {
    @RequestMapping("/sayHi")
    public String sayHi(){
        return "hello,Spring";
    }
}

访问时也会报错404


通过Fiddler观察Http请求

(2)500

服务器出现内部错误. ⼀般是服务器的代码执⾏过程中遇到了⼀些特殊情况(服务器异常崩溃)会产⽣这个状态码.
错误实例:

java 复制代码
@RestController
public class UserController {
    @RequestMapping("/sayHi")
    public String sayHi(){
        int res = 10/0;
        return "hello,Spring";
    }
}

重启 Tomcat 服务器.
重新访问⻚⾯, 可以看到:

此时, 程序后端控制台已经打印了具体的异常调⽤栈

异常信息⾥已经提⽰了出现异常的代码是UserController.java的第 11 ⾏.
错误原因是算术异常: 除数为0
按照异常提⽰, 去解决对应的问题即可.

(3)⽆法访问此⽹站

⼀般是 Tomcat 启动失败了.

这种情况⼀般是服务未成功启动, 也就是tomcat未启动,或者IP/端⼝写错

打开Fiddler的话, 界⾯如下:

三、⼩结

最开始学习Spring的时候, 会遇到很多问题, 更多是环境相关的问题.
我们不仅要学习 Spring 代码的基本写法, 更重要的是学习排查错误的思路.

程序猿调试 BUG 如同医⽣诊病.
⼀个有经验的程序猿和⼀个新⼿程序猿相⽐, 最⼤的优势往往不是代码写的多好, ⽽是调试效率有多
⾼. 同⼀个问题可能新⼿花了⼏天都⽆法解决的, 但是有经验的程序猿可能⼏分钟就搞定了.
熟悉 HTTP 协议能让我们调试问题事半功倍.

  • 2xx 的状态码表示成功执行
  • 3xx 的状态码表示重定向
  • 4xx 的状态码表⽰客户端错误(路径不存在,格式错误,参数错了), 往往需要检查 URL 是否正确, 和代码中设定的 Context Path 以及 Servlet Path 是否⼀致.
  • 5xx 的状态码表⽰服务器出现错误, 往往需要观察⻚⾯提⽰的内容和 Tomcat ⾃⾝的⽇志, 观察是否存在报错.

出现连接失败往往意味着服务没有正确启动, 也需要观察 服务的⾃⾝⽇志是否有错误提⽰.
观察⽇志是调试程序的重要途径. 系统⽇志往往很多, 需要同学们耐⼼阅读, 经常阅读, 熟练了就能更快速的找到问题了.
Spring Boot 是为了快速开发 Spring ⽽诞⽣的, Spring Boot 具备:

  • Spring Boot 提供了启动添加依赖的功能, 可以快速集成框架.
  • 内置web服务器,⽆需配置 Tomcat 等 Web服务器,直接运⾏和部署程序.
  • 可以完全抛弃繁琐的 XML,使⽤注解和配置的⽅式进⾏开发.
  • ⽀持更多的监控的指标,可以更好的了解项⽬的运⾏情况等特点.
  • Spring Boot 可使⽤ Idea 或⽹⻚创建,它的设计思想是约定⼤于配置,类上标注@SpringBootApplication 就可以启动 Spring Boot 项⽬了.
相关推荐
Chen-Edward16 小时前
有了Spring为什么还有要Spring Boot?
java·spring boot·spring
magic3341656317 小时前
Springboot整合MinIO文件服务(windows版本)
windows·spring boot·后端·minio·文件对象存储
陈小桔17 小时前
idea中重新加载所有maven项目失败,但maven compile成功
java·maven
小学鸡!17 小时前
Spring Boot实现日志链路追踪
java·spring boot·后端
xiaogg367817 小时前
阿里云k8s1.33部署yaml和dockerfile配置文件
java·linux·kubernetes
逆光的July18 小时前
Hikari连接池
java
微风粼粼18 小时前
eclipse 导入javaweb项目,以及配置教程(傻瓜式教学)
java·ide·eclipse
番茄Salad18 小时前
Spring Boot临时解决循环依赖注入问题
java·spring boot·spring cloud
天若有情67318 小时前
Spring MVC文件上传与下载全面详解:从原理到实战
java·spring·mvc·springmvc·javaee·multipart
祈祷苍天赐我java之术18 小时前
Redis 数据类型与使用场景
java·开发语言·前端·redis·分布式·spring·bootstrap