您现在的位置是:首页 >技术交流 >搭建Springboot项目网站首页技术交流

搭建Springboot项目

微风粼粼 2024-06-26 12:01:02
简介搭建Springboot项目

SpringBoot官网首页:https://spring.io/projects/spring-boot/

JavaEE分层架构

JavaEE体系结构包括四层,从上到下分别是应用层、Web层、业务层、持久层。Struts和SpringMVC是Web层的框架,Spring、SpringBoot是业务层的框架,Hibernate和MyBatis是持久层的框架。

1、SpringBoot简介

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。

2、SpringBoot特点

SpringBoot基于Spring4.0设计,不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程。另外SpringBoot通过集成大量的框架使得依赖包的版本冲突,以及引用的不稳定性等问题得到了很好的解决。

在以往我们通过SSM(Spring + SpringMVC +Mybatis)框架进行开发的时候,需要配置大量的配置文件,而且容易出错,而SpringBoot

省去了繁琐的配置。

SpringBoot所具备的特征有:
(1)可以创建独立的Spring应用程序,并且基于其Maven或Gradle插件,可以创建可执行的JARs和WARs;
(2)内嵌Tomcat或Jetty等Servlet容器;
(3)提供自动配置的“starter”项目对象模型(POMS)以简化Maven配置;
(4)尽可能自动配置Spring容器;
(5)提供准备好的特性,如指标、健康检查和外部化配置;
(6)绝对没有代码生成,不需要XML配置。

3、核心注解

@SpringBootApplication

通常用在启动类上,申明让spring boot自动给程序进行必要的配置,它也是 Spring Boot 的核心注解,主要组合包含了以下 3 个注解:

@SpringBootConfiguration

组合了 @Configuration 注解,实现配置文件的功能。

@EnableAutoConfiguration

这个注解才是实现自动装配的关键,点进去之后发现,它是一个由 @AutoConfigurationPackage 和 @Import 注解组成的复合注解

打开自动配置的功能,也可以关闭某个自动配置的选项。

如关闭数据源自动配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class });

@AutoConfigurationPackage表示自动注入包,@Import将类注入到Spring容器中

@ComponentScan

Spring组件扫描功能,让spring Boot扫描到Configuration类并把它加入到程序上下文。

4、搭建SpringBoot项目

4.1 环境及工具

如果有不会安装的小伙伴可以看这个文档:https://blog.csdn.net/ITKidKid/article/details/130265566

  1. JDK1.8

  2. Maven|Gradle(根据自己项目所需的构建工具选择,这里我们使用的是Maven构建工具)

  3. IDEA

官方:提供了一个快速生成的网站,IDEA集成了这个网站(首选)

https://start.spring.io/

4.2 搭建SpringBoot项目

  1. 点击文件 —》新建 —》项目

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IAboJKIA-1684985628901)(E:PRDImagesimage-20230523161113693.png)]

  1. 填完信息 —》点击下一步

    注意:JDK如果没有安装的话需要安装一下

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZWS0X4eL-1684985628902)(E:PRDImagesimage-20230523162256307.png)]

  2. 填写完信息 —》点击完成

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MGH3uUE5-1684985628902)(E:PRDImagesimage-20230523162705524.png)]

  3. 点击文件 —》设置 —》构建、执行、部署 —》构建工具 —》Maven —》然后执行对应操作

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gLLuLum3-1684985628902)(E:PRDImagesimage-20230523162954948.png)]

  1. 进行启动

    注意pom.xml是否爆红,如果爆红了请更换版本,或者去Maven官网下载。

    点击启动

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JRDTDvZE-1684985628903)(E:PRDImagesimage-20230523170603190.png)]

    看到以下日志打印出来就证明启动成功

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YjQNs2Zt-1684985628903)(E:PRDImagesimage-20230523170622428.png)]

5、SpringBoot项目结构

src/main/java路径:主要编写业务程序
src/main/resources路径:存放静态文件和配置文件
src/test/java路径:主要编写测试程序

如下所示

├── src
│   ├── main
│   │   ├── java
│   │   │   └── com
│   │   │       └── example
│   │   │           └── demo
│   │   │               ├── controller
│   │   │               │   ├── HomeController.java
│   │   │               │   └── ...
│   │   │               ├── service
│   │   │               │   ├── UserService.java
│   │   │               │   └── ...
│   │   │               ├── dao(mapper)
│   │   │               │   ├── UserDao.java
│   │   │               │   └── ...
│   │   │               ├── model
│   │   │               │   ├── User.java
│   │   │               │   └── ...
│   │   │               └── DemoApplication.java
│   │   ├── resources
│   │   │   ├── static
│   │   │   ├── templates
│   │   │   ├── application.properties
│   │   │   ├── application.yml
│   │   │   └── ...
│   │   └── webapp
│   └── test
│       ├── java
│       │   └── com
│       │       └── example
│       │           └── demo
│       │               ├── controller
│       │               ├── service
│       │               ├── dao
│       │               ├── model
│       │               └── DemoApplicationTests.java
│       └── resources
│           └── ...
└── pom.xml

