【问题标题】:Retrieve browser locale from httpsession?从 httpsession 中检索浏览器区域设置?
【发布时间】:2011-01-26 08:58:41
【问题描述】:

是否可以从 httpsession 对象 (javax.servlet.http.HttpSession) 派生首选语言? 可以从 servletrequest 中获取它,但我没有。 感谢您的任何想法。 斯文

【问题讨论】:

    标签: java browser locale httpsession


    【解决方案1】:

    正如its Javadoc 所示,没有任何方法可以做到这一点。

    要么直接从请求中获取(首选),要么自己将其存储为会话的属性。

    【讨论】:

      【解决方案2】:

      通常我们不能从一个 HttpSession 中获取相关的 httpRequest 对象。但是,有一种解决方法。

      你可以创建一个过滤器,在过滤器中,你拥有一切,httpSession、httpRequest 等。然后创建一个 ThreadLocal 变量来存储 HttpRequest 对象。或者只是在以后的方法中存储一些您需要的请求属性。

      你的方法应该可以得到ThreadLocal的值。 HttpRequest,或语言设置或您之前存储的任何内容。

      不知道这是否回答了你的问题。

      【讨论】:

        【解决方案3】:

        用户的首选语言环境可用作请求标头(“Accept-Language”)。它由用户的浏览器根据其偏好自动填写。 然后,您可以将此信息存储在用户的会话中,并在适当的时候检索它。

        【讨论】:

        • 您可以这样做,但是如果用户在会话建立后更改浏览器的首选语言会发生什么?所以你需要在每次请求时刷新它。
        • 所以,您需要检查每个请求。您可以使用过滤器实现此目的。
        • 我同意过滤器的想法。过滤器可以使用区域信息填充用户的会话。