在Struts 1中编码multipart / form-data

时间:2013-06-25 08:38:02

标签: encoding character-encoding struts

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

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

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

    :$ echo $ LANG
    :$ es_ES.UTF-8

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

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

Web应用程序的其余POST表单在两种环境中都能正常运行。问题只出在多部分表格中。

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

1 个答案:

答案 0 :(得分: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);
    }

使用此过滤器,它适用于两种环境。