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

資訊專欄INFORMATION COLUMN

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

VishKozus / 879人閱讀

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

概述

我們繼續分析學習Spring MVC LocaleResolver,本節我們分析使用的是SessionLocaleResolver。
SessionLocaleResolver與CookieLocaleResolver類似,運用用戶會話(session)實現LocaleResolver功能。

解析器(SessionLocaleResolver)

SessionLocaleResolver類繼承關系如下圖:

AbstractLocaleResolver抽象類,實現LocaleResolver,在該抽象類中定義默認的Locale屬性

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

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

SessionLocaleResolver實現類,繼承AbstractLocaleContextResolver類,即完成操作Locale和TImeZone的功能

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

// 解析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;
        }
    };
}

// 設置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設置到session中
    WebUtils.setSessionAttribute(request, this.localeAttributeName, locale);
    // 把TimeZone設置到session中
    WebUtils.setSessionAttribute(request, this.timeZoneAttributeName, timeZone);
}
實戰

項目結構

參考https://segmentfault.com/a/1190000014797899中的項目結構,本章與其一致。

配置文件

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



    
    
    
    
    


    
    
        
        
    



    
    
    
    

屬性文件

參考https://segmentfault.com/a/1190000014797899中的項目結構,本章與其一致。

控制器

編寫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中設置的Locale是:"+session.getAttribute("locale")+" 
當前使用的Locale是:" + requestContext.getLocale() + "
使用的資源Locale文件是:messages_" + value+".properties"; }

測試

瀏覽器發起請求http://localhost:8089/getSessionLocale?locale=en_US,結果如下圖:

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

測試結果表明Locale設置成功,本例驗證了SessionLocaleResolver的使用。

總結

使用SessionLocaleResolver與LocaleChangeInterceptor結合使用來設置國際化

大致流程為:根據請求的語言參數,在過濾器中設置Locale,Spring就可以根據設置區不同的屬性文件來實現國際化

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

最后創建了qq群方便大家交流,可掃描加入,同時也可加我qq:276420284,共同學習、共同進步,謝謝!

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/69351.html

相關文章

  • SpringMVC源碼分析--LocaleResolver和ThemeResolver應用

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

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

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

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

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

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

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

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

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

    Ocean 評論0 收藏0

發表評論

0條評論

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