0

我对 Struts Web 应用程序有一个非常奇怪的情况:

我有一个带有 multipart/form-data enctype 表单的页面。该页面位于ISO-8859-1中,根据 tomcat 环境,我有两种不同的情况:

  • 开发环境是 Windows 机器,默认编码为 windows。
  • 生产环境是一台采用 UTF-8 编码的 Linux 机器。

    :$ 回声 $LANG
    :$ es_ES.UTF-8

在 windows 环境下,提交表单时,所有参数都被正确编码。

在 linux 环境中,当提交表单时,Struts 检索编码错误的参数(符号如“????”而不是“áéíóú”)。

Web 应用程序的其余 POST 表单在这两种环境中都可以正常工作。问题仅在于多部分表单。

是否可以在 Tomcat 上配置多部分请求的编码?

4

1 回答 1

0

我怀疑问题可能是在多部分形式中,字符没有被编码并且tomcat不知道请求的编码,所以它试图用操作系统的编码来解码它们。

因此,一个对我有用的解决方案是开发一个过滤器来将请求的编码设置为 ISO-8895-1。

过滤器只设置编码:

    public void doFilter(ServletRequest request, ServletResponse aResponse,
            FilterChain filterChain) throws IOException, ServletException {

            request.setCharacterEncoding("ISO-8859-1");
            filterChain.doFilter(aRequest, aResponse);
    }

使用此过滤器,它可以在两种环境中运行。

于 2013-06-25T08:50:03.217 回答