java - 在 Java Web 应用程序中设置当前请求的区域设置

标签 java servlets locale

在我的 Java Web 应用程序中,我想设置当前请求的区域设置,并使其在请求期间在整个应用程序中可用。这意味着无论代码位于什么类或方法中,区域设置都是可用的。我也不想从客户端的浏览器检索区域设置。它是从内部数据库检索的。

无法使用 Locale.setDefault,因为它适用于所有请求。必须为每个客户端请求设置区域设置,具体取决于为发出请求的客户端存储的区域设置。

单例也不起作用,因为这会使所有请求都相同。

一种解决方案是在调用 doGet 或 doPost 时简单地检索区域设置并将其从一种方法传递到另一种方法。但这确实很难看。

更好的解决方案是,如果有一种方法可以将区域设置附加到当前请求对象,并以某种方式能够在应用程序内的任何位置访问请求对象的实例。不知道可不可以。

最佳答案

我看到了实现这一目标的三种方法

  1. 添加区域设置作为请求属性并将请求传递给您的方法。不是一个很好的设计,但它会起作用
  2. 如果您使用的是 spring,那么您可以定义一个 @RequestScoped bean 并在那里分配值。每个请求都会创建一个新的 bean 实例 https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/context/annotation/RequestScope.html
  3. 使用ThreadLocal。您分配的任何内容都将受到限制并且对于特定线程(请求)有效。一定要清理干净。 https://docs.oracle.com/javase/7/docs/api/java/lang/ThreadLocal.html

关于java - 在 Java Web 应用程序中设置当前请求的区域设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49607244/

相关文章:

java - 存储并遍历排序的文件hdfs/spark

java - 如何参数化 Web 应用程序(不是 servlet)的初始化

javascript - 如何在highcharts中设置动态数据

java - 使用本地化对字符串列表进行排序

android - 更改应用程序的语言

API 24 中的 Android RTL 问题及更高版本的区域设置更改

java - 如何编写多个 if 语句

java - 是否可以与 JADE 中的某些代理进行通信

java - 如何将用户的 'firstname' 添加到 cassandra,在尝试添加数据时获取未知标识符名字

java - Spring 对象池和线程阻塞