美文网首页
深入理解Spring MVC之LocaleResolver(解析

深入理解Spring MVC之LocaleResolver(解析

作者: 善思者_tin | 来源:发表于2020-03-02 10:04 被阅读0次

    一、概述

    在项目的开发过程中,可能会针对不同国家地区得用户提供不同的视图,比如针对美国用户可以提供一个视图,而针对中国用户则可以提供另一个视图。因此需要实现国际化,使用LocaleResolver即可以实现对用户不同视图切换的目的。

    二、LocaleResolver概述

    LocaleResolver是Spring提供的一个接口,其声明如下。

    public interface LocaleResolver {

        // 根据request对象根据指定的方式获取一个Locale,如果没有获取到,则使用用户指定的默认的Locale

         Locale resolveLocale(HttpServletRequest request);

        // 用于实现Locale的切换。比如SessionLocaleResolver获取Locale的方式是从session中读取,但如果

        // 用户想要切换其展示的样式(由英文切换为中文),那么这里的setLocale()方法就提供了这样一种可能

    void setLocale(HttpServletRequest request, @Nullable HttpServletResponse response,

            @Nullable Locale locale);

    }

    三、LocaleResolver的实现方式

     针对LocaleResolver,Spring提供了几种实现方式,分别如下:

    FixedLocaleResolver:在声明该resolver时,需要指定一个默认的Locale,在进行Locale获取时,始终返回该Locale,并且调用其setLocale()方法也无法改变其Locale;

    CookieLocaleResolver:其读取Locale的方式是在session中通过Cookie来获取其指定的Locale的,如果修改了Cookie的值,页面视图也会同步切换;

    SessionLocaleResolver:其会将Locale信息存储在session中,如果用户想要修改Locale信息,可以通过修改session中对应属性的值即可;

    AcceptHeaderLocaleResolver:其会通过用户请求中名称为Accept-Language的header来获取Locale信息,如果想要修改展示的视图,只需要修改该header信息即可。

       需要说明的是,Spring虽然提供的几个不同的获取Locale的方式,但这些方式处理FixedLocaleResolver以外,其他几个也都支持在浏览器地址栏中添加locale参数来切换Locale。对于Locale的切换,Spring是通过拦截器来实现的,其提供了一个LocaleChangeInterceptor,在该拦截器中的preHandle()方法中,Spring会读取浏览器参数中的locale参数,然后调用LocaleResolver.setLocale()方法来实现对Locale的切换。

    相关文章

      网友评论

          本文标题:深入理解Spring MVC之LocaleResolver(解析

          本文链接:https://www.haomeiwen.com/subject/sfiafhtx.html