您现在的位置是:首页 >技术交流 >搭建Springboot项目网站首页技术交流
搭建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
-
JDK1.8
-
Maven|Gradle(根据自己项目所需的构建工具选择,这里我们使用的是Maven构建工具)
-
IDEA
官方:提供了一个快速生成的网站,IDEA集成了这个网站(首选)
4.2 搭建SpringBoot项目
- 点击文件 —》新建 —》项目
-
填完信息 —》点击下一步
注意:JDK如果没有安装的话需要安装一下
-
填写完信息 —》点击完成
-
点击文件 —》设置 —》构建、执行、部署 —》构建工具 —》Maven —》然后执行对应操作
-
进行启动
注意pom.xml是否爆红,如果爆红了请更换版本,或者去Maven官网下载。
点击启动
看到以下日志打印出来就证明启动成功
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
如图所示
其中,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为什么诞生
- java工程有大量文件,在部署的时候需要向服务器上传大量文件,如果有了jar的话,只需上传一个jar包就行。
- 在早期Web浏览器必须重复多次请求Web服务器,以便下载完构成一个“程序片”(Applet)的所有文件;但在将所有这些文件合并到一个JAR文件里以后,只需向远程服务器发出一次请求即可。
- 如果我们依赖别人的项目的话,就要将别人的class文件一个一个复制过来放到我们引用路径下,如果有了jar,一个项目就是一个jar我们只需依赖别人的jar就行。
- 如果引用的项目进行了更新,我们要对比每个文件,进行替换。如果有了jar只需替换一个jar。
- jar压缩作用,减小体积
- jar包可以做混淆加密,防止反编译
2. war为什么诞生
- war包诞生于javaEE出现的年代,war 包是 Sun 提出的一种 web 应用程序格式。它与 jar 类似,是很多文件的压缩包。war 包中的文件按照一定目录结构来组织。
- 一般其根目录下包含有 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打包
2. Gradle项目打包
可视化打包:点击Gradle --》点击jar就是将整个项目打包
点击Gradle --》点击build就是将整个项目包夸所有依赖进行打包
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流程
视图流程
具体流程如下:
- 客户端请求被DispatcherServlet接收
- 根据HandlerMapping映射到Handler
- 生成Handler和HandlerInterceptor
- Handler和HandlerInterceptor以HandlerExecutionChain的形式一并返回给DispatcherServlet
- DispatcherServlet通过HandlerAdapter调用Handler的方法完成业务逻辑处理
- 返回一个ModelAndView对象给DispatcherServlet
- DispatcherServlet把获取的ModelAndView对象传给ViewResolver视图解析器,把逻辑视图解析成物理视图
- ViewResolver返回一个View进行视图渲染(把模型填充到视图中)
- 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