# JAVA企业框架开发实验一 **Repository Path**: xupengdi/SBexperiment_1 ## Basic Information - **Project Name**: JAVA企业框架开发实验一 - **Description**: No description available - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-03-31 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 实验一 使用Spring Boot构建应用程序 ## 一、 实验目的 1. 掌握使用IntelliJ IDEA创建Spring Boot应用程序的方法; 2. 了解spring-boot-starter-parent的配置内容; 3. 掌握如何利用Starter扩展Spring Boot应用程序的功能; 4. 掌握如何配置Starter; 5. 掌握如何通过属性文件定制Spring Boot应用程序的初始化参数; 6. 掌握使用Spring Boot编写简单的单元测试; 7. 了解Spring Boot应用程序的Fat Jar文件; 8. 掌握Markdown轻量级标记语言编写README.md文件。 ## 二、 实验环境 1. JDK 1.8或更高版本 2. Maven 3.6+ 3. IntelliJ IDEA ## 三、 实验任务 ###1. 通过IntelliJ IDEA的Spring Initializr向导创建Spring Boot项目; ![创建项目](Pictures/1.png)
创建项目
### 2. 添加两个功能模块:spring MVC、lombok; ![添加功能模块](Pictures/2.png)
添加功能模块
### 3. 添加阿里云镜像仓库作为项目maven仓库; ![添加阿里云镜像](Pictures/3.png)
添加阿里云镜像
### 4. 解释项目pom.xml文件中主要标签的意义;创建Spring Boot项目; - **parent:** 所继承的父项目的坐标。如果项目中没有规定某个元素的值,那么父项目中的对应值即为项目的默认值。 坐标包括group ID,artifact ID和 version - **artifactId:** 被继承的父项目的构件标识符 - **groupId:** 被继承的父项目的全球唯一标识符 - **version:** 被继承的父项目的版本 - **relativePath:** 父项目的pom.xml文件的相对路径,默认值是../pom.xml。Maven首先在构建当前项目的地方寻找父项目的pom,其次在文件系统的这个位置(relativePath位置),然后在本地仓库,最后在远程仓库寻找父项目的pom - **properties:** 自定义属性,一般用于依赖或配置统一版本的管理 - **plugins**:使用的插件列表 - **repositories:** 发现依赖和扩展的远程仓库列表 - **exclusions:** 当传递依赖时, 从依赖构件列表里,列出被排除的依赖构件集。即告诉maven你只依赖指定的项目,不依赖项目的依赖,此元素主要用于解决版本冲突问题。 - **scope**:依赖范围。在项目发布过程中,帮助决定哪些构件被包括进来 - **build:** 构建项目所需要的信息 ### 5. 配置jetty或undertow作为Spring Boot应用程序的默认Servlet容器; ``` org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-tomcat org.springframework.boot spring-boot-starter-jetty ``` ### 6. 添加一个简单的Spring Mvc控制器组件,用于测试: ```$xslt @RestController public class controller { @ResponseBody @RequestMapping("/") public String index(){ // return "Hello,world!"; return "Hello,world!"; } ``` >说明:该类被标记为@RestController,这意味着Spring MVC可以使用它来处理Web请求。@RequestMapping映射‘/’到该类的index()方法。从浏览器调用或在命令行上使用curl时,该方法返回纯文本。那是因为@RestController是复合注解,它将@Controller和@ResponseBody组合在一起,这两个注解会使Spring Mvc处理Web请求返回的是数据而不是视图。 ### 7.定义一个CommandLineRunner的Bean,用于检查Spring Boot应用程序启动完成后在Spring IoC容器中注册的所有Bean。如下图: ```$xslt @Bean public CommandLineRunner commandLineRunner(ApplicationContext ctx){ return args -> { System.out.println("SpringBoot注册的所有Been:"); String[] beanNames = ctx.getBeanDefinitionNames(); Arrays.sort(beanNames); Arrays.stream(beanNames).forEach(System.out::println); }; } ``` + 打印所有bean的类名: ![所有Bean](Pictures/7.jpg)
所有Bean
>说明: Spring Boot应用程序初始化完成后,会自动回调所有CommandLineRunner类型的Bean的run方法。 实验中,我们自定义一个CommandLineRunner,检查由您的应用程序创建或由Spring Boot自动添加的所有bean,并对它们进行排序并打印出来。 ###8. 编写一个简单的单完测试。如下图: >+ perform : 执行一个RequestBuilder请求,会自动执行SpringMVC的流程并映射到相应的控制器Controller执行处理。 >+ accept:接收响应内容的序列化的格式,"MediaType.APPLICATION_JSON"表示接收JSON数据格式 >+ andExpect: 添加RequsetMatcher验证规则,验证控制器执行完成后结果是否正确,或者说是结果是否与我们期望(Expect)的一致。这里使用MockMvcResultMatchers.jsonPath来验证返回的json格式的对象是否符合期望 >+ andDo: 添加ResultHandler结果处理器,比如调试时打印结果到控制台,这里使用了print() + 当接收的Json数据与期望不一致,测试失败: ![测试失败](Pictures/8_2.png)
测试失败
>说明: MockMvc来自Spring Test模块,它可以让您通过一组便捷的构建器类将HTTP请求发送到DispatcherServlet中,并对结果进行断言。 注意,这里使用@AutoConfigureMockMvc和@SpringBootTest。 ### 9.使用IntelliJ IDEA的HTTP Client工具测试控制器端口; ![HTTP Client工具](Pictures/9_1.jpg)
HTTP Client工具
![.http脚本文件测试控制器端口](Pictures/9_2.jpg)
.http脚本文件测试控制器端口
### 10.在命令行中使用spring-boot插件运行Spring Boot应用程序,并把嵌入式Servlet容器的默认端口8080改为9090; + 原默认端口为8080: ![8080](Pictures/10_1.jpg)
+ 更改端口为9090: ![9090](Pictures/10_1.jpg)
### 11.在属性文件中配置Spring Boot应用程序以debug模式运行。 + debug参数默认是false,将其改为true: ![Debug模式](Pictures/11.jpg)
Debug模式
>说明: 在Debug模式下,Spring Boot在运行时会在终端显示更多的调式信息。 ### 12.在命令行中编译、打包Spring Boot应用程序。 ![命令行编译打包](Pictures/12.jpg)
命令行编译打包
### 13.在命令行中使用java命令运行Spring Boot应用程序的Jar文件。 ![命令行运行jar](Pictures/13.jpg)
命令行运行jar
### 14.在命令行中使用java命令运行Spring Boot应用程序的Jar文件,带参数改变嵌入式Servlet容器的默认端口8080改为9090。 + 命令行优先级更高: ![命令行带参更改端口号](Pictures/14.png)
命令行带参更改端口号
>说明: 带参数运行jar文件,可以改变很多spring boot内置的属性。 例如:改变当前激活的属性文件:spring.profiles.active。 ### 15.使用markdown标记语方编写实验报告,并生成README.md文件放在项目仓库的根目录。