【JavaEE】Spring Boot项目创建

Spring Boot介绍

在学习Spring Boot之前,我们先来认识一下Spring

Spring官方是这样介绍的:

可以看到,Spring让Java程序更加快速,简单和安全。Spring对于速度,简单性和生产力的关注使其成为世界上最流行的Java框架

Spring官方为我们提供了很多开源的项目,覆盖范围从Web开发到大数据,Spring发展到了今天,已经形成了自己的生态圈。我们在开发时,也倾向于使用Spring官方提供的技术,来解决对应的问题

Spring开源项目:

我只能截到这么多,实际上还有很多。大家可以自行到https://spring.io/去看

这些项目都是基于Spring Framework来进行开发的,但是Spring Framework存在配置多,入门难的问题,Spring也意识到了这个问题,为了简化开发者的使用,从而创造性的推出了Spring Boot

接下来,我们看下什么是Spring Boot

Spring Boot的诞生,是为了简化Spring程序开发

Spring Boot翻译一下就是Spring 脚手架。那什么是脚手架呢?如下图所示:

盖房子的这个架子就是脚手架,脚手架的作用是砌筑砖墙,浇筑混凝土、方面墙面抹灰,装饰和粉刷的,简单来说,就是使用脚手架可以更快速的盖房子

而Spring Boot就是Spring框架的脚手架,它是为了快速开发Spring框架而诞生的

Spring Boot项目创建

使用IDEA创建

使用社区版需要额外安装插件,而且后续学习中,会发现社区版有很多限制。我们这里建议大家能够换成专业版IDEA,现在网络上有很多种破解专业版IDEA的方式。大家可以试一下

接下来,我们使用专业版IDEA创建Spring Boot项目

File->New->Project

点击Next,然后选择Spring Boot版本,并添加依赖

注意:

Spring Boot版本,选择任意3.x的,这个版本会随着Spring Boot的升级而发生变化,不固定。

3.x版本使用的是jdk17,3.x以下使用的是jdk8

这里我们想要添加什么依赖(框架,插件,组件等....后面再细讲),就打勾即可

然后点击Finish即可生成一个Spring Boot项目。如下图:

注意事项:

第一次打开Spring Boot项目需要加载很久,因为当前Spring Boot框架并没有在自己的本地仓库

为了加速Spring Boot项目的下载,在打开项目之前,请先确定自己的Maven已经配置为国内源

见:【JavaEE】Maven配置-CSDN博客

项目代码和目录介绍

观察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 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.4.4</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.fei</groupId>
    <artifactId>Spring_Boot_demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>Spring_Boot_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.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <annotationProcessorPaths>
                        <path>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </path>
                    </annotationProcessorPaths>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

pom.xml文件里的具体信息,我们不需要过度关注。主要看<dependencies>标签里面的内容即可

在pom文件中,引入了两个依赖

·spring-boot-starter-web:包含了web应用开发所需要的常见依赖

·spring-boot-starter-test:包含了单元测试所需要的常见依赖

父工程

但是我们发现在上述我们添加依赖时,并没有指定具体的版本号,但我们的jar包也正常引入到项目中了。

但是如果查看的话,其实是有版本号的

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

据图可知,本地仓库的jar包也下载了

那为什么没有指定版本,程序也可以正常运行呢?

因为每一个Spring Boot工程,都有一个父工程。依赖的版本号,在父工程中统一管理

父工程指定版本号后,就会自动引入和所指定版本对应的依赖,创建的Spring Boot项目,会继承Spring Boot父工程

在pom.xml中,找到父工程

进入父工程(spring-boot-starter-parent)中

查看依赖版本,进入spring-boot-dependencies中

目录介绍

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

·src/main/java:Java源代码

·src/main/resources:为静态资源或配置文件:

·/static:静态资源文件夹,比如学习的js、css、html等静态文件,不需要服务器数据进行绑定的页面

·/templates:模板资源文件夹,主要存放动态模板文件,比如JSP、Freemarker、Thymeleaf等需要服务器动态渲染数据的文件

·src/test/java:测试代码源代码

·target:编译后的文件路径

·pom.xml:maven配置文件

注意:在刚创建好Spring Boot项目时,有一些不必要的可以进行选择性删除。如上图的:.mvn//.gitattributes//HELP.md/mvnw/mvnw.cmd

运行项目

我们在学习Spring框架这里,记得 实践>>理论(我们先跟着上手操作,后续再讲解原因)

我们可以看到在SpringBootDemoApplication这个类上面有一串黄色代码 @SpringBootApplication

@SpringBootApplication:这是SpringBoot启动类注解

我们这里点击启动类的main方法就可以运行Spring Boot项目了,启动成功如下图:

有@SpringBootApplication注解的类即为启动类

java 复制代码
@SpringBootApplication
public class SpringBootDemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootDemoApplication.class, args);
    }
}

我们需要记住以下几点

1.启动类本身就是一个main方法,是Spring Boot应用的入口

2.代码需放在启动类包或其子包下。(不放的话,需要额外操作)

3.避免直接运行其他类的main方法(会破坏Spring的依赖管理)

输出Hello world

我们的【JavaEE进阶】专栏,更多是围绕着如何使用Java来进行Web开发

