SpringBoot--Web篇<一>

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
演示Demo
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,026评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,655评论 1 296
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,726评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,204评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,558评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,731评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,944评论 2 314
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,698评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,438评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,633评论 2 247
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,125评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,444评论 3 255
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,137评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,103评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,888评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,772评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,669评论 2 271

推荐阅读更多精彩内容

  • 一、Spring Boot 入门 1、Spring Boot 简介 简化Spring应用开发的一个框架;整个Spr...
    Y了个J阅读 6,638评论 1 6
  • SpringMVC原理分析 Spring Boot学习 5、Hello World探究 1、POM文件 1、父项目...
    jack_jerry阅读 1,203评论 0 1
  • 前言:前面说的框架,其实SpringBoot底层已经帮我们配好了,我们直接拿来用就好了,了解就好了。Web才是我们...
    __y阅读 526评论 0 1
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,103评论 18 139
  • SpringBoot静态资源的访问 在我们开发Web应用的时候,会用到大量的js、css、image、html等静...
    lavor阅读 47,234评论 0 11