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

資訊專欄INFORMATION COLUMN

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

VishKozus / 892人閱讀

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

概述

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

解析器(SessionLocaleResolver)

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

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

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

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

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

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

// 解析Locale等信息方法
@Override
public LocaleContext resolveLocaleContext(final HttpServletRequest request) {
    // 返回Locale和TimeZone
    return new TimeZoneAwareLocaleContext() {
        @Override
        public Locale getLocale() {
            // 從請求的會話中返回Locale
            Locale locale = (Locale) WebUtils.getSessionAttribute(request, localeAttributeName);
            if (locale == null) {
                locale = determineDefaultLocale(request);
            }
            return locale;
        }
        @Override
        @Nullable
        public TimeZone getTimeZone() {
            // 從請求的會話中返回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);
}
實戰(zhàn)

項目結(jié)構(gòu)

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

配置文件

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



    
    
    
    
    


    
    
        
        
    



    
    
    
    

屬性文件

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

控制器

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

@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")+" 
當前使用的Locale是:" + requestContext.getLocale() + "
使用的資源Locale文件是:messages_" + value+".properties"; }

測試

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

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

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

總結(jié)

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

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

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

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

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

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

相關(guān)文章

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

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

    qpal 評論0 收藏0
  • SpringMVC源碼分析--LocaleResolver(一)

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

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

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

    RichardXG 評論0 收藏0
  • SpringMVC源碼分析--ThemeResolver(

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

    OldPanda 評論0 收藏0
  • SpringMVC源碼分析--ThemeResolver(一)

    摘要:此解析器不能動態(tài)設(shè)置主題。實戰(zhàn)目標練習(xí)使用解析器,最終效果如下項目結(jié)構(gòu)在下創(chuàng)建了主題文件夾及主題文件,下創(chuàng)建了靜態(tài)資源文件。是默認的解析器,再此配置是為了自定義屬性值,即屬性文件名稱。其實此解析器與的實現(xiàn)原理基本相同。 概述 主題就是系統(tǒng)的整體樣式或風(fēng)格,可通過Spring MVC框架提供的主題(theme)設(shè)置應(yīng)用的整體樣式風(fēng)格,提高用戶體驗。Spring MVC的主題就是一些靜態(tài)資...

    Ocean 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<