Freemarker專案創建與語法
- springboot-freemarker 專案創建步驟
- 創建專案
- 配置依賴
- 構建專案結構
- 配置啟動類
- 配置請求資源
- 啟動專案
- 基本語法
- index.ftl
- User.java
- LogController.java
springboot-freemarker 專案創建步驟
什么是freemarker
- 適用范圍
- 小型專案:前端和后臺代碼放在一起,或者進而小10幾萬的專案
創建專案
-
如果是 作業空間專案 新建,則選中 作業空間專案 右擊新建 Module
-
如果是 新專案 新建,則選擇 File 選項選單新建 Project
作業空間專案 就是 新建 maven的webapp專案,然后以創建的專案為父專案新建子專案
下面開始正式步驟,需聯網
- 選擇 maven 選單,選擇 Module SDK 為本地版本,勾選 Create from archetype ,構建 webapp 專案,具體如下圖所示

- 輸入 專案名 與 專案包結構(均可自定義)
- 專案名:com.demo.springboot-freemarker
- 專案名稱:springboot-freemarker

- 配置 本地maven 配置資訊

-
Next 之后
-
com.demo.springboot-freemarker
- 記得給專案專案名加上 -

-
com.demo.springboot_freemarker
- 則不用
-
-
最后點擊 Finish 即可
請等一下!等待maven工程的框架資源與依萊澩下載完成后在操作
還在下載標志:右下角有進度潭訓路徑字符變換
完成后進行如下操作
配置依賴
- 替換原生 pom.xml 中為下列 與
<!--省略前段多余配置-->
<dependencies>
<!--web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.4.1</version>
</dependency>
<!--freemarker 模塊引擎-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
<version>2.4.1</version>
</dependency>
<!--springboot熱部署:自動匯入,須在debug模式下生效 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<version>2.4.1</version>
</dependency>
</dependencies>
<build>
<resources>
<!--webappp 默認是不被決議的,該配置是為 指定資源-->
<resource>
<!--需要被編譯的檔案夾-->
<directory>src/main/webapp</directory>
<!--編譯之后的路徑-->
<targetPath>META-INF/resources</targetPath>
<!--任意檔案夾下的檔案-->
<includes>
<include>**/**</include>
</includes>
</resource>
</resources>
</build>
<!--省略后段多余配置-->
- ctrl +s保存后,右下角會變綠, 點擊匯入 maven 配置,操作如下
構建專案結構
-
右擊 main 目錄 新建 java、resources
-

-
每個目錄的含義
- java 放原始碼
- resources 放組態檔
- webapp 放網頁資源
-
-
右擊剛剛創建的檔案夾,每個選中右擊標記 目錄 剛剛新建的 java、resources

分別標記為 Sources Root、Resources Root

-
注意若像如上所示
-
webapp沒有藍色小點
-
解決步驟
-
選擇 FIle 的 Project Structure
-
選擇 Modules 選單,選中 當前專案,點擊上方 + 添加 Web
-
-

-
雙擊兩次OK后,在點擊 Apply 》 OK 即可
-
-
-
最終專案結構如圖

配置啟動類
- 首先在 java 目錄下創建 SpringBootFreemarkerApplication.java
package com.demo.springbootfreemarker;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @SpringBootApplication
*
* 代替 SpringMVC Spring 中的
* 核心組態檔(@Configuration),掃描儀(@ComponentScan)
*
* 注解括號內沒有寫掃描的包路徑, 所以自動掃描當前類所在包(com.demo.springbootfreemarker)的下面的所有類
*
*/
@SpringBootApplication
public class SpringBootFreemarkerApplication {
public static void main(String[] args) {
// 注意 run的是當前這個 加了 @SpringBootApplication 注釋的類
SpringApplication.run(SpringBootFreemarkerApplication.class,args);
}
}
- 然后在 resources 下新建 application.yml
#埠號的配置 server
server:
port: 9091
# classpath 一般是訪問resources下面才使用,默認 classpath:/templaters
# springboot 整合 freemarker
# 代替原來 jsp 頁面
spring:
freemarker:
template-loader-path: /templaters/
suffix: .ftl
-
若 出現 application.yml 檔案未標識成這樣
-

-
解決方法
- 初步排錯
- 典型案例
-
-
最后在 webapp 目錄下,創建 templater 目錄,再使用 freemarker 模板創建 freemarker模板的 index.ftl 檔案
-
配置freemarker模板
-

-

-
輸入完后,滑鼠選擇此塊,上滑找到 HTML File,選中右邊復制 所有代碼

-
然后 找到剛剛創建的 free marker模板 粘貼代碼 點擊 apply ok即可

