spring-boot-starter-web和快速Web應用開發

在這個互聯網時代,使用 Spring 框架除了開發少數的獨立應用,大部分情況下實際上在使用 SpringMVC 開發 web 應用,為了幫我們簡化快速搭建並開發一個 Web 項目,SpringBoot 為我們提供了 spring-boot-starter-web 自動配置模塊。只要將 spring-boot-starter-web 加入項目的 maven 依賴:

<code><dependency>
<groupid>org.springframework.boot/<groupid>
<artifactid>spring-boot-starter-web/<artifactid>
/<dependency>/<code>

我們就得到了一個直接可執行的 Web 應用,當前項目下運行 mvn spring-boot:run 就可以直接啟動一個使用了嵌入式 tomcat 服務請求的 Web 應用,只不過,我們還沒有提供任何服務 Web 請求的 Controller,所以,訪問任何路徑都會返回一個 SpringBoot 默認提供的錯誤頁面(一般稱其為 whitelabel error page),我們可以在當前項目下新建一個服務根路徑 Web 請求的 Controller 實現:

<code>@RestController
public class IndexController {
@RequestMapping("/")
public String index() {
return "hello, there";
}
}/<code>

重新運行 mvn spring-boot:run 並訪問 http://localhost:8080,錯誤頁面將被我們的 Controller 返回的消息所替代,一個簡單的 Web 應用就這樣完成了。但是,簡單的背後,其實卻有很多“潛規則”(約定),我們只有充分了解了這些“潛規則”,才能更好地應用 spring-boot-starter-web。

項目結構層面的約定

項目結構層面與傳統打包為 war 的 Java Web 應用的差異在於,靜態文件和頁面模板的存放位置變了,原來是放在 src/main/webapp 目錄下的一系列資源,現在都統一放在 src/main/resources 相應子目錄下,比如:

  • src/main/resources/static 用於存放各類靜態資源,比如 css,js 等。
  • src/main/resources/templates 用於存放模板文件,比如 *.vm。

當然,如果還是希望以 war 包的形式,而不是 SpringBoot 推薦使用的獨立 jar 包形式發佈 Web 應用,也可以繼續原來 Java Web 應用的項目結構約定。

SpringMVC 框架層面的約定和定製

spring-boot-starter-web 默認將為我們自動配置如下一些 SpringMVC 必要組件:

  • 必要的 ViewResolver,比如 ContentNegotiatingViewResolver 和 Bean-NameViewResolver。
  • 將必要的 Converter、GenericConverter 和 Formatter 等 bean 註冊到 IoC 容器。
  • 添加一系列的 HttpMessageConverter 以便支持對 Web 請求和相應的類型轉換。
  • 自動配置和註冊 MessageCodesResolver。
  • 其他。

任何時候,如果我們對默認提供的 SpringMVC 組件設定不滿意,都可以在 IoC 容器中註冊新的同類型的 bean 定義來替換,或者直接提供一個基於 WebMvcConfigurerAdapter 類型的 bean 定義來定製,甚至直接提供一個標註了 @EnableWebMvc 的 @Configuration 配置類完全接管所有 SpringMVC 的相關配置,自己完全重新配置。



分享到:


相關文章: