0

案例 1:我有一个带有 Ubuntu 和 Tomcat 7.x 的虚拟机。如果我将带有特殊字符的数据发布到服务器就可以了。我有一个在任何 servlet 之前运行的过滤器并将编码设置为 UTF-8request.setCharacterEncoding("utf-8");

案例 2:在同一个虚拟机中,我安装了其他 Tomcat 7.x(回复)。现在我在 Tomcat 7.x 上安装了 JOSSO 1.8.6。在此之后,当我尝试提交带有特殊字符的 POST 数据时,servlet 无法正确解码request.getParameter("reportText");

我相信 JOSSO 有任何在我的编码过滤器之前运行的过滤器并使用使我的过滤器request.setCharacterEncoding("utf-8")无用的请求。

我试图解决的问题:

  • 我在 Tomcat 连接器标记 (server.xml) 处设置了 URIEncoding="utf-8"。
  • 我使用了 setCharacterEncoding()。
  • 我已经设置了JAVA_OPTS="$JAVA_OPTS -Djavax.servlet.request.encoding=UTF-8 -Dfile.encoding=UTF-8"tomcat setenv.sh
  • 我检查了 HTTP 标头,它们是正确的(Content-Type=text/plain;charset=utf-8)
  • 我已启用 Tomcat 过滤器setCharacterEncodingFilter

POST 请求由客户端 JSP 生成

<form id="xx" name="xx" onsubmit="return validateAndSubmitForm(this);" action="submitReport.do" method="post" enctype="application/x-www-form-urlencoded; charset: utf-8;"> xxx </form>

我的 JSP 标签在顶部:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

POST 标头: 带有标头的图像

有任何想法吗?谢谢你。

4

2 回答 2

2

我添加了文件元素的URIEncoding属性,即tomcat的配置文件。Connectorserver.xml

我的代码如下。

<Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8082" protocol="HTTP/1.1" redirectPort="8443"/>    
<Connector URIEncoding="UTF-8" port="8009" protocol="AJP/1.3" redirectPort="8443"/>
于 2018-07-02T23:43:29.673 回答
1

对我有用的解决方案是将 URIEncoding 添加到 ubuntu 配置的 server.xml 文件中。

<Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8082" protocol="HTTP/1.1" redirectPort="8443"/>    
<Connector URIEncoding="UTF-8" port="8009" protocol="AJP/1.3" redirectPort="8443"/>
于 2018-09-13T19:06:22.213 回答