欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

SpringBoot能否同時支持多個視圖解析器jsp+html+其他模版引擎

這篇文章將為大家詳細講解有關(guān)SpringBoot能否同時支持多個視圖解析器jsp+html+其他模版引擎,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)建站!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序開發(fā)、集團企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了陽高免費建站歡迎大家使用!

SpringBoot同時支持多個視圖解析器jsp+html+其他模版引擎!

有一個不算老的項目,經(jīng)歷過幾波人迭代,源碼維護的一塌糊涂。視圖這一塊,用的有 jsp,html,freemarker 等。視圖不統(tǒng)一,導(dǎo)致啟用 html 后,就不能訪問 jsp 和 freemarker。這些具備互斥的因素,導(dǎo)致項目跑了 3 個,通過 Nginx 來適配。

今天,我給大家分享一種辦法,讓 SpringBoot 項目,同時支持多種模版引擎。

先說一下,這里沒有新技術(shù),新發(fā)明。只是根據(jù) WebMvc 視圖解析器的原理進行略微的改造。

我們都知道,在 SpringMVC 中有 3 個主要的類:DispatherServlet(前端控制器)、ViewResolver(視圖解析器)、View(視圖類)。

下面是一個簡單的視圖解析的流程。

SpringBoot能否同時支持多個視圖解析器jsp+html+其他模版引擎  

由圖可知,如果我們要支持多個視圖,就需要配置多個視圖解析器。比如:ThymeleafViewResolver、InternalResourceViewResolver(系統(tǒng)默認實現(xiàn))、ContentNegotiatingViewResolver、BeanNameViewResolver等。

DispatcherServlet 在選擇視圖解析器的時候,以優(yōu)先級為處理原則,此優(yōu)先級是根據(jù)該 ViewResolver 實現(xiàn) Ordered 接口或者使用 @Order 注解賦值,數(shù)字最小優(yōu)先級越高為原則。

然后對應(yīng)視圖解析器會返回一個具體的 View 類。最終通過3、4步驟渲染成 HTML 或者是 XML 等視圖內(nèi)容。

下圖就是具體的排序方法,viewResolvers 是一個 List 集合。

SpringBoot能否同時支持多個視圖解析器jsp+html+其他模版引擎  

排完序后,匹配 View 對象的方法,遍歷 viewResolvers,匹配到第一個 View 對象,則返回。

SpringBoot能否同時支持多個視圖解析器jsp+html+其他模版引擎  

因此,當配置多個視圖,需要同時支持多個視圖時,就會發(fā)生一些 404(當我們配置多個視圖解析器時,出現(xiàn)只支持一種視圖解析器器,其他類型產(chǎn)生 404)。

以 ThymeleafViewResolver 為例,在 ThymeleafAutoConfiguration 中,可以看到它的 Order 為 Ordered.LOWEST_PRECEDENCE - 5。

SpringBoot能否同時支持多個視圖解析器jsp+html+其他模版引擎  

而 SpringBoot 自動注入的 InternalResourceViewResolver 的優(yōu)先級為最低級。

注意:這里指的是自動注入,就是在我們不經(jīng)過任何改造的情況下,是屬于最低級的。

SpringBoot能否同時支持多個視圖解析器jsp+html+其他模版引擎  
@Bean
public InternalResourceViewResolver viewResolver() {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
    viewResolver.setPrefix("/WEB-INF/");
    viewResolver.setSuffix(".jsp");
    viewResolver.setOrder(0);
    viewResolver.setContentType("text/html;charset=UTF-8");
    return viewResolver;
}
 

由于,匹配到一個 View 對象,就立即返回。導(dǎo)致你不管配置了多少個視圖解析器,返回的 View 可能都不是正確的,這就導(dǎo)致了 404 的出現(xiàn)。

那么有沒有可能動態(tài)的調(diào)整排序,或者動態(tài)的指定視圖解析器就成了關(guān)鍵。好在,SpringMVC 給我們留下了口子。我們只需要間的重寫一個 InternalResourceView 即可。

public class HandleResourceViewExists extends InternalResourceView {
    @Override
    public boolean checkResource(Locale locale) {
        File file = new File(this.getServletContext().getRealPath("/") + getUrl());
        //判斷頁面是否存在
        return file.exists(); 
    }
}
 

通過上面的代碼,我們先檢查一下對應(yīng)的模版文件是否存在。然后通過下面的代碼,動態(tài)的調(diào)整視圖解析器。

@Bean
public InternalResourceViewResolver htmlViewResolver() {
    InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
    viewResolver.setPrefix("/");
    //設(shè)置檢查器
    viewResolver.setViewClass(HandleResourceViewExists.class); 
    viewResolver.setSuffix(".html");
    viewResolver.setOrder(0);
    viewResolver.setContentType("text/html;charset=UTF-8");
    return viewResolver;
}

@Bean
public InternalResourceViewResolver viewResolver() {
    InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
    //設(shè)置檢查器
    viewResolver.setViewClass(HandleResourceViewExists.class);
    viewResolver.setPrefix("/WEB-INF/");
    viewResolver.setSuffix(".jsp");
    viewResolver.setOrder(0);
    viewResolver.setContentType("text/html;charset=UTF-8");
    return viewResolver;
}
 

這里給大家提供了一個思路,如果通過調(diào)試代碼,發(fā)現(xiàn)問題,解決問題。

關(guān)于SpringBoot能否同時支持多個視圖解析器jsp+html+其他模版引擎就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

本文名稱:SpringBoot能否同時支持多個視圖解析器jsp+html+其他模版引擎
標題鏈接:http://chinadenli.net/article6/ppcsog.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、關(guān)鍵詞優(yōu)化、小程序開發(fā)、網(wǎng)站策劃、外貿(mào)網(wǎng)站建設(shè)、面包屑導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)
中文字幕无线码一区欧美| 欧洲一区二区三区蜜桃| 亚洲熟妇熟女久久精品| 91天堂免费在线观看| 少妇人妻中出中文字幕| 亚洲最新中文字幕一区| 午夜亚洲精品理论片在线观看| 欧美中文字幕一区在线| 亚洲精品国产第一区二区多人| 久久精品视频就在久久| 亚洲欧美日韩网友自拍| 日本高清加勒比免费在线| 日本高清不卡一二三区| 国产精品久久熟女吞精| 国产午夜福利片在线观看| 白白操白白在线免费观看| 加勒比系列一区二区在线观看 | 欧美av人人妻av人人爽蜜桃| 国产性情片一区二区三区| 99国产一区在线播放| 亚洲专区中文字幕视频| 天堂网中文字幕在线视频| 国产成人精品一区二区在线看| 欧美日韩三区在线观看| 黄片在线观看一区二区三区| 国产精品欧美日韩中文字幕| 欧美精品女同一区二区| 免费黄色一区二区三区| 国产大屁股喷水在线观看视频 | 中文日韩精品视频在线| 日本加勒比在线观看一区| 日本免费一本一二区三区| 九九热这里只有精品视频| 天堂热东京热男人天堂| 蜜桃臀欧美日韩国产精品| 日本人妻中出在线观看| 少妇高潮呻吟浪语91| 国产欧美日韩精品一区二区| 91欧美一区二区三区| 日韩精品毛片视频免费看| 人妻人妻人人妻人人澡|