【发布时间】:2010-01-31 09:15:37
【问题描述】:
我的 tomcat6 正在使用语言环境 en_US 的 JVM 中运行。 我需要部署几个 webapps 并且我希望每个 webapps(打包在 war 文件中)具有不同的默认语言环境。这可能吗?
【问题讨论】:
-
那么这些都不是正确的答案吗?你找到答案了吗?
标签: java tomcat web-applications internationalization
我的 tomcat6 正在使用语言环境 en_US 的 JVM 中运行。 我需要部署几个 webapps 并且我希望每个 webapps(打包在 war 文件中)具有不同的默认语言环境。这可能吗?
【问题讨论】:
标签: java tomcat web-applications internationalization
没有。但是,您可以在每个 JSP 页面上显式设置区域设置。将语言环境存储在会话对象或资源中。
如果您使用 sesison 对象,您的用户可能有自己的、个人的语言环境,这在国际环境中可能会很好。
【讨论】:
(警告:我还没有在 Java 中完成很多语言环境的工作。)
如果可能的话,您希望避免在 JSP 或 servlet 的实际代码中这样做。如果没有 直接 配置方式来做到这一点(这似乎令人惊讶),我敢打赌有一个 几乎 直接配置方式:你可以用过滤器来做到这一点。
创建javax.servlet.Filter 的子类,将其安装在相关应用程序的web.xml 中,并在doFilter 实现中的ServletResponse 上调用setLocale。或类似的规定。请注意,这不会阻止您为特定用户执行特定操作,以便他们可以拥有自己的语言环境(如果有用的话)。
如果您之前没有做过过滤器,那么它们非常简单(而且非常强大)。您只需实现一个三方法接口,其中两个通常只是空存根,除非您有必须获取和释放的资源,第三个 (doFilter) 如下所示:
public void doFilter(
ServletRequest request,
ServletResponse response,
FilterChain chain
)
throws IOException, ServletException
{
// Do your stuff here; so for instance:
response.setLocale(...);
// Chain to the next filter
chain.doFilter(request, response);
}
然后web.xml 部分看起来像这样:
<filter>
<filter-name>My Servlet Filter</filter-name>
<filter-class>com.example.MyServletFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>My Servlet Filter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
关于过滤器的一个很酷的事情是,如果需要(我认为在这种情况下您不会这样做,但谁知道),您可以通过@987654324 在request 或response 上插入一个外观@ 和 ServletResponseWrapper 实用程序类。这些是只包装request 或response 实例并传递给它们的基类。这意味着您可以替换传递给链中下一个过滤器的request 或response 实例,使用您自己的包装器子类的实例,让您覆盖您的任何请求或响应方法需要参与。
我使用过滤器(和包装器)来做各种事情,它们很有效,非常适合特定于应用程序、配置驱动的东西。
【讨论】: