springboot
1.定义父模块micro,在该pom中引入依赖包:以依赖引用的形式进行SpringBoot依赖库的配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <properties> <spring-boot.version> 2.1 . 6 .RELEASE</spring-boot.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring-boot.version}</version> <type>pom</type> <scope> import </scope> </dependency> </dependencies> </dependencyManagement> |
2.【micro-base】定义一个基本的 SpringBoot项目模块: micro-base,并修改子pom文件
1 2 3 4 | <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> |
3.【micro-base】在src/main/com.yootk.action编写action类,方法以及使用注释
● @ResponseBody:标记在控制层方法上面,如果方法返回值类型为String则使用此注解
● @RestController:标记在控制类上面,如果使用Rest风格(Json)返回数据信息则使用此注解
4.【micro-base】在com.yootk包中创建程序启动主类
1 2 3 4 5 6 7 8 9 10 | package com.yootk; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class StartBootMain { public static void main(String[] args) { SpringApplication.run(StartBootMain. class ,args); } } |
● 注:@SpringBootApplication注解=@EnableAutoConfiguration + @ComponentScan("com.yootk")
5.说明:经过长期的 Spring开发,很多的开发者发现都必须在 Spring里面设置明确的扫描路径才可以正常使用 SpringMVC开发框
架,于是在 SpringBoot里面,为了简化这一概念,明确的使用了一个子包的形式。
即com.yootk.StartBootMain启动主类要比控制层的包com.yootk.action和配置类的包com.yootk.config同级或更高。
6.【micro-base】在 SpringBoot里面执行,实际上也可以加载一些自定义的 spring配置文件,那么这些配置文件就需要在启动
类编写的时候使用“@Import”注解导入(此注解主要面试的时候用,因为SpringBoot中追求的是零配置即不要编写任何的xml配置文件);
1 | @Import ( "classpath:spring/spring-xx.xml" ) |
7.SpringBoot程序测试:
●【micro-base】修改pom配置文件,引入测试相关的依赖库
1 2 3 4 5 6 7 8 9 10 | <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> |
● 编写测试程序类:需要在测试类头上写下面三个注解
● @RunWith(SpringJUnit4ClassRunner.class)
● @WebAppConfiguration//表示需要启动web配置才可以进行测试
● @SpringBootTest(classes = StartBootMain.class) //定义要测试的启动类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | package com.yootk.test; import com.yootk.StartBootMain; import com.yootk.action.MessageAction; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.web.WebAppConfiguration; @RunWith (SpringJUnit4ClassRunner. class ) @WebAppConfiguration //表示需要启动web配置才可以进行测试 @SpringBootTest (classes = StartBootMain. class ) //定义要测试的启动类 public class TestMessageAction { @Autowired private MessageAction messageAction; @Test public void testEcho(){ System.err.println(messageAction.echo()); } } |
8.控制层参数传递的两种方式:
● 地址重写的方式(推荐): @RequestMapping("/") public String echo(String msg){...} 执行路径:http://localhost:8080?msg=hello
● 基于Rest风格进行参数的传递:@RequestMapping("/{message}") public String echo(@PathVariable("message") String msg){...} 执行路径:http://localhost:8080/hello就意思是赋的参数值为hello
9.在 SpringBoot里面支持的配置文件有两种风格:“ *.properties”、“*.yml”。在springBoot中*.properties配置文件比*.yml配置文件优先级高,如果两个同时写,springBoot会以*.properties为准,开发的时候推荐使用*.yml风格。在src/main/resources/文件夹写创建application.yml配置文件
1 2 3 4 | #值前面要加一个空格,下面 8081 和/message前面都有一个空格server: port: 8081 #接口 servlet: context-path: /test #访问路径 |
10.配置资源文件:在src/main/resources/下创建一个i18n文件夹,所有需要读取的资源文件都写在此文件夹下(该文件夹下一共有三个文件,Message.properties,Message_en_US.properties,Message_zh_CN.properties)
11.模板渲染:在以后的项目中将不再出现jsp文件,因为jsp文件属于java文件,要实现前后端分离所以不再写jsp文件,直接使用html文件,如果需要动态页面的支持,则需要使用thymeleaf模板语法。
● thymeleaf模板语法依赖包:
1 2 3 4 | <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> |
● 【micro-base】建立一个action,这个action类不进行任何的数据输出,只是将数据传递到View层
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | package com.yootk.action; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.MessageSource; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import java.util.Locale; @Controller public class MessageAction { @Autowired private MessageSource messageSource; @RequestMapping ( "/info" ) public String info(Model model) { // 此时表示跳转 String enMsg = this .messageSource.getMessage( "welcome.info" , new Object[]{}, Locale.US); ; //读取英文资源文件 String zhMsg = this .messageSource.getMessage( "welcome.info" , new Object[]{}, Locale.getDefault()); ; //读取中文资源文件 model.addAttribute( "zh" ,zhMsg) ; model.addAttribute( "en" ,enMsg) ; return "message/message_show" ; //此文件的完整路径为src/main/view/templates/message/message_show.html:不需要写前缀和后缀 } } |
● 注意:所有的 thymeleaf语法默认所有的html文件都要求保存在“src/main/view/templates”父目录之中;
● message_show.html文件:
1 2 3 4 5 6 7 8 9 10 11 | <!DOCTYPE html> <html xmlns:th= "http://www.thymeleaf.org" ><!--要想使用thymeleaf语法,必须导入此包--> <head> <meta charset= "UTF-8" > <title>SpringBoot模版渲染</title> </head> <body> <h1 th:text= "'中文信息:' + ${zh}" ></h1> <h1 th:text= "'英文信息:' + ${en}" ></h1> </body> </html> |
12.配置错误页
●【micro-base】所有的错误页实际上都属于静态页面,所有的静态资源文件(例如:图片,css,js文件等)都放在src/main/view/static文件夹下,这次创建两个错误页文件,分别为error-404.html,error-500.html
●【micro-base】如果现在希望SpringBoot可以认可这些错误页,就需要创建一个配置类,一定要在启动类的子包中创建,这次在src/main/java/com.yootk.config/文件夹下创建配置类ErrorPageConfig.java。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | package com.yootk.config; import org.springframework.boot.web.server.ErrorPage; import org.springframework.boot.web.server.ErrorPageRegistrar; import org.springframework.boot.web.server.ErrorPageRegistry; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.HttpStatus; @Configuration // Bean配置注解 public class ErrorPageConfig { @Bean public ErrorPageRegistrar getErrorPageRegister() { return new ErrorPageRegistrar() { @Override public void registerErrorPages(ErrorPageRegistry registry) { ErrorPage errorPage404 = new ErrorPage(HttpStatus.NOT_FOUND, "/error-404.html" ) ; ErrorPage errorPage500 = new ErrorPage(HttpStatus.NOT_FOUND, "/error-500.html" ) ; registry.addErrorPages(errorPage404,errorPage500); } } ; } } |
13.全局异常
●【micro-base】在src/main/view/templates目录下创建一个plugins/error-page.html页面,主要功能是显示异常产生的路径以及具体的异常信息。
1 2 | <h1 th:text= "'异常产生路径:'+${url}" ></h1> <h1 th:text= "'异常信息:'+${exception}" ></h1> |
●【micro-base】 创建全局异常的配置程序类src/main/java/com.yootk.config.GlobalExceptionHandler.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | package com.yootk.config; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import java.util.HashMap; import java.util.Map; @RestControllerAdvice // 使用Rest风格就表示返回的数据类型为JSON public class GlobalExceptionHandler { public static final String DEFAULT_ERROR_PAGE= "plugins/error-page" ; //没有后缀 @ExceptionHandler (Exception. class ) // 编写可以处理的异常 public ModelAndView defaultErrorHandler(HttpServletRequest request,Exception e) { ModelAndView mav= new ModelandView(DEFAULT_ERROR_PAGE); mav.addObject( "url" ,request.getRequestUrl()); //错误路径 mav.addObject("exception",e); return result ; } } |
● 当代码出现异常时就会往此全局异常页跳转,如:1/0
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ThreeJs-16智慧城市项目(重磅以及未来发展ai)
· .NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想
· Ai满嘴顺口溜,想考研?浪费我几个小时
· Browser-use 详细介绍&使用文档
· 软件产品开发中常见的10个问题及处理方法