如图所示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lXs0ewiM-1684985628903)(E:PRDImagesimage-20230523175717865.png)]

其中,controller包含处理HTTP请求的控制器;service包含业务逻辑;dao(mapper)包含与数据库进行交互的接口;model包含实体类;resources包含配置文件和静态资源文件;TestDemoApplication是启动类。dto用于数据传输;vo用于视图展示;util用于工具类编写;config用于配置类编写;static用于存放存放静态资源。如图片、CSS、JavaScript 等;templates用于存放 Web 页面的模板文件;application.properties/application.yml(两个文件格式有所不同) 用于存放程序的各种依赖模块的配置信息,比如 服务端口,数据库连接配置等;.gitignore:使用版本控制工具 git 的时候,设置一些忽略提交的内容 ;.idea 本地Idea编译器的配置,一般用git做版本控制的时候会把.idea文件夹排除;

tests目录包含了测试代码,其中DemoApplicationTests是Spring Boot自动生成的默认测试类,可以在此编写单元测试和集成测试。pom.xml是Maven项目的配置文件,其中包含了项目的依赖项和构建配置。

6、打包

6.1 为什么要打包

讲到打包,就必须要讲一下Jar包和War包

1. jar为什么诞生

  1. java工程有大量文件,在部署的时候需要向服务器上传大量文件,如果有了jar的话,只需上传一个jar包就行。
  2. 在早期Web浏览器必须重复多次请求Web服务器,以便下载完构成一个“程序片”(Applet)的所有文件;但在将所有这些文件合并到一个JAR文件里以后,只需向远程服务器发出一次请求即可。
  3. 如果我们依赖别人的项目的话,就要将别人的class文件一个一个复制过来放到我们引用路径下,如果有了jar,一个项目就是一个jar我们只需依赖别人的jar就行。
  4. 如果引用的项目进行了更新,我们要对比每个文件,进行替换。如果有了jar只需替换一个jar。
  5. jar压缩作用,减小体积
  6. jar包可以做混淆加密,防止反编译

2. war为什么诞生

  1. war包诞生于javaEE出现的年代,war 包是 Sun 提出的一种 web 应用程序格式。它与 jar 类似,是很多文件的压缩包。war 包中的文件按照一定目录结构来组织。
  2. 一般其根目录下包含有 html 和 jsp 文件,或者包含有这两种文件的目录,另外还有 WEB-INF 目录。通常在 WEB-INF 目录下含有一个 web.xml 文件和一个 classes 目录。web.xml 是这个应用的配置文件,而 classes 目录下则包含编译好的 servlet 类和 jsp,或者 servlet 所依赖的其他类(如 JavaBean)。通常这些所依赖的类也可以打包成 jar 包放在 WEB-INF 下的 lib 目录下。

3. jar与war有什么区别

  • jar与war的目录结构不同,本质上都是压缩文件也都是使用jar命令生成
  • jar是类的归档文件;war是Web 归档文件也是一个web 应用程序
  • tomcat是按照javaEE规范开发的web应用服务器,javaEE规范是sun公司制定的企业级应用规范,同时sun也制定了web 应用程序格式war,tomcat也只支持部署war不支持部署jar

6.2 如何打Jar包

1. Maven项目打包

Maven项目:单模块项目在pom.xml添加打包插件,多模块项目需要在启动类下的pom.xml添加打包插件,如下所示,必须添加以下打包插件,否则会导致目录结构不一样,导致程序运行不了。

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

Maven打包命令:在idea中Terminal控制台执行maven打包命令,需要到项目的子目录下 -Dmaven.test.skip=true //跳过测试

mvn clean package -Dmaven.test.skip=true

可视化打包:右击右边的Maven进行如下图操作进行Maven打包

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HveFDdrz-1684985628904)(E:PRDImagesimage-20230524144342418.png)]

2. Gradle项目打包

可视化打包:点击Gradle --》点击jar就是将整个项目打包

​ 点击Gradle --》点击build就是将整个项目包夸所有依赖进行打包

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gq7gKkDj-1684985628904)(E:PRDImagesimage-20230524145448240.png)]

7、SpringBoot集成SpringMVC

7.1 为什么要使用SpringMVC?

Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的Spring MVC框架或集成其他MVC开发框架,如Struts1(现在一般不用),Struts 2(一般老项目使用)等等。

7.2 SpringMVC流程

视图流程

在这里插入图片描述

具体流程如下:

  1. 客户端请求被DispatcherServlet接收
  2. 根据HandlerMapping映射到Handler
  3. 生成Handler和HandlerInterceptor
  4. Handler和HandlerInterceptor以HandlerExecutionChain的形式一并返回给DispatcherServlet
  5. DispatcherServlet通过HandlerAdapter调用Handler的方法完成业务逻辑处理
  6. 返回一个ModelAndView对象给DispatcherServlet
  7. DispatcherServlet把获取的ModelAndView对象传给ViewResolver视图解析器,把逻辑视图解析成物理视图
  8. ViewResolver返回一个View进行视图渲染(把模型填充到视图中)
  9. DispatcherServlet把渲染后的视图响应给客户端

