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

时间:2018-04-02 07:41:04

标签: java servlets locale

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

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

单身人士不会工作,因为这会使所有请求都相同。

一种解决方案是在调用doGet或doPost时简单地检索语言环境,并将其从一种方法传递到另一种方法。但这真的很难看。

更好的解决方案是,如果有办法将语言环境附加到当前请求对象,并以某种方式能够在应用程序内的任何位置访问请求对象的该实例。我不知道这是否可能。

1 个答案:

答案 0 :(得分:1)

我看到你可以通过三种方式实现这个目标

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