【问题标题】:Set a locale for a war different from JVM's?为与 JVM 不同的战争设置语言环境?
【发布时间】:2010-01-31 09:15:37
【问题描述】:

我的 tomcat6 正在使用语言环境 en_US 的 JVM 中运行。 我需要部署几个 webapps 并且我希望每个 webapps(打包在 war 文件中)具有不同的默认语言环境。这可能吗?

【问题讨论】:

  • 那么这些都不是正确的答案吗?你找到答案了吗?

标签: java tomcat web-applications internationalization


【解决方案1】:

没有。但是,您可以在每个 JSP 页面上显式设置区域设置。将语言环境存储在会话对象或资源中。

如果您使用 sesison 对象,您的用户可能有自己的、个人的语言环境,这在国际环境中可能会很好。

【讨论】:

    【解决方案2】:

    (警告:我还没有在 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 在requestresponse 上插入一个外观@ 和 ServletResponseWrapper 实用程序类。这些是只包装requestresponse 实例并传递给它们的基类。这意味着您可以替换传递给链中下一个过滤器的requestresponse 实例,使用您自己的包装器子类的实例,让您覆盖您的任何请求或响应方法需要参与。

    我使用过滤器(和包装器)来做各种事情,它们很有效,非常适合特定于应用程序、配置驱动的东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-07
      • 1970-01-01
      • 2013-01-10
      • 2020-04-05
      • 1970-01-01
      • 2010-09-09
      相关资源
      最近更新 更多