原因分析和解決思路
為什么在模板引擎(JSP,ThemyLeaf等等)上不能正常顯示本地圖片?
因為在模板引擎中,你輸入的路徑名都會在前面默認加上項目路徑(localHost:8080/XXX),導致路徑錯誤
比如你輸入的是:C:/test/test1.jpg
但實際的路徑會變成 : localHost:8080/項目名/C:/test/test1.jpg
解決思路
使用映射路徑,自己定義一個路徑,把該路徑映射到電腦本地路徑
SpringBoot+ThymeLeaf顯示本地圖片
在application.properties中添加路徑的映射
例子:
com.jy.localFile=C:/project_image/test/
spring.mvc.static-path-pattern=/**
spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/\
, classpath:/static/, classpath:/public/, file:${com.jy.localFile}
就這么簡單
com.jy.localFile :
自定義屬性
spring.mvc.static-path-pattern :
就是springMVC配置前端處理器時的那個<url-pattern>.默認的就是/**,所以此處不寫static-path-pattern也沒問題
spring.resources.static-locations :
1).映射的路徑, ${com.jy.localFile}前邊的那一大串都是SpringBoot默認的配置,必須寫上,否則默認配置會被覆蓋而失效!
2).本地磁盤路徑前必須加上file: , 表示是指一個具體的硬盤路徑, 其他的使用classpath指的是系統環境變量
注意 : 1.修改默認配置的時候會把默認配置直接覆蓋,所以在修改時要加上默認配置的內容
2.properties文件中反斜杠(\)表示連接
前台ThymeLeaf獲取本地圖片
th:src="@{/{imageName}(imageName=${session.user.imageName})}"
用傳參的方式避免把${session.user.imageName})原文填入
jsp顯示本地圖片
通用解決方法:
在tomcat的server.xml配置文件中,在<host></host>標簽中間添上一句
<!-- docBase : 磁盤絕對路徑,即本地圖片存放地址 --> <!-- path : 虛擬路徑, testProject是項目名 --> <!-- reloadable : 有文件更新時,是否重新加載 --> <Context docBase="C:\project_image\testProject" path="/testProject/upload" reloadable="true"/>
注 : 為什么path="/testProject/upload"而不是path="/upload"?(testProject是項目名)
比如項目地址是 : localhost:8081/testProject
如果設置為path="/upload",那么圖片讀取的地址會變為 : localhost:8081/upload/photo.jpg,這個錯誤地址是讀取不到圖片的,連項目都進不去.
如果path="/testProject/upload",則圖片讀取地址為 : localhost:8081/testProject/upload/photo.jpg,這樣才能讀取到圖片.
jsp加載圖片代碼:
<img src="${pageContext.request.contextPath }/testProject/photo.jpg">
eclipse配置方法:
eclipse可以不用上邊的配置方法,直接在eclipse內配置即可.
如下圖,進入Add External Web Module界面,按照上邊設置對應的docBase和path即可.