SpringBoot基礎(靜態資源導入)

靜態資源導入

在WebMvcAutoConfiguration自動配置類中

有一個添加資源的方法:

public void addResourceHandlers(ResourceHandlerRegistry registry) {
//如果靜態資源已經被自定義了,則直接生效if (!this.resourceProperties.isAddMappings()) {logger.debug("Default resource handling disabled");} else {
//注冊一個/webjars/**,添加靜態資源到該路徑下this.addResourceHandler(registry, "/webjars/**", "classpath:/META-INF/resources/webjars/");
//獲得靜態資源的路徑this.addResourceHandler(registry, this.mvcProperties.getStaticPathPattern(), (registration) -> {registration.addResourceLocations(this.resourceProperties.getStaticLocations());if (this.servletContext != null) {ServletContextResource resource = new ServletContextResource(this.servletContext, "/");registration.addResourceLocations(new Resource[]{resource});}});}}

自定義靜態資源:就是找到WebMvcProperties內部關于靜態資源的配置,然后在配置文件中配置即可。

?webjars引入jquery

<dependency>
??? <groupId>org.webjars</groupId>
??? <artifactId>jquery</artifactId>
??? <version>3.4.1</version>
</dependency>

導入依賴后即可訪問webjars下的信息。

靜態資源路徑:

public static class Resources {private static final String[] CLASSPATH_RESOURCE_LOCATIONS = new String[]{"classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/"};

綜上:有4個路徑下的靜態資源可被訪問。public為1,resources為2,static為3

訪問結果:?

說明resources優先級最高。

刪掉resources。

?總結:優先級為:resources>static>public

常用于:public為公共資源(都會訪問的頁面),static為靜態資源,如圖片等,resources放上傳的文件。

首頁定制

WebMvcAutoConfiguration中找到首頁相關的配置。

getWelcomePage()方法中找到自定義的路徑。

String[] var1 = this.resourceProperties.getStaticLocations();

也可以通過靜態資源目錄找index.html的文件

return this.getIndexHtml(this.resourceLoader.getResource(location));

Resource resource = location.createRelative("index.html");

所以可以在靜態資源目錄下添加一個index.html文件。

注意:templates非靜態資源目錄,該目錄下的頁面只能通過controller來跳轉。并且需要模板引擎的支持(需要導入thymeleaf依賴)。

模板引擎

SpringBoot使用的是嵌入式的Tomcat,不支持jsp頁面,需要用html,然后用模板引擎來渲染前端。

模板引擎的作用:處理前端一些動態的值。

導入依賴:

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

在templates下寫前端頁面:

在controller中編寫:

測試:

使用Thymeleaf時,在html上導入約束。

<html?lang="en"?xmlns:th="http://www.thymeleaf.org">

Thymeleaf 模板引擎支持多種表達式:

  • 變量表達式:${...}
  • 選擇變量表達式:*{...}
  • 鏈接表達式:@{...}
  • 國際化表達式:#{...}
  • 片段引用表達式:~{...}

測試:

th:each使用

遍歷,支持 Iterable、Map、數組等

在controller中編寫一個集合傳遞給前端:

前端通過th:eath來遍歷數組:

測試:

整合Mybatis框架

SpringBoot整合Mybatis框架需要一個整合包:mybatis-spring-boot-starter。項目創建成功后,需要引入該依賴。

<dependency>
? ? <groupId>org.mybatis.spring.boot</groupId>
? ? <artifactId>mybatis-spring-boot-starter</artifactId>
? ? <version>2.2.2</version>
</dependency>

在創建SpringBooot項目時,需要勾選:

在properties文件中配置數據庫信息進行連接:此處連接的是mybatis數據庫。

#整合mybatis
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
#配置數據源
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

在測試類中注入DataSource,進行數據庫連接成功測試:

測試時,無錯誤提示即連接成功

編寫實體類:事先導入lombok依賴節省時間。

編寫mapper實現類:

/*該注解表示這是一個mapper類,也可在啟動類上添加@MapperScan("com.example.mapper")
* 表示掃描該包下的所有接口
* @Repository,該類被Spring整合,接口類dao統一用該注解*/
@Mapper
@Repository
public interface UserMapper {List<User> queryUserList();User queryUserById(int id);
}

編寫mapper.xml文件:頭文件可從MyBatis中文文檔中找入門_MyBatis中文網

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.UserMapper"><select id="queryUserList" resultType="User">select * from user </select><select id="queryUserById" resultType="User">select * from user where id=#{id}</select>
</mapper>

在properties中整合mybatis:

#整合Mybatis
#設置別名
mybatis.type-aliases-package=com.example.springboot02mybatis.pojo
#設置mapper的地址
mybatis.mapper-locations=classpath:mybatis/mapper/*.xml

編寫Controller類:

@RestController
public class UserControlller {@Autowiredprivate UserMapper userMapper;@GetMapping("/queryUserList")public List<User> queryUserList(){List<User> users = userMapper.queryUserList();for (User user : users) {System.out.println(user);}return users;}
}

注意:所有路徑都需要對應上,不可出錯

進行測試,可正常輸出user列表信息:

編寫通過id查詢用戶:

 @GetMapping("/queryUserById")public String queryUserById(){User user = userMapper.queryUserById(3);System.out.println(user);return "ok";}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/81263.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/81263.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/81263.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于OpenCV的人臉識別:LBPH算法

文章目錄 引言一、概述二、代碼實現1. 代碼整體結構2. 導入庫解析3. 訓練數據準備4. 標簽系統5. 待識別圖像加載6. LBPH識別器創建7. 模型訓練8. 預測執行9. 結果輸出 三、 LBPH算法原理解析四、關鍵點解析五、改進方向總結 引言 人臉識別是計算機視覺領域的一個重要應用&…

ElasticSearch重啟之后shard未分配問題的解決

以下是Elasticsearch重啟后分片未分配問題的完整解決方案&#xff0c;結合典型故障場景與最新實踐&#xff1a; 一、快速診斷定位 ?檢查集群狀態 GET /_cluster/health?pretty # status為red/yellow時需關注unassigned_shards字段值 ? 2.查看未分配分片詳情 …

CSS- 3.1 盒子模型-塊級元素、行內元素、行內塊級元素和display屬性

本系列可作為前端學習系列的筆記&#xff0c;代碼的運行環境是在HBuilder中&#xff0c;小編會將代碼復制下來&#xff0c;大家復制下來就可以練習了&#xff0c;方便大家學習。 HTML系列文章 已經收錄在前端專欄&#xff0c;有需要的寶寶們可以點擊前端專欄查看&#xff01; 點…

Git/GitLab日常使用的命令指南來了!

在 GitLab 中拉取并合并代碼的常見流程是通過 Git 命令來完成的。以下是一個標準的 Git 工作流&#xff0c;適用于從遠程倉庫&#xff08;如 GitLab&#xff09;拉取代碼、切換分支、合并更新等操作。 &#x1f310; 一、基礎命令&#xff1a;拉取最新代碼 # 拉取遠程倉庫的所…

HTML 表格與div深度解析區別及常見誤區

一、HTML<div>元素詳解 <div>是HTML中最基本的塊級容器元素&#xff0c;本身沒有語義&#xff0c;主要用于組織和布局頁面內容。以下是其核心用法&#xff1a; 1. 基礎結構與特性 <div><!-內部可包含任意HTML元素 --><h2>標題</h2><p…

mybatisPlus 新增時 其他字段的值和 id 保持一致實現方法

MyBatis-Plus 實現 sp_id_path 與 id 同步的方案 要實現新增時 sp_id_path 自動與 id 保持一致&#xff0c;需要在實體類和插入邏輯中做相應處理。MyBatis-Plus 提供了幾種方式來實現這一需求&#xff1a; 方案一&#xff1a;使用 MyBatis-Plus 的自動填充功能 這是最優雅的…

蘭亭妙微設計:為生命科技賦予人性化的交互語言

在醫療科技日新月異的今天&#xff0c;卓越的硬件性能唯有匹配恰如其分的交互語言&#xff0c;方能真正發揮價值。作為專注于醫療UI/UX設計的專業團隊&#xff0c;蘭亭妙微設計&#xff08;www.lanlanwork.com&#xff09;始終相信&#xff1a;每一處像素的排布&#xff0c;都應…

Tcping詳細使用教程

Tcping詳細使用教程 下載地址 https://download.elifulkerson.com/files/tcping/0.39/在windows環境下安裝tcping 在以上的下載地中找到exe可執行文件&#xff0c;其中tcping.exe適用于32位Windows系統&#xff0c;tcping64.exe適用于64位Windows操作系統。 其實tcping是個…

springCloud/Alibaba常用中間件之Seata分布式事務

文章目錄 SpringCloud Alibaba:依賴版本補充Seata處理分布式事務(AT模式)AT模式介紹核心組件介紹AT的工作流程&#xff1a;兩階段提交&#xff08;**2PC**&#xff09; Seata-AT模式使用Seata(2.0.0)下載、配置和啟動Seata案例實戰前置代碼添加全局注解 GlobalTransactional Sp…

COMSOL隨機參數化表面流體流動模擬

基于粗糙度表面的裂隙流研究對于理解地下水的流動、污染物傳輸以及與之相關的地質災害&#xff08;如滑坡&#xff09;等方面具有重要意義。本研究通過蒙特卡洛方法生成隨機表面形貌&#xff0c;并利用COMSOL Multiphysics對隨機參數化表面的微尺度流體流動進行模擬。 參數化…

初識——QT

QT安裝方法 一、項目創建流程 創建項目 入口&#xff1a;通過Qt Creator的歡迎頁面或菜單欄&#xff08;文件→新建項目&#xff09;創建新項目。 項目類型&#xff1a;選擇「Qt Widgets Application」。 路徑要求&#xff1a;項目路徑需為純英文且不含特殊字符。 構建系統…

7-15 計算圓周率

π?131?352!?3573!??357?(2n1)n!?? 輸入格式&#xff1a; 輸入在一行中給出小于1的閾值。 輸出格式&#xff1a; 在一行中輸出滿足閾值條件的近似圓周率&#xff0c;輸出到小數點后6位。 輸入樣例&#xff1a; 0.01輸出樣例&#xff1a; 3.132157 我的代碼 #i…

【圖片識別工具】批量單據識別批量重命名,批量OCR識別圖片文字并重命名,批量改名工具的使用步驟和注意事項

一、適用場景 ??財務與發票管理??&#xff1a;企業需處理大量電子發票或掃描件&#xff0c;通過OCR識別發票代碼、金額等關鍵信息&#xff0c;自動重命名為發票號_金額.pdf格式&#xff0c;便于歸檔與稅務審計。 ??物流單據處理??&#xff1a;物流公司需從運單中提取單…

Modbus TCP轉Profinet網關:數字化工廠異構網絡融合的核心樞紐

在現代工業生產中&#xff0c;隨著智能制造和工業互聯網的不斷發展&#xff0c;數字化工廠成為了制造業升級的重要方向。數字化工廠的核心在于實現設備、數據和人的互聯互通&#xff0c;而這其中&#xff0c;通信協議扮演著至關重要的角色。今天&#xff0c;我們就來探討開疆智…

win11平臺下的docker-desktop中的volume位置問題

因為需要搞個本地的mysql數據庫&#xff0c;而且本地安裝的程序較多&#xff0c;不想再安mysql了&#xff0c;就想到使用docker來安裝。而且因為數據巨大&#xff0c;所以想到直接使用轉移data文件夾的方式。 各種查詢&#xff0c;而且還使用ai查詢&#xff0c;他們都提到&…

【MySQL】項目實踐

個人主頁&#xff1a;Guiat 歸屬專欄&#xff1a;MySQL 文章目錄 1. 項目實踐概述1.1 項目實踐的重要性1.2 項目中MySQL的典型應用場景 2. 數據庫設計流程2.1 需求分析與規劃2.2 設計過程示例2.3 數據庫設計工具 3. 電子商務平臺實踐案例3.1 系統架構3.2 數據庫Schema設計3.3 數…

React學習———CSS Modules(樣式模塊化)

CSS Modules CSS Modules&#xff08;樣式模塊化&#xff09;是一種用于模塊化和局部作用域化CSS樣式的技術&#xff0c;讓CSS只在當前組件內生效&#xff0c;避免全局樣式沖突的技術方案 工作原理 文件命名&#xff1a;通常以.module.css、.module.less、.module.scss等結尾…

agent 智能體應用產品:生圖、生視頻、代碼等

生圖片 Lovart&#xff1a;全球首個設計 Agent https://www.lovart.ai/ 生視頻 AI 視頻 Agent 產品&#xff1a;Medeo https://www.medeo.app/ 代碼 vscode copilot、cursor、trae 其他research manus grok等各個大模型產品

青少年ctf平臺應急響應-應急響應2

題目&#xff1a; 當前服務器被創建了一個新的用戶&#xff0c;請提交新用戶的用戶名&#xff0c;得到的結果 ssh rootchallenge.qsnctf.com -p 30327 這個命令用于通過 SSH 協議連接到指定的遠程服務器。具體解釋如下&#xff1a; ssh&#xff1a;這是在 Unix-like 系統中…

碼蹄集——圓包含

MT1181 圓包含 輸入2個圓的圓心的坐標值&#xff08;x&#xff0c;y&#xff09;和半徑&#xff0c;判斷斷一個圓是否完全包含另一個圓&#xff0c;輸出YES或者NO。另&#xff1a;內切不算做完全包含。 格式 輸入格式&#xff1a;輸入整型&#xff0c;空格分隔。 每行輸入一組…