iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 11
1
Modern Web

30天學習Spring MVC系列 第 11

Day 11-Spring Boot-如何載入靜態資源-使用thymeleaf模板引擎

  • 分享至 

  • xImage
  •  

這個章節比較麻煩
我們即將要往全端工程師之路邁進

本章節內容

1.加入靜態資源css,javascript
2.套用模板(我是從BootStrap Open Source Template下載的範本使用)
作者的連結(https://startbootstrap.com/template-overviews/sb-admin-2/ )
如要使用請要註解來源唷~
3.介紹thymeleaf如何導入static靜態資源
4.完成一個頁面

Pom.xml配置

目前已經使用了mysql,thymeleaf,web依賴

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.tutorial</groupId>
	<artifactId>tutorial2</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>

	<name>tutorial2</name>
	<description>Demo project for Spring Boot</description>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.9.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
<!-- 		<dependency> -->
<!-- 			<groupId>org.springframework.boot</groupId> -->
<!-- 			<artifactId>spring-boot-starter-data-jpa</artifactId> -->
<!-- 		</dependency> -->

	<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-jdbc -->
		<dependency>
    		<groupId>org.springframework.boot</groupId>
    		<artifactId>spring-boot-starter-jdbc</artifactId>
		</dependency>	
		
	<!-- https://mvnrepository.com/artifact/org.thymeleaf/thymeleaf -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-thymeleaf</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-tomcat</artifactId>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>


	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>


</project>

application.properties配置

加入static的資源路徑
spring.resources.static-locations=classpath:/static/
spring.resources.cache-period=0

spring.datasource.url=jdbc:mysql://localhost:3306/member
spring.datasource.username=妳的帳號
spring.datasource.password=你的密碼
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.http.encoding.force=true

spring.thymeleaf.prefix=classpath:/templates/
spring.resources.static-locations=classpath:/static/
spring.resources.cache-period=0

@Controller程式

更改@RestController->@Controller
@RequestMapping->@GetMapping
return "addMemberPage";

return的字串名稱thymeleaf會去底下尋找有沒有前綴檔案符合此名稱的頁面名稱

package com.tutorial.Controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

import com.tutorial.Model.MemberAccount;
import com.tutorial.Service.MemberService;

@Controller
public class MemberController {
	//透過 @RequestMapping 指定從/會被對應到此addMemberPage()方法
	@Autowired
	MemberAccount memberAccount;
	
	@Autowired
	MemberService memberService;
	@GetMapping("/addMemberPage")
    public String addMemberPage(){
//    	memberAccount = new MemberAccount();
//    	memberService.addMember(memberAccount);

        return "addMemberPage";
    }
}

我加入了SB Admin2的樣板進static目錄如下圖,紅色區塊內的檔案

https://ithelp.ithome.com.tw/upload/images/20171230/20107812NjWkvgYHOv.png

你可以試你要的css與js將靜態資源放入此目錄,Spring Boot已有定義了靜態資源的歸類,
你也可以更改此目錄,如以要更改目錄的話,可在application.properties做設定與程式中去更改路徑
範例以Spring Boot的預設配置為主,後面10天如有時間會為大家介紹Spring Boot的相關高級配置

最後建立了一個控制器return "addMemberPage";
的.html檔案,addMemberPage.html

代碼如下圖:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">

<head>

    <meta charset="utf-8"/>
    <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
    <meta name="viewport" content="width=device-width, initial-scale=1"/>
    <meta name="description" content=""/>
    <meta name="author" content=""/>

    <title>註冊會員頁面</title>

    <!-- Bootstrap Core CSS -->
    <link th:href="@{/vendor/bootstrap/css/bootstrap.min.css}" href="../vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet"/>

    <!-- MetisMenu CSS -->
    <link th:href="@{/vendor/metisMenu/metisMenu.min.css}" href="../vendor/metisMenu/metisMenu.min.css" rel="stylesheet"/>

    <!-- Custom CSS -->
    <link th:href="@{/dist/css/sb-admin-2.css}" href="../dist/css/sb-admin-2.css" rel="stylesheet"/>

    <!-- Custom Fonts -->
    <link th:href="@{/vendor/font-awesome/css/font-awesome.min.css}" href="../vendor/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css"/>



</head>

<body>

    <div id="wrapper">

        <!-- Navigation -->
        <nav class="navbar navbar-default navbar-static-top" role="navigation" style="margin-bottom: 0">
            <div class="navbar-header">
                <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
                    <span class="sr-only">Toggle navigation</span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
                <a class="navbar-brand" href="index.html">會員註冊</a>
            </div>
         </nav>
            <div id="page-wrapper">
            <div class="row">
                <div class="col-lg-12">
                    <h1 class="page-header">會員註冊</h1>
                </div>
                <!-- /.col-lg-12 -->
            </div>
            <!-- /.row -->
            <div class="row">
                <div class="col-lg-12">
                    <div class="panel panel-default">
                        <div class="panel-heading">
                         		這邊你可以放注意事項
                        </div>
                        <div class="panel-body">
                            <div class="row">
                                <div class="col-lg-6">
                                    <form role="form">
                                        <div class="form-group">
                                            <label>註冊信箱</label>
                                            <input class="form-control" placeholder="信箱長度不可大於40個字"/>
                                            <p class="help-block">這邊可以放些提示的訊息(驗證錯誤等).</p>
                                        </div>
                                        <div class="form-group">
                                            <label>會員密碼</label>
                                            <input class="form-control" placeholder="密碼長度限制6個字以上10個字以內"/>
                                        </div>
                                             
        
                                        <button type="submit" class="btn btn-default">註冊送出</button>
                                        <button type="reset" class="btn btn-default">清除表單</button>
                                    </form>
                                </div>
                            </div>
                            <!-- /.row (nested) -->
                        </div>
                        <!-- /.panel-body -->
                    </div>
                    <!-- /.panel -->
    				</div>
				</div>
				<!--col-lg-12 -->
     		</div>
		<!-- page-wrapper-->
    </div>
    <!-- /#wrapper -->

    <!-- jQuery -->
    <script th:src="@{/vendor/jquery/jquery.min.js}" src="../vendor/jquery/jquery.min.js"></script>

    <!-- Bootstrap Core JavaScript -->
    <script th:src="@{/vendor/bootstrap/js/bootstrap.min.js}" src="../vendor/bootstrap/js/bootstrap.min.js"></script>

    <!-- Metis Menu Plugin JavaScript -->
    <script th:src="@{/vendor/metisMenu/metisMenu.min.js}"  src="../vendor/metisMenu/metisMenu.min.js"></script>

    <!-- Custom Theme JavaScript -->
    <script th:src="@{/dist/js/sb-admin-2.js}" src="../dist/js/sb-admin-2.js"></script>

</body>

</html>

成功後頁面如下圖:

https://ithelp.ithome.com.tw/upload/images/20171230/20107812fXRnrlqLDg.png

thymeleaf如何引用靜態資源?

重點複習

1.html標籤要加入 xmlns:th="http://www.thymeleaf.org"
2.每個標籤都要有結束標籤不能如此標籤定義一樣<input type="text">一定要有個對應標籤</input>
3.在link標籤引用css標籤內要增加此屬性th:href="@{/vendor/bootstrap/css/bootstrap.min.css}"
4.在src標籤引用javascript內要增加此屬性
th:src="@{/vendor/bootstrap/js/bootstrap.min.js}"

要告訴thymeleaf我的資源位於哪個地方,他的定義位置在我們的application.properties內的
spring.resources.static-locations=classpath:/static/這是定義我們靜態資源的目錄位置
你可以視情況自己在修改

到這裡我們已經完成了Spring MVC框架了唷!!!!

下一章介紹
Spring Data
在考慮要使用JPA還是hibernate或MyBatis再讓我想想吧~~~

如果有需要我範本程式在考慮放上github>"<


上一篇
Day 10-Spring Boot-JDBC與資料庫連線範例-MariaDB
下一篇
Day12-Spring Boot-什麼是Spring Data JPA
系列文
30天學習Spring MVC30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
3
connor0225
iT邦新手 5 級 ‧ 2018-11-12 17:11:46

application.properties的配置
其中"spring.resources.cache-period=0"
應改為
"spring.resources.cache.period=0"

0
sa0124
iT邦新手 5 級 ‧ 2019-03-15 17:11:48

連結的範例模板換版本了歐,v3.x的才是版主的版本~
&謝謝版主 辛苦了!模板成功出來的瞬間很感動 QAQ
https://ithelp.ithome.com.tw/upload/images/20190318/201087326PqEhKLu7g.png

1
JavidHsu
iT邦新手 5 級 ‧ 2019-12-09 11:24:54
WUcheap iT邦研究生 4 級 ‧ 2022-10-17 15:19:20 檢舉

感謝樓上大大提供載點,也謝謝樓主

我要留言

立即登入留言