成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

SpringMVC之源碼分析--ThemeResolver(一)

Ocean / 2719人閱讀

摘要:此解析器不能動(dòng)態(tài)設(shè)置主題。實(shí)戰(zhàn)目標(biāo)練習(xí)使用解析器,最終效果如下項(xiàng)目結(jié)構(gòu)在下創(chuàng)建了主題文件夾及主題文件,下創(chuàng)建了靜態(tài)資源文件。是默認(rèn)的解析器,再此配置是為了自定義屬性值,即屬性文件名稱。其實(shí)此解析器與的實(shí)現(xiàn)原理基本相同。

概述

主題就是系統(tǒng)的整體樣式或風(fēng)格,可通過Spring MVC框架提供的主題(theme)設(shè)置應(yīng)用的整體樣式風(fēng)格,提高用戶體驗(yàn)。Spring MVC的主題就是一些靜態(tài)資源的集合,即包括樣式及圖片,用來控制應(yīng)用的視覺風(fēng)格。

Spring MVC主題包括兩部分內(nèi)容,分別是Theme和ThemeResolver,下面是對(duì)兩部分內(nèi)容的介紹:

Theme

應(yīng)用中使用Theme主題時(shí),必須實(shí)現(xiàn)org.springframework.ui.context.ThemeSource接口,web應(yīng)用上下文WebApplicationContext接口繼承自ThemeSource,但是實(shí)現(xiàn)功能委派給具體的實(shí)現(xiàn),默認(rèn)的委派給org.springframework.ui.context.support.ResouceBundleThemeSource類實(shí)現(xiàn),此類默認(rèn)從classpath加載主題屬性文件。無論是自定義ThemeSource接口的實(shí)現(xiàn)還是通過配置屬性文件路勁的ResourceBundleThemeSource實(shí)現(xiàn),都需要在Spring上下文中定義此bean,并且bean的id必須為themeSource,Spring會(huì)自動(dòng)發(fā)現(xiàn)并使用。

ThemeResolver

在Spring上下文中定義了Theme后,DispatcherServlet會(huì)在Spring容器中查找id為themeResolver的Bean并使用。ThemeResolver工作原理與LocaleResolver工作原理基本是一樣的,它在request中查找theme主題并可以修改request的theme主題。Spring提供了如下的主題解析器:

FixedThemeResolver 默認(rèn)主題解析器,使用固定的主題,通過defaultThemeName屬性設(shè)置,即此屬性指定主題屬性文件的文件名。此解析器不能動(dòng)態(tài)設(shè)置主題。

SessionThemeResolver 通過用戶會(huì)話來保持主題,每個(gè)會(huì)話(session)僅需要設(shè)置一次,所有請(qǐng)求共享主題,但是不能兩個(gè)會(huì)話共享。

CookieThemeResolver 使用客戶端cookie存儲(chǔ)的主題

Spring提供了ThemeChangeInterceptor攔截器,通過request參數(shù)控制改變用戶請(qǐng)求的主題。

FixedThemeResolver

默認(rèn)的主題解析器(在DispatcherServlet.properties中配置默認(rèn)策略),實(shí)現(xiàn)ThemeResolver接口,使用固定的主題,主題的名字(就是主題的屬性文件名)可通過defaultThemeName屬性指定,該值默認(rèn)是theme,該類比較簡(jiǎn)單,源碼如下,做下注釋介紹:

public class FixedThemeResolver extends AbstractThemeResolver {
    // 解析主題文件名
    @Override
    public String resolveThemeName(HttpServletRequest request) {
        // 返回主題文件名,默認(rèn)值為theme(在父類中定義)
        return getDefaultThemeName();
    }
    // 設(shè)置主題文件名,此解析器不能設(shè)置。
    @Override
    public void setThemeName(
            HttpServletRequest request, @Nullable HttpServletResponse response, @Nullable String themeName) {
        throw new UnsupportedOperationException("Cannot change theme - use a different theme resolution strategy");
    }

}
實(shí)戰(zhàn)

目標(biāo)

練習(xí)使用FixedThemeResolver解析器,最終效果如下:

項(xiàng)目結(jié)構(gòu)

在resources下創(chuàng)建了主題文件夾及主題文件,webapp下創(chuàng)建了靜態(tài)資源文件。

主題配置文件(myTheme.properties)

指定了一張測(cè)試圖片,如下:

background=/img/wolf.jpg

Spring配置文件

配置themeSource和themeResolver,如下:





    
    
    




    
    



    
    

說明:

1、ResourceBundleThemeSource的屬性basenamePrefix即為主題屬性文件所在目錄名稱,其后必須有"."或"/"。

2、FixedThemeResolver是Spring默認(rèn)的解析器,再此配置是為了自定義defaultThemeName屬性值,即屬性文件名稱。

視圖

本例使用jsp視圖展示,代碼如下:

