Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java web app中设置当前请求的区域设置_Java_Servlets_Locale - Fatal编程技术网

在Java web app中设置当前请求的区域设置

在Java web app中设置当前请求的区域设置,java,servlets,locale,Java,Servlets,Locale,在我的Java web应用程序中,我想为当前请求设置语言环境,并在请求期间使其在整个应用程序中可用。这意味着无论代码在哪个类或方法中,区域设置都是可用的。我也不想从客户端的浏览器中检索语言环境。它是从内部数据库检索的 无法使用Locale.setDefault,因为它适用于所有请求。根据为发出请求的客户端存储的区域设置,必须为每个客户端请求设置区域设置 单例也不起作用,因为这会使所有请求都是一样的 一种解决方案是在调用doGet或doPost时简单地检索区域设置,并将其从一个方法传递到另一个方法

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

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

单例也不起作用,因为这会使所有请求都是一样的

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


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

我认为有三种方法可以做到这一点

  • 添加区域设置作为请求属性,并将请求传递给您的方法。不是一个好的设计,但它会工作
  • 如果您使用的是spring,那么您可以定义@RequestScoped bean并在那里赋值。每个请求将创建一个新的bean实例
  • 使用
    ThreadLocal
    。您分配的任何内容对于特定线程(请求)都是有限和有效的。一定要打扫卫生
    我喜欢第三种方法。但是如果我在一个请求中产生任何线程,我必须创建另一个ThreadLocal(副本),或者如果可能,引用原始ThreadLocal。您知道这是否可行吗?如果您正在生成线程,则需要将信息传递给该线程。