我对Struts Web应用程序有一个非常奇怪的情况:
我有一个包含multipart / form-data enctype表单的页面。页面在 ISO-8859-1 中,根据tomcat环境,我有两种不同的情况:
生产环境是一台采用UTF-8编码的Linux机器。
:$ echo $ LANG
:$ es_ES.UTF-8
在Windows环境中,当表单被提交时,所有参数都被正确编码。
在linux环境中,当表单被提交时,Struts使用错误的编码检索参数(符号如“????”而不是“áéíóú”)。
Web应用程序的其余POST表单在两种环境中都能正常运行。问题只出在多部分表格中。
是否可以在Tomcat上配置多部分请求的编码?
答案 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);
}
使用此过滤器,它适用于两种环境。