从.Net到Java学习第八篇——SpringBoot实现session共享和国际化

SpringBoot Session共享

修改pom.xml添加依赖

        <!--spring session-->
        <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-data-redis</artifactId>
        </dependency>

添加配置类RedisSessionConfig

@Configuration
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 60)//默认是1800秒过期,这里测试修改为60秒
public class RedisSessionConfig {
}

添加一个控制器类SessionController来进行测试

@RestController
public class SessionController {
    @RequestMapping("/uid")
    String uid(HttpSession session) {
        UUID uid = (UUID) session.getAttribute("uid");
        if (uid == null) {
            uid = UUID.randomUUID();
        }
        session.setAttribute("uid", uid);
        return session.getId();
    }
}

先访问http://localhost:8083/boot/uid

然后修改配置文件application.yml

spring:
  profiles:
    active: test

重新运行IDEA,test配置文件配置的端口是8085,所以浏览器输入http://localhost:8085/boot/uid

我们看到两个uid是一样的。

在这里我是使用spring boot redis来实现session共享,你还可以配合使用nginx进行负载均衡,同时共享session。

关于nginx可以参考我的另一篇文章:Nginx详解-服务器集群

spring boot 国际化

在spring boot中实现国际化是很简单的的一件事情。

(1)在resources目录下面,我们新建几个资源文件,messages.properties相当于是默认配置的,当其它配置中找不到记录的时候,最后会再到这个配置文件中去查找。

messages.properties
messages_en_US.properties
messages_zh_CN.properties

依次在这三个配置文件中添加如下配置值:

msg=我是中国人
msg=I‘m Chinese
msg=我是中国人

添加完之后,会自动将这几个文件包在一块

需要注意的是这个命名是有讲究的,messages.properties部分是固定的,不同语言的话,我们可以在它们中间用_区分。为什么是固定的命名,因为源码是硬编码这样命名的。

(2)新建一个配置文件LocaleConfig

@Configuration
@EnableAutoConfiguration
@ComponentScan
public class LocaleConfig extends WebMvcConfigurerAdapter {

    @Bean
    public LocaleResolver localeResolver() {
        SessionLocaleResolver slr = new SessionLocaleResolver();
        // 默认语言
        slr.setDefaultLocale(Locale.CHINA);
        return slr;
    }

    @Bean
    public LocaleChangeInterceptor localeChangeInterceptor() {
        LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
        // 参数名
        lci.setParamName("lang");
        return lci;
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(localeChangeInterceptor());
    }
}

(3)在控制器中,我们添加测试用的方法

    //    i18n
    @RequestMapping("/")
    public String i18n() {
        return "i18n";
    }

    @RequestMapping("/changeSessionLanauage")
    public String changeSessionLanauage(HttpServletRequest request, HttpServletResponse response, String lang){
        System.out.println(lang);
        LocaleResolver localeResolver = RequestContextUtils.getLocaleResolver(request);
        if("zh".equals(lang)){
            localeResolver.setLocale(request, response, new Locale("zh", "CN"));
        }else if("en".equals(lang)){
            localeResolver.setLocale(request, response, new Locale("en", "US"));
        }
        return "redirect:/";
    }

(4)添加视图来展示,在templates下新建文件i18n.html,通过#可以直接获取国际化配置文件中的配置项的值。

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8"/>
    <title>$Title$</title>
</head>
<body>
<a href="/changeSessionLanauage?lang=en">English(US)</a>
<a href="/changeSessionLanauage?lang=zh">简体中文</a>
<br />

<h3 th:text="#{msg}"></h3>
<h4 th:text="${message}"></h4>
</body>
</html>

(5)运行查看效果

原文地址:https://www.cnblogs.com/jiekzou/p/9214151.html

时间: 2024-10-09 13:20:21

从.Net到Java学习第八篇——SpringBoot实现session共享和国际化的相关文章

从.Net到Java学习第十一篇——SpringBoot登录实现

通过前面10篇文章的学习,相信我们对SpringBoot已经有了一些了解,那么如何来验证我们的学习成果呢?当然是通过做项目来证明啦!所以从这一篇开始我将会对之前自己做的.net项目用java来重写.这一篇,我们来现实登录模块. 一提到登录,我们首先想到的基本的功能点就有如下: 输入:用户名.密码.验证码. 登录成功后,跳转到后台.如果未登录直接访问后台,将会跳转到登录页面. 这里暂不考虑复杂的登录实现. 技术选型,沿用前面用到的知识点.那么这里较之于之前的文章,新用到的一个就是图片验证码,一个就

