国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

SpringMVC之源碼分析--LocaleResolver(三)

VishKozus / 888人閱讀

摘要:概述我們繼續(xù)分析學(xué)習(xí),本節(jié)我們分析使用的是。與類似,運(yùn)用用戶會(huì)話實(shí)現(xiàn)功能。最后創(chuàng)建了群方便大家交流,可掃描加入,同時(shí)也可加我,共同學(xué)習(xí)共同進(jìn)步,謝謝

概述

我們繼續(xù)分析學(xué)習(xí)Spring MVC LocaleResolver,本節(jié)我們分析使用的是SessionLocaleResolver。
SessionLocaleResolver與CookieLocaleResolver類似,運(yùn)用用戶會(huì)話(session)實(shí)現(xiàn)LocaleResolver功能。

解析器(SessionLocaleResolver)

SessionLocaleResolver類繼承關(guān)系如下圖:

AbstractLocaleResolver抽象類,實(shí)現(xiàn)LocaleResolver,在該抽象類中定義默認(rèn)的Locale屬性

LocaleContextResolver接口,繼承LocaleResolver,增加了TimeZone操作

AbstractLocaleContextResolver抽象類,繼承AbstractLocaleResolver類并實(shí)現(xiàn)LocaleContextResolver接口,定義了默認(rèn)的TimeZone屬性

SessionLocaleResolver實(shí)現(xiàn)類,繼承AbstractLocaleContextResolver類,即完成操作Locale和TImeZone的功能

SessionLocaleResolver類允許從用戶請(qǐng)求會(huì)話中獲取Locale和TimeZone,和CookieLocaleResolver對(duì)比,該策略在Servlet容器的HttpSession中存儲(chǔ)客戶端使用Locale等設(shè)置,這是設(shè)置對(duì)于每個(gè)會(huì)話(session)都是臨時(shí)的,會(huì)話終止時(shí)信息丟失。
入口是resolveLocaleContext(final HttpServletRequest request)方法,即Spring MVC接收到客戶端請(qǐng)求后,如果配置了SessionLocaleResolver,會(huì)調(diào)用此方法,源碼如下:

// 解析Locale等信息方法
@Override
public LocaleContext resolveLocaleContext(final HttpServletRequest request) {
    // 返回Locale和TimeZone
    return new TimeZoneAwareLocaleContext() {
        @Override
        public Locale getLocale() {
            // 從請(qǐng)求的會(huì)話中返回Locale
            Locale locale = (Locale) WebUtils.getSessionAttribute(request, localeAttributeName);
            if (locale == null) {
                locale = determineDefaultLocale(request);
            }
            return locale;
        }
        @Override
        @Nullable
        public TimeZone getTimeZone() {
            // 從請(qǐng)求的會(huì)話中返回TimeZone
            TimeZone timeZone = (TimeZone) WebUtils.getSessionAttribute(request, timeZoneAttributeName);
            if (timeZone == null) {
                timeZone = determineDefaultTimeZone(request);
            }
            return timeZone;
        }
    };
}

// 設(shè)置Locale和TimeZone
@Override
public void setLocaleContext(HttpServletRequest request, @Nullable HttpServletResponse response,
        @Nullable LocaleContext localeContext) {

    Locale locale = null;
    TimeZone timeZone = null;
    if (localeContext != null) {
        locale = localeContext.getLocale();
        if (localeContext instanceof TimeZoneAwareLocaleContext) {
            timeZone = ((TimeZoneAwareLocaleContext) localeContext).getTimeZone();
        }
    }
    // 把Locale設(shè)置到session中
    WebUtils.setSessionAttribute(request, this.localeAttributeName, locale);
    // 把TimeZone設(shè)置到session中
    WebUtils.setSessionAttribute(request, this.timeZoneAttributeName, timeZone);
}
實(shí)戰(zhàn)

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

參考https://segmentfault.com/a/1190000014797899中的項(xiàng)目結(jié)構(gòu),本章與其一致。