-
-
創建步驟和效果
-
右擊 新建 下滑 找到剛剛創建的模板 freemarker ,點擊

-
新建一個名為 index 的freemarker模板檔案

-
-
配置請求資源
-
在 與 SpringbootFreemarkerApplication.java 同級目錄 com.demo.springbootfreemarker 下創建 controller.LogController.java
-
給 controller 類添加注解 @controller 是否有圖示,沒有則代表沒被掃描到(類的旁邊)
-

-
創建 通用 首頁訪問請求資源
-
LogController.java
package com.demo.springbootfreemarker.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class LogControlller { // 通用 視圖資源 訪問請求 @RequestMapping("/{path}.html") public String path(@PathVariable String path){ return path;// 回傳值,與jsp相同-只回傳視圖名稱 } }
-
-
啟動專案
-
配置 springboot
-

-

-

-

-

-
忘記前面洗掉 Web 了停止當前運行后,現在洗掉 Web 目錄與target 目錄,debug 在啟動運行
-
最后修改 啟動時默認加載首頁
-

-
啟動路徑
- 點擊默認啟動

-
-
基本語法
index.ftl
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>首頁</title>
</head>
<body>
<h1>普通取值</h1>
<p>${value}</p>
<h1>boolean型別</h1>
<p>${flag?string("true","false")}</p>
<h1>封裝物件</h1>
<p>${user.userName}</p>
<h1>時間型別</h1>
<p>${date?string("yyyy-MM-dd")}</p>
<h1>HTML轉譯</h1>
<p>${htmlStr?html}</p>
<h1>定義變數</h1>
<p><#assign num = 10/>${num * 10} = 100</p>
<h1>list集合取值</h1>
<p>
<#list userList as item>
${item}
</#list>
</p>
<h1>對Map集合取值</h1>
<p>
<#list userMap?keys as key>
${key}:${userMap[key]}
</#list>
</p>
<h1>if-else判斷</h1>
<p>
<#if ifelse == 1>
如果 if 1
<#else>
輸出 else 2
</#if>
</p>
<h1>if-else-if級聯判斷</h1>
<p>
<#if ifelseif == 1>
輸出 if 2
<#elseif ifelseif == 2>
輸出 ifelse 1
<#elseif ifelseif == 3>
輸出 ifelse 2
<#else>
輸出 else 2
</#if>
</p>
<h1>switch陳述句</h1>
<p>
<#switch switch>
<#case 1>
輸出 case1
<#break>
<#case 2>
輸出 case2
<#break>
<#default>
輸出 default
</#switch>
</p>
</body>
</html>
User.java
package com.t49.springboot.pojo;
public class User {
private int id;
private String userName;
private String password;
public User() {
}
public User(int id, String userName, String password) {
this.id = id;
this.userName = userName;
this.password = password;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", userName='" + userName + '\'' +
", password='" + password + '\'' +
'}';
}
}
LogController.java
package com.t49.springboot.controller;
import com.t49.springboot.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import java.util.*;
@Controller
public class LogController {
// 直接進入頁面
// 單純進入頁面 html
// 否則呼叫后臺,訪問service不加html區分
@RequestMapping("/{path}.html")
public ModelAndView path(@PathVariable String path){
ModelAndView modelAndView = new ModelAndView();
// 普通取值
modelAndView.addObject("value","測驗");
// boolean型別
modelAndView.addObject("flag",true);
// 封裝物件
modelAndView.addObject("user",new User(1,"張三","123"));
// 時間型別
modelAndView.addObject("date",new Date());
// 封裝物件
modelAndView.addObject("htmlStr","<a href='http://www.baidu.com'>點擊訪問百度</a>");
// 定義變數(請前往網頁查看)
// list集合取值
List<User> userList = new ArrayList<>();
userList.add(new User(1,"張三","123"));
userList.add(new User(2,"李四","123"));
userList.add(new User(3,"王二","123"));
modelAndView.addObject("userList",userList);
// 對Map集合取值
Map<String,User> userMap = new HashMap<>();
userMap.put("user1",new User(1,"張三","123"));
userMap.put("user2",new User(2,"李四","123"));
userMap.put("user3",new User(3,"王二","123"));
modelAndView.addObject("userMap",userMap);
// if-else判斷
modelAndView.addObject("ifelse",1);
// if-else-if級聯判斷
modelAndView.addObject("ifelseif",1);
// switch陳述句
modelAndView.addObject("switch",1);
modelAndView.setViewName(path);
return modelAndView;// 回傳值,與jsp相同-只回傳視圖名稱
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/265902.html
標籤:java
上一篇:用java實作猜字母案例