<%@ page contentType="text/html;charset=UTF-8" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>


    Spring MVC Theme



    " style="width: 500px;height: 300px;">



控制器

為了測(cè)試,編寫Controller控制器,跳轉(zhuǎn)至jsp頁(yè)面,代碼如下:

@RequestMapping("/theme")
public String theme(){
    return "theme";
}

至此,啟動(dòng)程序并訪問/theme地址即可看到之前的效果圖。

總結(jié)

本例主要分析了Spring MVC對(duì)Theme整體支持,并實(shí)戰(zhàn)了默認(rèn)的ThemeResolver,后續(xù)繼續(xù)分析SessionThemeResolver和CookieThemeResolver。其實(shí)此解析器與LocaleResolver的實(shí)現(xiàn)原理基本相同。

最后創(chuàng)建了qq群方便大家交流,可掃描加入,同時(shí)也可加我qq:276420284,共同學(xué)習(xí)、共同進(jìn)步,謝謝!

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/69386.html

相關(guān)文章

  • SpringMVC源碼分析--ThemeResolver(三)

    摘要:類繼承關(guān)系如下該類實(shí)現(xiàn)接口,實(shí)現(xiàn)解析設(shè)置主題功能繼承類,以具備操作功能。新增并更換一張不同的圖片。配置文件只要替換即可,代碼如下配置默認(rèn)的主題文件視圖和控制器視圖和控制器代碼與上一章一致,參考上章代碼。 概述 上節(jié)介紹了SessionThemeResolver解析器,本章分析下CookieThemeResolver,兩個(gè)解析器實(shí)現(xiàn)的功能是一樣的,只是使用的主題載體有區(qū)別而已,Sessi...

    OldPanda 評(píng)論0 收藏0
  • SpringMVC源碼分析--ThemeResolver(二)

    摘要:類實(shí)現(xiàn)接口,使用用戶會(huì)話中的主題。新增并更換一張不同的圖片。通過關(guān)閉瀏覽器,然后再訪問進(jìn)行測(cè)試總結(jié)本章通過攔截器和結(jié)合實(shí)現(xiàn)了通過請(qǐng)求參數(shù)控制會(huì)話主題。 概述 本章繼續(xù)分析ThemeResolver的另一個(gè)實(shí)現(xiàn)類SessionThemeResolver,需要了解Spring MVC Theme情況的,可參考上一篇文章https://segmentfault.com/a/119000001...

    antyiwei 評(píng)論0 收藏0
  • SpringMVC源碼分析--LocaleResolver和ThemeResolver應(yīng)用

    摘要:需求根據(jù)客戶端環(huán)境,界面顯示不同的國(guó)旗圖案。選擇的技術(shù)方案可利用提供的國(guó)際化和主題定制來解決。注意此時(shí)返回的中沒有國(guó)際化及主題相關(guān)的信息。修改請(qǐng)求參數(shù)的值為荷蘭,即后再發(fā)起請(qǐng)求,結(jié)果如下與預(yù)期一致,測(cè)試通過。 概述 以上分析了Spring MVC的LocaleResolver和ThemeResolver兩個(gè)策略解析器,在實(shí)際項(xiàng)目中很少使用,尤其是ThemeResolver,花精力去分析...

    qpal 評(píng)論0 收藏0
  • SpringMVC源碼分析--請(qǐng)求過程

    摘要:概述根據(jù)規(guī)范,當(dāng)用戶請(qǐng)求到達(dá)應(yīng)用時(shí),由的方法進(jìn)行處理,對(duì)于而言,處理用戶請(qǐng)求的入口為,通過其父類的攔截處理。最后創(chuàng)建了群方便大家交流,可掃描加入,同時(shí)也可加我,共同學(xué)習(xí)共同進(jìn)步,謝謝 概述 根據(jù)Servlet規(guī)范,當(dāng)用戶請(qǐng)求到達(dá)應(yīng)用時(shí),由Servlet的service()方法進(jìn)行處理,對(duì)于Spring MVC而言,處理用戶請(qǐng)求的入口為DispatcherServlet,通過其父類Fra...

    zxhaaa 評(píng)論0 收藏0
  • SpringMVC源碼分析--View(

    摘要:概述通過上幾章的介紹知道了的作用,即就是把返回的邏輯視圖名稱解析為視圖對(duì)象。進(jìn)而通過對(duì)象的視圖渲染把最終的結(jié)果展現(xiàn)給用戶。運(yùn)用模板技術(shù)把數(shù)據(jù)和視圖分開,同時(shí)提供支持很多的模板技術(shù),比如等等。 概述 通過上幾章的介紹知道了ViewResolver的作用,即ViewResolver就是把handler返回的邏輯視圖名稱解析為視圖View對(duì)象。進(jìn)而通過View對(duì)象的視圖渲染把最終的結(jié)果展現(xiàn)給...

    jerryloveemily 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<