SpringBoot之web開發概述SpringBoot對靜態資源(static-location)的對映規則模板引擎thymeleafthymeleaf基本概念引入thymeleaf依賴thymeleaf使用和語法SpringBoot對SpringMVC的web主要的自動配置如何修改SpringBoot的預設配置擴充套件MVC(不能標註@EnableWebMvc)全面接管SpringMVC(@EnableWebMvc)—不推薦使用概述SpringBoot開發:1.建立SpringBoot應用,選中需要的場景模組。2.SpringBoot已經預設將場景模組配置好,只需要在配置檔案中指定少量的配置(資料庫地址,使用者名稱,密碼)就可以執行起來。3.只需要編寫業務邏輯程式碼。需要掌握自動配置原理:這個場景中SpringBoot預設配置好了什麼,能不能修改,能修改哪些配置,能不能擴充套件。
XxxAutoConfiguration:幫我們給容器中自動配置元件XxxProperties:配置類,封裝配置檔案中的內容
SpringBoot對靜態資源(static-location)的對映規則
@ConfigurationProperties( prefix = "spring.resources", ignoreUnknownFields = false)
ResourceProperties可以設定和資源有關的引數,快取時間等。
/* * ResourceHandlerRegistry儲存用於透過Spring MVC服務靜態資源的資源處理程式的註冊 * 允許設定為在Web瀏覽器中高效載入而最佳化的快取頭 * 可以在Web應用的目錄下,類路徑等位置之外的位置提供資源 */ public void addResourceHandlers(ResourceHandlerRegistry registry) { if (!this.resourceProperties.isAddMappings()) { logger.debug("Default resource handling disabled"); } else { Duration cachePeriod = this.resourceProperties.getCache().getPeriod(); CacheControl cacheControl = this.resourceProperties.getCache().getCachecontrol().toHttpCacheControl(); if (!registry.hasMappingForPattern("/webjars/**")) { this.customizeResourceHandlerRegistration(registry.addResourceHandler(new String[]{"/webjars/**"}).addResourceLocations(new String[]{"classpath:/META-INF/resources/webjars/"}).setCachePeriod(this.getSeconds(cachePeriod)).setCacheControl(cacheControl)); } String staticPathPattern = this.mvcProperties.getStaticPathPattern(); if (!registry.hasMappingForPattern(staticPathPattern)) { this.customizeResourceHandlerRegistration(registry.addResourceHandler(new String[]{staticPathPattern}).addResourceLocations(getResourceLocations(this.resourceProperties.getStaticLocations())).setCachePeriod(this.getSeconds(cachePeriod)).setCacheControl(cacheControl)); } } }
所有/web.jars/**中的資源都在classpath:/META-INF/resources/webjars/中尋找。web.jars:以jar包的方式引入靜態資源:https://www.webjars.org/訪問時,只需要寫web.jars下面資源的名稱。/**:訪問當前專案的任何資源(靜態資源的資料夾)classpath:/META-INF/resources/classpath:/resources/classpath:/static/classpath:/public// # 當前專案的根路徑
@Bean public WelcomePageHandlerMapping welcomePageHandlerMapping(ApplicationContext applicationContext) { return new WelcomePageHandlerMapping(new TemplateAvailabilityProviders(applicationContext), applicationContext, this.getWelcomePage(), this.mvcProperties.getStaticPathPattern()); }
配置歡迎頁的對映:
歡迎頁:靜態資原始檔夾下的所有index.xml頁面,被 /** 對映。 @Configuration @ConditionalOnProperty( value = {"spring.mvc.favicon.enabled"}, matchIfMissing = true ) /* * ResourceLoaderAware是一個標記介面 * 用於透過ApplicationContext上下文注入ResourceLoader * 有setResourceLoader()方法 */ public static class FaviconConfiguration implements ResourceLoaderAware { private final ResourceProperties resourceProperties; /* * ResourceLoader用於返回Resource物件和ClassLoader物件 * - getResource(String location)方法根據提供的location引數返回相應的Resource物件 * - getClassLoader()方法則返回載入這些Resource的ClassLoader */ private ResourceLoader resourceLoader; public FaviconConfiguration(ResourceProperties resourceProperties) { this.resourceProperties = resourceProperties; } public void setResourceLoader(ResourceLoader resourceLoader) { this.resourceLoader = resourceLoader; } /* * SimpleUrlHandlerMapping是SpringMVC中適應性最強的Handler Mapping類 * 允許明確指定URL模式和Handler的對映關係.有兩種宣告方式: * - prop: * - key: URL模式 * — value: Handler的ID或者名字 * - value: * - 等號左邊是URL模式 * - 等號右邊是HandlerID或者名字 */ @Bean public SimpleUrlHandlerMapping faviconHandlerMapping() { SimpleUrlHandlerMapping mapping = new SimpleUrlHandlerMapping(); mapping.setOrder(-2147483647); mapping.setUrlMap(Collections.singletonMap("**/favicon.ico", this.faviconRequestHandler())); return mapping; }
配置喜歡的圖示(標籤的圖示):
標籤圖示:所有的 **/favicon.ico 都是在靜態資料夾資源下。模板引擎jsp,velocity,freemarker,thymeleaf
優點 |
缺點 | |
jsp |
1. 功能強大,可以寫Java程式碼2. 支援jsp標籤 - jsp tag3. 支援表示式語言 - EL表示式4. 官方標準,使用廣泛,豐富的第三方jsp標籤庫5. 效能良好 ,jsp編譯成class檔案執行,有很好的效能表現 |
1. jsp沒有明顯的缺點2. 由於可以編寫Java程式碼,使用不當容易破壞MVC結構 |
velocity |
1. 不編寫Java程式碼,實現嚴格的MVC分離2. 效能良好,比jsp優越3. 使用表示式語言 - EL表示式 |
1. 不是官方標準2. 使用範圍小,第三方標籤庫較少3. 對jsp標籤的支援不夠友好 |
freemarker |
1. 不編寫Java程式碼,實現嚴格的MVC分離2. 效能非常好3. 對jsp標籤支援良好4. 內建大量常用功能,使用非常方便5. 宏定義(類似jsp標籤)非常方便6. 使用表示式語言 - EL表示式 |
1.不是官方標準2. 使用範圍小,第三方標籤庫較少 |
thymeleaf |
1. 靜態html嵌入標籤屬性,瀏覽器可以直接開啟模板檔案,便於後端聯調2. SpringBoot框架推薦模板 |
1.模板必須符合xml規範2. 需要加入js指令碼 |
thymeleaf |
jsp | |
片段包含 |
th:insertth:replace |
include |
遍歷 |
th:each |
c:forEach |
條件判斷 |
th:ifth:unlessth:switchth:case |
c:if |
宣告變數 |
th:objectth:with |
c:set |
任意屬性修改 |
th:attrth:attrprepend(前面)th:attrappend(後面) | |
修改指定屬性預設值 |
th:valueth:hrefth:src | |
修改標籤體文字內容 |
th:text(轉義)th:utext(不轉義) | |
宣告片段 |
th:fragment | |
移除宣告片段 |
th:remove |
DelegatingWebMvcConfiguration:
參考實現: 容器中所有的WebMvcConfigurer都會起作用。配置的配置類也會被呼叫。這樣Spring的自動配置和擴充套件配置都會起作用。全面接管SpringMVC(@EnableWebMvc)—不推薦使用禁用SpringBoot對SpringMVC的自動配置,全面對SpringMVC進行配置。在配置類中標註@EnableWebMvc。所有的SpringMVC的預設配置都被禁用了。@EnableWebMvc:
DelegatingWebMvcConfiguration:
WebMvcAutoConfiguration: @EnableWebMvc將WebMvcAutoConfigurationSupport匯入進來,不包括SpringMVC的功能。總結:多多學習SpringBoot中的XxxConfigurer,進行擴充套件配置
最新評論
|