配置文件

在Spring MVC配置文件中配置資源加載以及SessionLocaleResolver Bean,配置如下:



    
    
    
    
    


    
    
        
        
    



    
    
    
    

屬性文件

參考https://segmentfault.com/a/1190000014797899中的項(xiàng)目結(jié)構(gòu),本章與其一致。

控制器

編寫Controller控制器,以便測(cè)試,代碼如下:

@GetMapping(value = "/getSessionLocale", produces = "text/html;charset=UTF-8")
@ResponseBody
public String sessionLocaleResolver(HttpServletRequest request) {
    RequestContext requestContext = new RequestContext(request);
    String value = requestContext.getMessage("message.locale");
    HttpSession session = request.getSession();
    return "Session中設(shè)置的Locale是:"+session.getAttribute("locale")+" 
當(dāng)前使用的Locale是:" + requestContext.getLocale() + "
使用的資源Locale文件是:messages_" + value+".properties"; }

測(cè)試

瀏覽器發(fā)起請(qǐng)求http://localhost:8089/getSessionLocale?locale=en_US,結(jié)果如下圖:

變更參數(shù)locale的值,請(qǐng)求http://localhost:8089/getSessionLocale?locale=zh_CN,結(jié)果如下圖:

測(cè)試結(jié)果表明Locale設(shè)置成功,本例驗(yàn)證了SessionLocaleResolver的使用。

總結(jié)

使用SessionLocaleResolver與LocaleChangeInterceptor結(jié)合使用來設(shè)置國際化

大致流程為:根據(jù)請(qǐng)求的語言參數(shù),在過濾器中設(shè)置Locale,Spring就可以根據(jù)設(shè)置區(qū)不同的屬性文件來實(shí)現(xiàn)國際化

本系列主要分析了Spring MVC國際化的原理,有寫的不到位的地方還望好好包涵,有不書面不清晰的地方可留言,真心地希望跟大家一起交流探討。

最后創(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://m.specialneedsforspecialkids.com/yun/69351.html

相關(guān)文章

  • SpringMVC源碼分析--LocaleResolver和ThemeResolver應(yīng)用

    摘要:需求根據(jù)客戶端環(huán)境,界面顯示不同的國旗圖案。選擇的技術(shù)方案可利用提供的國際化和主題定制來解決。注意此時(shí)返回的中沒有國際化及主題相關(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源碼分析--LocaleResolver(一)

    摘要:概述為我們提供國際化支持,通過設(shè)置系統(tǒng)的環(huán)境,根據(jù)運(yùn)行環(huán)境使用不同的語言顯示。提供接口的作用是解析客戶端使用的地區(qū),目的是為了根據(jù)這些信息實(shí)現(xiàn)視圖多語言即國際化。接口繼承接口,增加時(shí)區(qū)支持。 概述 Spring MVC為我們提供國際化支持,通過設(shè)置系統(tǒng)的環(huán)境,根據(jù)運(yùn)行環(huán)境使用不同的語言顯示。Spring提供LocaleResolver接口的作用是解析客戶端使用的地區(qū)(Locale),目...

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

    摘要:概述上一篇就默認(rèn)的進(jìn)行了分析,詳細(xì)請(qǐng)參考,本節(jié)我們繼續(xù)分析學(xué)習(xí),主要分析解析器類繼承關(guān)系如下圖由上面類圖可知,繼承并實(shí)現(xiàn)接口,主要是操作的工具類,繼承接口,增加了信息操作。即通過實(shí)現(xiàn)的選擇。 概述 上一篇就Spring MVC默認(rèn)的LocaleResovler(AcceptHeaderLocaleResolver)進(jìn)行了分析,詳細(xì)請(qǐng)參考https://segmentfault.com/...

    RichardXG 評(píng)論0 收藏0
  • 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(一)

    摘要:此解析器不能動(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)資...

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

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

0條評(píng)論

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