在我的 Java Web 应用程序中,我想设置当前请求的区域设置,并使其在请求期间在整个应用程序中可用。这意味着无论代码位于什么类或方法中,区域设置都是可用的。我也不想从客户端的浏览器检索区域设置。它是从内部数据库检索的。
无法使用 Locale.setDefault,因为它适用于所有请求。必须为每个客户端请求设置区域设置,具体取决于为发出请求的客户端存储的区域设置。
单例也不起作用,因为这会使所有请求都相同。
一种解决方案是在调用 doGet 或 doPost 时简单地检索区域设置并将其从一种方法传递到另一种方法。但这确实很难看。
更好的解决方案是,如果有一种方法可以将区域设置附加到当前请求对象,并以某种方式能够在应用程序内的任何位置访问请求对象的实例。不知道可不可以。
最佳答案
我看到了实现这一目标的三种方法
- 添加区域设置作为请求属性并将请求传递给您的方法。不是一个很好的设计,但它会起作用
- 如果您使用的是 spring,那么您可以定义一个 @RequestScoped bean 并在那里分配值。每个请求都会创建一个新的 bean 实例 https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/context/annotation/RequestScope.html
- 使用
ThreadLocal
。您分配的任何内容都将受到限制并且对于特定线程(请求)有效。一定要清理干净。 https://docs.oracle.com/javase/7/docs/api/java/lang/ThreadLocal.html
关于java - 在 Java Web 应用程序中设置当前请求的区域设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49607244/