原文鏈接
1,如果你本身想訪問的是一個靜態資源
先確定項目的輸出路徑下是否存在該資源,maven
項目的輸出路徑一般在target/classess
,在idea中如下圖所示:
若不存在,需要在maven
中添加配置,將該資源文件在編譯時輸出到classpath
下,一般可添加如下代碼在pom.xml
中:
<build>
<resources>
<resource>
<directory>src/main/java</directory>
</resource>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
</build>
若資源存在,那就是:1,靜態資源映射配置錯誤;2,你的項目本身沒有靜態資源相關的配置,使用的是springboot默認的配置,但你的資源沒有放在默認的文件夾下,默認的文件夾有:
"classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/", "/"
那麼如何自定義靜態文件映射呢:可以在application.yml
中加入以下配置
#靜態資源存放路徑
spring:
#配置classpath 下 static和mystatic兩個文件夾爲靜態資源文件夾
resources:
static-locations: classpath:/mystatic,classpath:/static
#靜態資源url映射路徑
mvc:
static-path-pattern: /static/**
# 自定義配置會覆蓋默認配置,注意key、value之間一定要有空格
# 在上面的配置中如果訪問localhost/static/a.jpg,則會依次在mystatic和static兩個文件下查找a.jpg,找到直接返回。如果是 localhost/static/a/b.jpg則會相應的去查找對應的文件夾
在上面的配置修改好後,一定要檢查:1,key value之間是否有空格,否則配置不生;2,相應的重啓服務器,緩存也會影響訪問結果;3,路徑是否是以配置的static
作爲靜態資源的訪問父路徑
2,如果你想在訪問某鏈接後跳轉到某個頁面,而不是靜態資源
確定該鏈接能否進入到控制器的方法中,若不能,請檢查自己controller
和方法上的映射路徑是否正確。最好是在相關代碼內打斷點或者加輸出語句,看是否進入到此方法。若是正確的進入到此方法,並且沒有進行重定向或轉發操作的話,服務器是不可能報404的,只可能報500,如果有重定向或轉發操作,請檢查路徑是否正確
3, 如果你使用了thymeleaf模板,一定要保證引入了相關依賴並保證配置正確
在pom.xml
中加入
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
在application.yml
中加入
spring:
thymeleaf:
cache: false
#默認情況下是templates,這裏改成了view文件夾
prefix: classpath:/view/
suffix: .html