【问题标题】:Set locale for current request in Java web app在 Java Web 应用程序中为当前请求设置语言环境
【发布时间】:2018-04-02 07:41:04
【问题描述】:

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

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

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

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

如果有一种方法可以将语言环境附加到当前请求对象,并且能够以某种方式访问​​应用程序中任何位置的请求对象实例,则更好的解决方案是。不知道有没有可能。

【问题讨论】:

    标签: java servlets locale


    【解决方案1】:

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

    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

    【讨论】:

    • 我喜欢第三种方法。但是如果我在请求中生成任何线程,我将不得不创建另一个 ThreadLocal(重复),或者如果可能,引用原始的 ThreadLocal。你知道这是否可能吗?
    • 如果您正在生成线程,那么您需要将信息传递给线程。
    猜你喜欢
    • 2018-08-09
    • 2012-02-15
    • 2010-09-09
    • 1970-01-01
    • 2011-03-24
    • 1970-01-01
    • 1970-01-01
    • 2014-05-26
    • 2015-07-11
    相关资源
    最近更新 更多