Spring Boot的web之旅
Posted 来福啊
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Boot的web之旅相关的知识,希望对你有一定的参考价值。
1.创建web项目首先加入web依赖
<!--web依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
2.添加webFlux依赖(这我暂时还没搞清楚,加了再说)
<!-- webflux是个新东西,要专门学习,先放在这里用着 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId> </dependency>
3.使用热部署
<!-- 热部署 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency>
4.配置文件
#配置端口号,默认8080 server.port=8888 #配置自定义属性 因为中文会乱码,所以采用Unicode编码形式 #实战之旅 book.name=spring boot2u5b9eu6218u4e4bu65c5 #杨洋 book.author=u6768u6D0B #配置使用随机数 #随机字符串 book.value=${random.value} #随机int值 book.intValue=${random.int} #随机long值 book.longValue=${random.long} #随机uuid book.uuid=${random.uuid} #1000以内的随机数 book.randomNumber=${random.int(1000)} #自定义属性间引用 #书名是 book.title=u4e66u540du662f:${book.name}
5.创建controller
//相当于@Controller和@ResponseBody之和 @RestController public class TestController { //通过@Value("${属性名}")读取配置文件 @Value("${book.name}") private String bookName; @Value("${book.author}") private String bookAuthor; //相当于@RequestMapping(method=RequestMethod.GET) @GetMapping("test1") public String test1() { return "本书书名是"+bookName+",本书作者是"+bookAuthor; } }
本书书名是Spring Boot2实战之旅,本书作者是杨洋
上面有一个缺点是当属性多了的时候,使用@Value("${属性名}")会比较麻烦,可以创建一个JavaBean来封装这些属性,比如:
//由于自定义属性都以book为前缀 //还需要在启动类上加上@EnableConfigurationProperties(BookConfigBean.class)启动这个配置类 @ConfigurationProperties(prefix = "book") public class BookConfigBean { private String name; private String author; private String value; private int intValue; private long longValue; private String uuid; private int randomNumber; private String title; //setter getter }
给controller添加一个方法:
@Autowired private BookConfigBean bookConfigBean; @GetMapping("test2") public BookConfigBean test2() { return bookConfigBean; }
结果:
{"name":"spring boot2实战之旅","author":"杨洋","value":"44a5b03e2dcdd7a8e428cc8149b22197","intValue":-1288322961,"longValue":-7180575194781037483,"uuid":"44d75104-4b67-4844-ad40-910cf2719b58","randomNumber":993,"title":"书名是:spring boot2实战之旅"}
刚刚返回的这个对象就包括这个对象的所有属性。
还有一种方法不需要需要在启动类上加上@EnableConfigurationProperties(BookConfigBean.class)启动这个配置类,例如:
@Component @PropertySource(value="classpath:test.properties") @ConfigurationProperties(prefix = "com.book") public class ConfigBean { private String name; private String author; //setter getter }
在JavaBean上加上@Component,@PropertySource(value="classpath:对应的配置文件名")就行了(不写就是默认配置文件,所以第二种方法其实不在启动类上加上@EnableConfigurationProperties(BookConfigBean.class),直接在BookConfigBean类上加上@Component也可以,测试也成功),再写一个controller:
@Autowired private ConfigBean configBean; @GetMapping("test3") public ConfigBean test3() { return configBean; }
{"name":"Spring Boot2实战之旅bbb","author":"杨洋"}
多环境配置
application-dev.properties:开发环境
application-test.properties:测试环境
application-prod.properties:生产环境
在application.properties里设置使用哪个环境:例如spring.profiles.active=test使用测试环境
使用页面模板
1.使用Thymeleaf模板
1.1 引入相关依赖
<!-- thymeleaf --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <!-- 去除html严格校验 --> <dependency> <groupId>net.sourceforge.nekohtml</groupId> <artifactId>nekohtml</artifactId> <version>1.9.22</version> </dependency>
#是否开启缓存,开发时建议关闭,否则更改页面后不会实时展示效果 spring.thymeleaf.cache=false #编码格式 spring.thymeleaf.encoding=UTF-8 #用这个去除thymeleaf严格校验 spring.thymeleaf.mode=LEGACYHTML5 #前缀 spring.thymeleaf.prefix=classpath:/static/ #后缀 spring.thymeleaf.suffix=.html
@Controller public class IndexController { @GetMapping("/") public String index(ModelMap modelMap) { modelMap.addAttribute("msg","hello dalaoyang"); return "index"; } }
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.w3.org/1999/xhtml"> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <h1 th:text="${msg}"></h1> </body> </html>
th:text=””这个是thymeleaf前后端交互的格式,后面再讲。
2.使用FreeMarker模板
2.1 引入依赖
<!-- FreeMarker--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency>
#是否开启缓存,开发时建议关闭,否则更改页面后不会实时展示效果 spring.freemarker.cache=false #编码格式 spring.freemarker.charset=UTF-8 #前缀 spring.freemarker.template-load-path=classpath:/static/ #后缀 spring.freemarker.suffix=.ftl
2.3 写个controller
@Controller public class IndexController { @GetMapping("/") public String index(ModelMap modelMap) { modelMap.addAttribute("msg","hello dalaoyang"); return "index"; } }
<!DOCTYPE html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <h1>${msg}></h1> </body> </html>
这里相比于ThymeLeaf少了一行。应该是thymeleaf要配置th这些东西,而FreeMarker不需要。
3.使用传统jsp
不推荐使用,日后再说。
以上是关于Spring Boot的web之旅的主要内容,如果未能解决你的问题,请参考以下文章