之前我们所讲的都是Java基础,是没办法直接和浏览器进行互动的。所以接下来我们要用SpringBoot来实现和浏览器及用户的交互

在创建的项目名包(com.fei.spring_boot_demo)路径下创建UserController文件。

也是为了保证代码放在启动类包或其子包下。

实现代码如下

java 复制代码
package com.fei.spring_boot_demo.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RequestMapping("/user")
@RestController
public class UserController {
    @RequestMapping("hello")
    public String hello(){
        return "Hello world";
    }
}

在我们写完代码后,每次都需要重新启动 启动类

重新启动项目,然后访问 http://127.0.0.1:8080/user/hello 最终效果如下:

我们这里先不纠结 原因。我们先敲代码。如果我们先学习理论知识,再去敲代码,不知道要学到猴年马月。

Web服务器

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

HTTP协议是HTTP客户端和HTTP服务器之间的交互数据的格式

Web服务器就是对HTTP协议进行封装,程序员不需要直接对协议进行操作(自己写代码去解析http协议规则),让Web开发更加便捷,所以Web服务器也被称为WWW服务器。HTTP服务器,主要功能就是提供网上信息浏览服务

常见的Web服务器有:Apache,Nginx,IIS,Tomcat,Jboss等

Spring Boot内置了Tomcat服务器,无需配置即可直接运行

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

请求响应流程分析

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

浏览器:

·输入网址:http://127.0.0.1:8080/user/hello

·通过IP地址127.0.0.1定位到网络上的一台计算机,127.0.0.1就是本机

·通过端口号8080找到计算机上对应的进程,也就是在本地计算机中找到正在运行的8080端口的程序

·/user/hello是请求资源位置

·资源:对计算机而言,资源就是数据

·Web资源:通过网络可以访问到的资源(通常是指存放在服务器上的数据)

http://127.0.0.1:8080/user/hello,就是向本地计算机中的8080端口程序,获取资源位置是user/hello的数据

8080端口程序,在服务器找/hello位置的资源数据,发给浏览器

服务器:

·接收到浏览器发送的信息(如:/user/hello)

·在服务器上找到/user/hello的资源

·把资源发送给浏览器

常见报错

访问出错怎么办

404

404表示用户访问的资源不存在。大概率是URL的路径写的不正确

错误实例1:url单词拼错

错误实例2:注解写错

java 复制代码
@RequestMapping("/user")
@Controller //把RestController写成了Controller
public class UserController {
    @RequestMapping("hello")
    public String hello(){
        return "Hello world";
    }
}

这时候访问时,也会报错404

通过Fiddler观察HTTP请求

500

服务器内部出现错误。一般是服务器的代码在执行过程中遇到了一些特殊情况(如服务器异常崩溃)就会产生500状态码

错误实例:

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

重启Tomcat服务器,然后重新访问页面,我们可以看到:

并且,此时程序后端控制台也打印了具体的异常调用栈

异常信息里已经提示了:出现异常的代码是UserController.java的第12行

错误原因:算术异常-->除数为0

我们只需要按照异常提示,去解决对应的问题即可

无法访问此网站

一般是Tomcat启动失败了

这种情况一般是服务未成功启动,也就是tomcaat未启动,或者IP/端口写错

打开Fiddler的话(我的Edge浏览器也是),页面如下:

小结

最开始学习Spring的时候,会遇到很多问题,更多是环境相关的问题

我们不仅要学习Spring代码的基本写法,更重要的是学习排查错误的思路

程序员调试BUG如同医生诊病

一个有经验的程序员和一个新手程序员相比,最大的优势往往不是代码写的多好,而是调试效率有多高。同一个问题可能新手花了几天都无法解决的,但是有经验的程序员可能几分钟就搞定了

熟悉HTTP协议能让我们调试问题事半功倍

·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项目了

相关推荐
14L4 小时前
互联网大厂Java面试:从Spring Cloud到Kafka的技术考察
spring boot·redis·spring cloud·kafka·jwt·oauth2·java面试
地藏Kelvin4 小时前
Spring Ai 从Demo到搭建套壳项目(二)实现deepseek+MCP client让高德生成昆明游玩4天攻略
人工智能·spring boot·后端
一个有女朋友的程序员4 小时前
Spring Boot 缓存注解详解:@Cacheable、@CachePut、@CacheEvict(超详细实战版)
spring boot·redis·缓存
wh_xia_jun5 小时前
在 Spring Boot 中使用 JSP
java·前端·spring boot
yuren_xia5 小时前
在Spring Boot中集成Redis进行缓存
spring boot·redis·缓存
yuren_xia6 小时前
Spring Boot + MyBatis 集成支付宝支付流程
spring boot·tomcat·mybatis
我爱Jack7 小时前
Spring Boot统一功能处理深度解析
java·spring boot·后端
RainbowJie19 小时前
Spring Boot 使用 SLF4J 实现控制台输出与分类日志文件管理
spring boot·后端·单元测试
面朝大海,春不暖,花不开9 小时前
Spring Boot MVC自动配置与Web应用开发详解
前端·spring boot·mvc
发愤图强的羔羊9 小时前
SpringBoot异步导出文件
spring boot·后端