7.3 集成SpringMVC

1. 添加依赖

在web层的pom.xml添加如下依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>

2. SpringMVC相关注解

@Controller

作用:标识一个类为SpringMVC的控制器,@Controller是一个用于标识控制器的注解。使用@Controller注解的类通常处理HTTP请求,并返回响应结果。

@RestController

// @RequestBody + @Controller === @RestController

作用:标识一个类为SpringMVC的Rest风格的控制器,@RestController是一个用于标识Rest风格控制器的注解。与@Controller注解不同,@RestController注解的类中的所有方法都将以JSON或XML形式返回响应结果

@RequestMapping

// @RequestMapping(value = “/index”,method = RequestMethod.POST) === @PostMapping(value = “/index”)

Spring MVC 通过 @RequestMapping 注解将 URL 请求与业务方法进行映射,在控制器的类定义处以及方法定义处都可以添加 @RequestMapping,在类定义处添加相当于多了一层访问路径。

常用参数

value:指定 URL 请求的实际地址,是 @RequestMapping 的默认值
method:指定请求的 method 类型,包括 GET、POST、PUT、DELETE ,分别对应 GET、POST、PUT、DELETE 方式请求等。

@RequestBody

作用:将请求体的内容绑定到控制器方法的参数上。@RequestBody是一个用于获取HTTP请求体中的参数的注解,在SpringMVC中非常常用。它可以用于方法参数级别,用于指定获取请求体参数的方式。

@ResponseBody

作用:将控制器方法的返回值直接写入HTTP响应体中。@ResponseBody是一个用于将方法的返回值转换成HTTP响应体的注解,在SpringMVC中非常常用。它可以用于方法级别,用于指定将方法的返回值转换成HTTP响应体,并发送给客户端。

@RequestParam

作用:将请求参数绑定到控制器方法的参数上。@RequestParam是一个用于获取HTTP请求参数的注解,在SpringMVC中非常常用。它可以用于方法参数级别,用于指定获取请求参数的方式和名称。

@PathVariable

作用:将URL中的一部分作为控制器方法的参数。@PathVariable是一个用于获取HTTP请求路径中的参数的注解,在SpringMVC中非常常用。它可以用于方法参数级别,用于指定获取请求路径参数的名称。

@ModelAttribute

作用:将请求参数绑定到一个对象上。@ModelAttribute是一个用于将HTTP请求参数绑定到方法参数或方法返回值上的注解,在SpringMVC中非常常用。它可以用于方法参数级别,用于指定使用HTTP请求参数来绑定方法参数上的属性值。

@ExceptionHandler

作用:用于处理异常的注解。@ExceptionHandler是一个用于处理控制器中出现的异常的注解,在SpringMVC中非常常用。它可以用于方法级别,用于指定处理控制器中出现的异常的方式。

@ControllerAdvice

作用:用于定义全局控制器异常处理器。@ControllerAdvice是一个用于定义全局控制器通知的注解,在SpringMVC中非常常用。它可以用于类级别,用于定义全局控制器通知。

3. 编写代码

@RestController
public class TestController {
    // 请求方式 http://IP:端口/index1
    // 这个请求方式 === @GetMapping("/index1")
    @RequestMapping(value = "/index1",method = RequestMethod.GET)
    public String test1(){
        return "testDemo1";
    }

    // 请求方式 http://IP:端口/index2?id=999
    // @RequestParam 用于指定获取请求参数的方式和名称,放在方法里面使用
    @GetMapping("/index2")
    public String test2(@RequestParam Integer id){
        return "testDemo2:"+id;
    }

    // 请求方式 http://IP:端口/index3/123
    // @PathVariable 用于获取路径中的参数,放在方法里面使用
    @GetMapping("/index3/{id}")
    public String test3(@PathVariable Integer id){
        return "testDemo3:"+id;
    }

    // 请求方式 http://IP:端口/index4
    // @RequestBody 它可以用于方法参数级别,用于指定获取请求体参数的方式
    @GetMapping("/index4")
    public Map test4(@RequestBody Map<String,Object> map){
        return map;
    }

    // 请求方式 http://IP:端口/index5
    // @ResponseBody 将请求体的内容绑定到控制器方法的参数上 ,会直接返回 json 数据
    @GetMapping("/index5")
    @ResponseBody
    public String test5(@RequestBody Map<String,Object> map){
        return "testDemo5:" +map;
    }
}

使用测试工具进行测试就可以了

至此我们的SpringBoot项目搭建就学习完了。

感谢以下博主:https://blog.csdn.net/a374519711/article/details/128616520

https://blog.csdn.net/litianxiang_kaola/article/details/79169148

https://blog.csdn.net/qq_46138492/article/details/129471296

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。