SpringBoot第一個小專案,含IDEA教程,以及靜態頁面無法訪問的處理
以前一直用的eclipse 現在試用一下idea,畢竟這是一個最近比較火的開發工具。
IDEA的安裝與配置就不說了。我已經共享了非常詳細的文件,當然了這裡要感謝某個培訓機構共享出來的資源,這裡我就不說了。
文件連結:IntelliJ IDEA的安裝、配置與使用(全套教程)
如果沒有用過IDEA的話,強烈建議先看完上面的idea安裝配置教程,如果沒有積分可以留言或者@我一下留個郵箱什麼的都可以,我看到給發一個郵件。
下面我們進入正題,新建第一個spring boot小專案
首先新建一個project,當然你也可以新建一個module。這個在我分享的教程裡已經說的很詳細了。
第二步
第三步
第四步,這一步很重要,要選擇一個web模板!!!
第五步,這裡起個名字,我直接用預設的了,點選完成(finish)
然後目錄結構大致是這樣的。
然後新建一個HelloController,程式碼及目錄結構如下:
程式碼
package cn.btmianhua.springboot; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; /** * @author BABY * @create 2018/8/31 - 11:12 */ @Controller public class HelloController { @RequestMapping(value = "/hello") @ResponseBody public String hello() { return "hello spring boot!"; } @RequestMapping(value = "/tes") public String testtest() { System.out.println("tes"); return "testtest"; } }
目錄結構:
之後在resources下的templates中新建一個testtessst.html(名字我隨便起的)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>測試一下</title>
</head>
<body>
<h1>測試一下</h1>
</body>
</html>
之後目錄結構如下(那個btadmin不用管他):
這個時候其實已經可以運行了,雙擊開啟SpringbootApplication,然後點選綠色的小三角專案就可以跑起來了。
出現下圖的這個started就證明我們專案跑起來了,由於springboot中集成了,所以我們並不需要額外的配置tomcat。
瀏覽器訪問http://localhost:8080/hello就會出現如下的資訊。
但是當我們訪問http://localhost:8080/tes的時候卻出現瞭如下的404異常
檢查控制檯也並沒有錯誤
經過我一陣好查,其實這個spring boot的一個坑!!搜尋資料如下:
以下內容來源於網路
訪問不了resources/templates下的頁面,命名控制器程式碼也沒有寫錯。然後自己加了@EnableWebMvc註解以及自己配置了檢視解析器,到最後還是不能解決問題(可以發現配置了@EnableWebMvc後可以在控制檯打印出頁面的路徑)。最後發現原來SpringBoot只支援模板引擎的原因。所以我認為可能是要加上一個模板引擎在依賴中負責渲染(springboot預設不支援jsp),這裡我就選擇使用thymeleaf,加上spring-boot-starter-thymeleaf在依賴中就解決了。
spring boot在springmvc的檢視解析器方面就預設集成了ContentNegotiatingViewResolver和BeanNameViewResolver,在檢視引擎上就已經整合自動配置的模版引擎,如下:
-
FreeMarker
-
Groovy
-
Thymeleaf
-
Velocity (deprecated in 1.4)
-
Mustache
JSP技術spring boot 官方是不推薦的,原因有三:
-
在tomcat上,jsp不能在巢狀的tomcat容器解析即不能在打包成可執行的jar的情況下解析
-
Jetty 巢狀的容器不支援jsp
-
Undertow
而其他的模版引擎spring boot 都支援,並預設會到classpath的templates裡面查詢模版引擎。
當然還有第二種可能性,那就是你的@SpringBootApplication註解所在類的掃描不到控制器的位置(可以用MockMvc查出這個原因),要保證所有包的位置都保持在與@SpringBootApplication註解所在類的包同級或者下級,@SpringBootApplication自帶的@ComponentScan只會掃描@SpringBootApplication註解所在類的包同級或者下級
好了既然知道原因了,那麼就好解決了直接引入依賴就完成了。
開啟pom.xml檔案,新增如下依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
重啟專案,重新整理頁面,問題解決。好了接下來就可以愉快的開發了。