1.使用SpringBoot开发web步骤
1)创建SpringBoot应用,选中我们需要的模块;
2)SpringBoot已经默认将这些场景配置好了,只需要在配置文件中指定少量配置就可以运行起来
3)自己编写业务代码;
2.SpringBoot对静态资源的映射规则
2.1 所有 /webjars/** ,都去 classpath:/META-INF/resources/webjars/ 找资源;
webjars:以jar包的方式引入静态资源;
2.2 "/**" 访问当前项目的任何资源,都去(静态资源的文件夹)找映射
"classpath:/META‐INF/resources/",
"classpath:/resources/",
"classpath:/static/",
"classpath:/public/"
"/":当前项目的根路径
localhost:8080/cyy === 去静态资源文件夹里面找cyy
2.3 欢迎页; 静态资源文件夹下的所有index.html页面;被"/**"映射;
localhost:8080/ 找index页面
2.4 所有的 **/favicon.ico 都是在静态资源文件下找;
3.模板引擎
3.1 常见的模板引擎有:JSP、Velocity、Freemarker、Thymeleaf等,SpringBoot中推荐使用Thymeleaf
3.2 引入Thymeleaf
<!--引入thymeleaf模板引擎-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!--修改thyemeleaf默认版本-->
<properties>
<thymeleaf.version>3.0.9.RELEASE</thymeleaf.version>
<!--布局功能的支持程序 thymeleaf3需要 layout2版本以上-->
<thymeleaf-layout-dialect.version>2.2.2</thymeleaf-layout-dialect.version>
</properties>
3.3 Thymeleaf的使用与语法
先看看ThymeleafProperties类中的方法
@ConfigurationProperties(
prefix = "spring.thymeleaf"
)
public class ThymeleafProperties {
private static final Charset DEFAULT_ENCODING;
public static final String DEFAULT_PREFIX = "classpath:/templates/";
public static final String DEFAULT_SUFFIX = ".html";
private boolean checkTemplate = true;
private boolean checkTemplateLocation = true;
private String prefix = "classpath:/templates/";
private String suffix = ".html";
private String mode = "HTML";
private Charset encoding;
private boolean cache;
private Integer templateResolverOrder;
private String[] viewNames;
private String[] excludedViewNames;
private boolean enableSpringElCompiler;
private boolean enabled;
private final ThymeleafProperties.Servlet servlet;
private final ThymeleafProperties.Reactive reactive;
只要我们把HTML页面放在classpath:/templates/,Thymeleaf就能自动渲染;
踩的坑:
由于我Controller中注解给的是@RestController
,模板引擎不会渲染,只会返回JSON格式,后改为@Controller
,才能正常渲染。
使用:
3.3.1 导入thymeleaf的名称空间,引入后页面就会提示thymeleaf语法
<html lang="en" xmlns:th="http://www.thymeleaf.org">
3.3.2 使用thymeleaf语法
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF‐8">
<title>Success</title>
</head>
<body>
<h1>成功!</h1>
<!‐‐th:text 将div里面的文本内容设置为‐‐>
<div th:text="${hello}">这是显示欢迎信息</div>
</body>
</html>
3.3.3 语法规则
1) th:text; 改变当前元素里面的文本内容;
th:任意的html属性,来替换原生属性的值
2) 表达式
Simple expressions:(表达式语法)
Variable Expressions: ${...}:获取变量值;OGNL;
1)获取对象的属性、调用方法
2)使用内置的基本对象:
#ctx : the context object.
#vars: the context variables.
#locale : the context locale.
#request : (only in Web Contexts) the HttpServletRequest object.
#response : (only in Web Contexts) the HttpServletResponse object.
#session : (only in Web Contexts) the HttpSession object.
#servletContext : (only in Web Contexts) the ServletContext object.
例:${session.foo}
3)内置的一些工具对象:
#execInfo : information about the template being processed.
#messages : methods for obtaining externalized messages inside variables expressions,in the
same way as they would be obtained using #{…} syntax.
#uris : methods for escaping parts of URLs/URIs
#conversions : methods for executing the configured conversion service (if any).
#dates : methods for java.util.Date objects: formatting, component extraction,etc.
#calendars : analogous to #dates ,but for java.util.Calendar objects.
#numbers:methods for formatting numeric objects.
#strings:methods for String objects: contains,startsWith,prepending/appending,etc.
#objects:methods for objectsin general.
#bools: methods for boolean evaluation.
#arrays:methods for arrays.
#lists:methods for lists.
#sets:methods for sets.
#maps:methods for maps.
#aggregates : methods for creating aggregates on arrays or collections.
#ids:methods for dealing with id attributes that might be repeated (for example,as a
result of an iteration).
Selection Variable Expressions: *{...}:选择表达式:和${}在功能上是一样;
补充:配合 th:object="${session.user}:
<div th:object="${session.user}">
<p>Name:<span th:text="*{firstName}">Sebastian</span>.</p>
<p>Surname: <span th:text="*{lastName}">Pepper</span>.</p>
<p>Nationality:<span th:text="*{nationality}">Saturn</span>.</p>
</div>
Message Expressions: #{...}:获取国际化内容
Link URL Expressions: @{...}:定义URL;
@{/order/process(execId=${execId},execType='FAST')}
Fragment Expressions:~{...}:片段引用表达式
<div th:insert="~{commons :: main}">...</div>
Literals(字面量)
Text literals: 'one text','Another one!',…
Number literals: 0,34,3.0,12.3,…
Boolean literals: true,false
Null literal: null
Literal tokens:one,sometext,main,…
Text operations:(文本操作)
String concatenation: +
Literal substitutions: |The name is ${name}|
Arithmetic operations:(数学运算)
Binary operators: + , ‐ , * , / , %
Minus sign (unary operator): ‐
Boolean operations:(布尔运算)
Binary operators: and , or
Boolean negation (unary operator): ! , not
Comparisons and equality:(比较运算)
Comparators: > , < , >= , <= ( gt , lt , ge , le )
Equality operators: == , != ( eq , ne )
Conditional operators:条件运算(三元运算符)
If‐then: (if) ? (then)
If‐then‐else: (if) ? (then) : (else)
Default: (value) ?: (defaultvalue)
Special tokens:
No‐Operation: _
3)实战
package com.cyy.springboot_web.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import java.util.Arrays;
import java.util.Map;
/**
* @Author cyy
* @Date 2018/8/10 17:54
* @Version 1.0
* @Blog http://pccwcyy.club/wordpress/
**/
@Controller
public class HelloController {
@GetMapping("/hello")
public String hello(){
return "hello";
}
@GetMapping("/success")
public String success(Map<String, Object> map) {
map.put("hello","<h1>你好</h1>");
map.put("users", Arrays.asList("ccc","ddd","eee"));
//模板引擎会自动搜索页面 classpath:/templates/success.html
return "success";
}
}
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Success</title>
</head>
<body>
登录成功!
<div id="div01" class="myDic" th:text="${hello}">这里是不加载引擎模板时候的显示内容</div>
<hr/>
<div th:text="${hello}"></div>
<div th:utext="${hello}"></div>
<hr/>
<h4 th:text="${user}" th:each="user:${users}"></h4>
<hr/>
<h4>
<span th:each="user:${users}">[[${user}]]</span>
</h4>
</body>
</html>
![演示Demo](http://pccwcyy.club/wordpress/wp-content/uploads/2018/08/T48DFX5KAKB9855FXHYGS.png)
演示Demo