深入理解Spring MVC之LocaleResolver(解析

2020-03-02  本文已影响0人  善思者_tin

一、概述

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

上一篇 下一篇

猜你喜欢

热点阅读