学习java随笔第八篇:封装、继承、多态

java和c#一样都是面向对象的语言. 面向对象的语言有三大特征:封装.继承.多态 封装 封装:隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别. class Person2 { private String name; public void setName(String name) { this.name=name; } public String getName() { return name; } private String sex; public voi

java学习笔记 第二篇 核心技术(二)

第十四章 集合类 集合类用来存放对象的引用.继承关系如下图: 14.1 Collection 接口 是层次结构中的根接口,构成Collection的单位称为元素.Collection接口不能直接使用,但该接口提供了添加元素.删除元素.管理数据的方法. Collection接口常用方法: 14.2 List 集合 包括List接口以及List集合的所有实现类.List集合中的元素允许重复,各元素循序就是对象插入的顺序 1.List接口,两个重要方法: get(int index): 获取指定索引位

从.Net到Java学习第四篇——spring boot+redis

从.Net到Java学习第一篇——开篇 从.Net到Java学习第二篇——IDEA and start spring boot 从.Net到Java学习第三篇——spring boot+mybatis+mysql 接上一篇,本篇使用到的框架redis.FastJSON. 环境准备 安装redis,下图是我本机的redis绿色版,你可以网上自行下载安装,如果不知道如何怎么操作,可以移步到我的另一篇文章:ASP.NET Redis 开发 以管理员身份打开CMD窗口: C:\Users\zouqj>e

Java学习之Servlet篇

<JAVA遇见HTML——Servlet篇> Servlet 生命周期:Servlet 加载--->实例化--->服务--->销毁. init():在Servlet的生命周期中,仅执行一次init()方法.它是在服务器装入Servlet时执行的,负责初始化Servlet对象.可以配置服务器,以在启动服务器或客户机首次访问Servlet时装入Servlet.无论有多少客户机访问Servlet,都不会重复执行init(). service():它是Servlet的核心,负责响应客

java学习——入门扫盲篇

概要 近期这几天開始进入java的学习,接触到了好多不是非常了解的概念,像JDK.JRE.JVM.GC等等这些,放到这里来进行下扫盲. java java是一种面向对象程序设计语言和java平台的总称,即java包含java语言和java平台. java语言 java语言跟我们曾经接触过的C#.C++语言一样都是面向对象的语言,拥有面向对象语言的基本特点,java语言也有它自身的特点.比如添加了垃圾回收的一些特点. 同一时候java语言的编程风格跟C#.C++也特别的相似,全部java语言是比較

java学习笔记-JavaWeb篇

JavaWEB篇 1 Tomcat的安装和配置 1.部署并启动tomcat服务器 1). 解压tomcat安装包到一个非中文目录下 2). 配置一个环境变量 java_home(指向jdk安装的根目录)或jre_home 3). 通过tomcat安装目录bin目录下的startup.bat,启动服务器 4). 可以在浏览器中输入localhost:8080来检验Tomcat安装是否正确 5). 若已经启动了一个Tomcat应用,若再启动同一个Tomcat应用,会抛出异常: Java.net.Bi

小码蚁java学习日记——起航篇

很久很久以前,大约公元2005年就知道知晓java. 一直都有过了解,但从未系统学习. 今天,就在今天,这是一个伟大的日子,伟大的12月18号,我终于坚定了利用工作之余学习java的决心,一个phper 就要变身了. 首先选个方向吧,其实这个好真麻烦,近水楼台先得月,还是写web吧. 好吧,今天就这么多! 以后还希望大家多多指点小的,助我在java的道路上越走越远.

Java学习笔记——基础篇

Tips1:eclipse中会经常用到System.out.println方法,可以先输入syso,然后eclipse就会自动联想出这个语句了!! 学习心得: *初始化 *包.权限控制 1.包(package)概念的引入是为了防止类名冲突.package语句要作为java源文件的第一条语句. 2.两个类在同一个包中,可以相互调用:两个类在不同的包中,若想引用则必须通过import语句导入,格式为:import 包名.子包名.类名. 3.如果在程序中同时导入了两个包的同类名,则在使用时必须明确的写