Jsp pageContext.response.locale始终设置为en_US,即使浏览器的第一语言是ja

Jsp pageContext.response.locale始终设置为en_US,即使浏览器的第一语言是ja,jsp,locale,Jsp,Locale,我的应用程序运行在tomcat7上,支持ja和en语言环境 我有一个login.jsp文件,我想通过以下代码设置区域设置和绑定: 我的chrome浏览器设置为第一语言为日语,第二语言为英语:Accept language:ja,en;q=0.8 但是,每当加载login.jsp时,它总是将login.jsp显示为en_US。我试图显示pageContext.response.locale的内容,该值已由我们确认。显示的jsp的content language标题也确认了这一点:conten

我的应用程序运行在tomcat7上,支持ja和en语言环境

我有一个login.jsp文件,我想通过以下代码设置区域设置和绑定:

我的chrome浏览器设置为第一语言为日语,第二语言为英语:
Accept language:ja,en;q=0.8

但是,每当加载login.jsp时,它总是将login.jsp显示为en_US。我试图显示
pageContext.response.locale
的内容,该值已由我们确认。显示的jsp的
content language
标题也确认了这一点:
content language:en-US

当我显式设置
时,login.jsp能够正确地以日语显示。但是我不想强迫login.jsp总是设置为日语。我希望根据第一个支持的
Accept language
值显示login.jsp,在我的浏览器中,该值应该是
ja

如何根据应用程序支持的第一种
Accept语言
显示login.jsp

编辑:
我使用
进行了实验,结果显示
ja
作为区域设置。这让我很困惑。pageContext.response.locale不是应该使用来自请求区域设置的值进行设置吗

Servlet规范3.1,第5.5节“Servlet应该设置响应的区域设置和字符编码。”因此这是应用程序的责任


我在Servlet或JSP规范中没有看到任何要求根据请求区域设置响应区域设置的内容。

针对Mark Thomas的评论,spring的DispatcherServlet.java的render()方法使用解析机制设置请求响应的区域设置:

// Determine locale for request and apply it to the response.
Locale locale = this.localeResolver.resolveLocale(request);
response.setLocale(locale);
LocaleResolver默认为AcceptHeaderLocaleResolver,它只返回请求区域设置,如下所示:

public Locale resolveLocale(HttpServletRequest request) {
    return request.getLocale();
}

谢谢你,马克!我使用的是SpringMVC,我的印象是Spring会自动为我处理任何请求。在阅读了您的答案之后,我发现只有当请求通过Spring DispatcherServlet时,Spring才会自动执行该操作。但不幸的是,在我的情况下,login.jsp是直接访问的,不通过DispatcherServlet,而是通过默认的servlet,该servlet没有设置响应区域设置。你是怎么解决的?短暂性脑缺血发作