摘要:開發應用程序非常適合應用程序開發,通過使用嵌入式或,你可以創建一個自包含的服務器。如果你還沒有開發過一個應用程序,你可以按照入門部分中的示例進行操作。自動配置為大多數應用程序提供了良好的自動配置。
27. 開發Web應用程序
Spring Boot非常適合web應用程序開發,通過使用嵌入式Tomcat、Jetty、Undertow或Netty,你可以創建一個自包含的HTTP服務器。大多數web應用程序都使用spring-boot-starter-web模塊來快速啟動和運行,你還可以選擇使用spring-boot-starter-webflux模塊構建reactive web應用程序。
如果你還沒有開發過一個Spring Boot web應用程序,你可以按照入門部分中的“Hello World!”示例進行操作。
27.1 Spring Web MVC FrameworkSpring Web MVC框架(通常簡稱為“Spring MVC”)是一個豐富的“模型視圖控制器”Web框架,Spring MVC允許你創建特殊的@Controller或@RestController bean來處理傳入的HTTP請求,控制器中的方法通過使用@RequestMapping注解映射到HTTP。
下面的代碼顯示了一個典型的提供JSON數據的@RestController:
@RestController @RequestMapping(value="/users") public class MyRestController { @RequestMapping(value="/{user}", method=RequestMethod.GET) public User getUser(@PathVariable Long user) { // ... } @RequestMapping(value="/{user}/customers", method=RequestMethod.GET) ListgetUserCustomers(@PathVariable Long user) { // ... } @RequestMapping(value="/{user}", method=RequestMethod.DELETE) public User deleteUser(@PathVariable Long user) { // ... } }
Spring MVC是核心Spring框架的一部分,在參考文檔中可以找到詳細信息,在spring.io/guides還提供了幾個介紹Spring MVC的指南。
27.1.1 Spring MVC自動配置Spring Boot為大多數應用程序提供了良好的Spring MVC自動配置。
自動配置在Spring的默認設置之上添加了以下特性:
包含ContentNegotiatingViewResolver和BeanNameViewResolver bean。
支持提供靜態資源,包括支持WebJars(稍后將在本文中介紹)。
Converter、GenericConverter和Formatter bean的自動注冊。
支持HttpMessageConverters(稍后將在本文中介紹)。
MessageCodesResolver的自動注冊(稍后將在本文中介紹)。
靜態index.html支持。
支持自定義圖標(稍后將在本文中介紹)。
自動使用ConfigurableWebBindingInitializer bean(稍后將在本文中介紹)。
如果你想保留Spring Boot MVC特性,并且希望添加額外的MVC配置(攔截器、格式化器、視圖控制器和其他特性),你可以添加自己的@Configuration類的WebMvcConfigurer類型,但沒有@EnableWebMvc,如果希望提供RequestMappingHandlerMapping、RequestMappingHandlerAdapter或ExceptionHandlerExceptionResolver的定制實例,可以聲明一個WebMvcRegistrationsAdapter實例來提供這些組件。
如果你想完全控制Spring MVC,可以添加自己的@EnableWebMvc注解的@Configuration。
27.1.2 HttpMessageConvertersSpring MVC使用HttpMessageConverter接口轉換HTTP請求和響應,合理的默認值是開箱即用的,例如,對象可以自動轉換為JSON(通過使用Jackson庫)或XML(如果可用,可以使用Jackson XML擴展,或者如果Jackson XML擴展不可用,可以使用JAXB),默認情況下,字符串是用UTF-8編碼的。
如果需要添加或定制轉換器,可以使用Spring Boot的HttpMessageConverters類,如下面的清單所示:
import org.springframework.boot.autoconfigure.web.HttpMessageConverters; import org.springframework.context.annotation.*; import org.springframework.http.converter.*; @Configuration public class MyConfiguration { @Bean public HttpMessageConverters customConverters() { HttpMessageConverter> additional = ... HttpMessageConverter> another = ... return new HttpMessageConverters(additional, another); } }
上下文中出現的任何HttpMessageConverter bean都被添加到轉換器列表中,你還可以以同樣的方式覆蓋默認轉換器。
27.1.3 自定義JSON序列化器和反序列化器如果使用Jackson序列化和反序列化JSON數據,你可能想要編寫自己的JsonSerializer和JsonDeserializer類,定制序列化器通常通過模塊向Jackson注冊,但是Spring Boot提供了一個替代的@JsonComponent注解,使直接注冊Spring bean變得更容易。
你可以直接在JsonSerializer或JsonDeserializer實現上使用@JsonComponent注解,你還可以在包含序列化/反序列化器的類中使用它作為內部類,如下例所示:
import java.io.*; import com.fasterxml.jackson.core.*; import com.fasterxml.jackson.databind.*; import org.springframework.boot.jackson.*; @JsonComponent public class Example { public static class Serializer extends JsonSerializer{ // ... } public static class Deserializer extends JsonDeserializer { // ... } }
ApplicationContext中的所有@JsonComponent bean都自動注冊到Jackson,因為@JsonComponent是由@Component注解的,所以通常使用組件掃描規則。
Spring Boot還提供了JsonObjectSerializer和JsonObjectDeserializer基類,這些基類在序列化對象時為標準Jackson版本提供了有用的替代方法,有關詳細信息,請參閱Javadoc中的JsonObjectSerializer和JsonObjectDeserializer。
27.1.4 MessageCodesResolverSpring MVC有一個生成錯誤代碼的策略,用于從綁定錯誤中呈現錯誤消息:MessageCodesResolver,如果你設置spring.mvc.message-codes-resolver.format屬性PREFIX_ERROR_CODE或POSTFIX_ERROR_CODE,Spring Boot為你創建一個(參見DefaultMessageCodesResolver.Format中的枚舉)。
27.1.5 靜態內容默認情況下,Spring Boot從類路徑或ServletContext根目錄中提供靜態內容,目錄名為/static(或/public或/resources或/META-INF/resources),它使用來自Spring MVC的ResourceHttpRequestHandler,這樣你就可以通過添加自己的WebMvcConfigurer并覆蓋addResourceHandlers方法來修改這種行為。
在獨立的web應用程序中,還啟用了容器中的默認servlet并充當后備,如果Spring決定不處理它,則從ServletContext的根服務提供內容,大多數情況下,這不會發生(除非你修改默認的MVC配置),因為Spring總是可以通過DispatcherServlet處理請求。
默認情況下,資源被映射到/**上,但是你可以使用spring.mvc.static-path-pattern屬性對其進行調優,例如,將所有資源重新分配到/resources/**可以實現如下操作:
spring.mvc.static-path-pattern=/resources/**
還可以使用spring.resources.static-locations屬性定制靜態資源位置(用目錄位置列表替換默認值),根Servlet上下文路徑"/"也作為位置自動添加。
除了前面提到的“標準”靜態資源位置之外,Webjars內容還有一個特殊的例子,任何在/webjars/**中具有路徑的資源都可以從jar文件中獲取,如果它們被打包成webjars格式的話。
如果你的應用程序打包為jar,那么不要使用src/main/webapp目錄,雖然這個目錄是一個通用標準,但它只與war打包一起工作,并且如果你生成一個jar,它會被大多數構建工具默默忽略。
Spring Boot還支持Spring MVC提供的高級資源處理特性,允許用例(比如cache-busting的靜態資源)或使用webjar的版本無關url。
要為webjar使用版本無關的url,請添加webjar-locator-core依賴項,然后聲明你的Webjar,以jQuery為例,添加"/webjars/jquery/jquery.min.js"的結果是"/webjars/jquery/x.y.z/jquery.min.js",x.y.z的地方是Webjar版本。
如果使用JBoss,則需要聲明webjar—locator—JBoss—vfs依賴項,而不是webjar—locator-core,否則,所有Webjars解析為404。
為了使用cache busting,下面的配置為所有靜態資源配置cache busting解決方案,有效地添加了內容散列,例如,在URL中:
spring.resources.chain.strategy.content.enabled=true spring.resources.chain.strategy.content.paths=/**
由于ResourceUrlEncodingFilter自動為Thymeleaf和FreeMarker配置,所以到資源的鏈接在運行時在模板中被重寫,在使用JSP時,應該手動聲明這個過濾器,其他的模板引擎目前不被自動支持,但是可以使用自定義模板宏/助手和ResourceUrlProvider的使用。
當使用JavaScript模塊加載器動態加載資源時,不允許重命名文件,這就是為什么其他策略也得到支持并可以結合使用,“固定”策略在URL中添加靜態版本字符串,而不更改文件名,如下例所示:
spring.resources.chain.strategy.content.enabled=true spring.resources.chain.strategy.content.paths=/** spring.resources.chain.strategy.fixed.enabled=true spring.resources.chain.strategy.fixed.paths=/js/lib/ spring.resources.chain.strategy.fixed.version=v12
在這種配置下,位于"/js/lib/"下的JavaScript模塊使用固定的版本控制策略(“/v12/js/lib/mymodule.js”),而其他資源仍然使用內容控制策略()。
有關更多支持的選項,請參閱ResourceProperties。
這個特性已經在一個專門的博客帖子和Spring Framework參考文檔中進行了詳細描述。27.1.6 歡迎頁面
Spring Boot支持靜態和模板歡迎頁面,它首先查找index.html文件中的配置靜態內容位置,如果其中一個沒有找到,則查找index模板,如果找到任何一個,它將自動用作應用程序的歡迎頁面。
27.1.7 自定義圖標Spring Boot在配置的靜態內容位置和類路徑根目錄中查找favicon.ico(按順序),如果存在這樣的文件,它將自動用作應用程序的圖標。
27.1.8 路徑匹配和內容協商Spring MVC可以通過查看請求路徑并將其與應用程序中定義的映射匹配(例如,控制器方法上的@GetMapping注解),將傳入的HTTP請求映射到處理程序。
上一篇:日志記錄 下一篇:安全文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/77373.html
摘要:參考指南使你可以輕松地創建可運行的獨立的生產級的基于的應用程序,我們對平臺和第三方庫有自己的看法,這樣你就可以以最低限度工作開始了,大多數應用程序都需要很少的配置。文檔本節簡要概述了參考文檔,它充當文檔其余部分的映射。 Spring Boot 參考指南 Spring Boot使你可以輕松地創建可運行的獨立的、生產級的基于Spring的應用程序,我們對Spring平臺和第三方庫有自己的看...
摘要:開發你的第一個應用程序本節描述如何開發一個簡單的應用程序來突出了的一些關鍵特性,我們使用來構建這個項目,因為大多數都支持它。如果你希望分發一個自包含的應用程序,這可能會有問題。 11. 開發你的第一個Spring Boot應用程序 本節描述如何開發一個簡單的Hello World! web應用程序來突出了Spring Boot的一些關鍵特性,我們使用Maven來構建這個項目,因為大多數...
摘要:安裝可以與經典開發工具一起使用,也可以作為命令行工具安裝。下面的示例展示了一個典型的文件安裝命令行接口是一個命令行工具,你可以使用它來快速地實現的原型。 10. 安裝Spring Boot Spring Boot可以與經典Java開發工具一起使用,也可以作為命令行工具安裝。無論哪種方式,都需要Java SDK v1.8或更高版本。在開始之前,你應該使用以下命令檢查當前的Java安裝: ...
摘要:關于文檔參考指南可用如下方式最新的副本可以在中找到。嘗試操作文檔,它們為最常見的問題提供解決方案。學習基礎,構建在許多其他項目上,網站提供豐富的參考文檔,如果你要從開始,嘗試其中一個指南。我們對進行監視,以解決帶有標記的問題。 1. 關于文檔 Spring Boot 參考指南可用如下方式: HTML PDF EPUB 最新的副本可以在 docs.spring.io/spring-b...
摘要:用于發布身份驗證事件的。導入用于安全,配置身份驗證,這在非應用程序中也是相關的。安全出于安全考慮,除和之外的所有默認禁用,屬性可用于啟用。有關保護的其他信息可以在參考指南中找到。 28. 安全 如果在類路徑上有Spring Security,那么web應用程序默認是安全的,Spring Boot依賴Spring Security的內容協商策略來決定是使用httpBasic還是formL...
閱讀 1711·2021-11-11 10:58
閱讀 4186·2021-09-09 09:33
閱讀 1257·2021-08-18 10:23
閱讀 1548·2019-08-30 15:52
閱讀 1625·2019-08-30 11:06
閱讀 1867·2019-08-29 14:03
閱讀 1507·2019-08-26 14:06
閱讀 2943·2019-08-26 10:39