關於SpringBoot下關於訪問templates跟static目錄問題
阿新 • • 發佈:2021-07-11
一、前言
springboot整合了springmvc的攔截功能。攔截了所有的請求。預設放行的資源是:resources/static/ 目錄下所有靜態資源。(不走controller控制器就能直接訪問到資源)。
html頁面如果放在resources/templates目錄下,則需要走controller控制器,controller放行,允許該資源訪問,該資源才能被訪問到。否則就會報404錯誤(它不可以直接被訪問)。
有時候我們只需要簡單在templates下兩個頁面進行跳轉,再寫controller免得有些多餘,那怎麼解決呢?
我們建立一個SpringBoot專案的時候預設會是這樣的目錄結構:
但是我在今天測試的時候(templates/index.html),發現並不能訪問到它的同級目錄:
我就不復原案發現場了,直接來說問題以及解決辦法:
二、問題:
1、index.html頁面中無法跳轉/訪問同級目錄下/templates/xxx.html檔案
2、index.html頁面中無法訪問到static目錄下的xxx.xx靜態檔案
3、index.html頁面中無法通過a標籤訪問到controller
三、解決
1、通過寫配置類
@Configuration public class MyConfig implements WebMvcConfigurer { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { //這裡是指在url上面打的內容 registry.addResourceHandler("/**") //下面的是指可以對應resources檔案下那些內容 .addResourceLocations("classpath:/") .addResourceLocations("classpath:/templates/") .addResourceLocations("classpath:/static"); } }
2、通過新增配置檔案屬性(推薦)
在application.properties中新增屬性:
# 靜態檔案請求匹配方式 spring.mvc.static-path-pattern=/** # 修改預設的靜態定址資源目錄 spring.resources.static-locations=classpath:/templates/,classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/
四、測試:
pom.xml:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>trueView Code</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> </dependencies>
controller程式碼:
package com.zhixi.controller; /** * @author zhangzhixi * @version 1.0 * @date 2021-7-11 14:35 */ import org.springframework.stereotype.Component; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; @Component @Controller public class MyController { @RequestMapping(value = "/some", method = RequestMethod.POST) @ResponseBody public String test1(@RequestParam("name") String name, @RequestParam("age") String age) { return "姓名是:" + name + " 年齡是:" + age; } @RequestMapping("/zzx") @ResponseBody public String test2(){ return "你好,這是controller測試頁面"; } }View Code
index.html程式碼:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <a href="/zzx">跳轉到controller</a><br> <a href="Test.html">跳轉到templates下的Test.html頁面</a><br> <a href="css/test.css">跳轉到static目錄下的css檔案</a> <br> <br> <form action="/some" method="post"> 姓名: <label> <input type="text" name="name"/> </label> <br> 年齡: <label> <input type="text" name="age"/> </label> <br> <input type="submit" value="提交"/> </form> </body> </html>
成功訪問: