案例 1:我有一台装有 Ubuntu 和 Tomcat 7.x 的虚拟机。如果我将带有特殊字符的数据发布到服务器,我没问题。我有一个在任何 servlet 之前运行的过滤器,并将编码设置为 UTF-8 request.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()。
- 我已经在 tomcat setenv.sh 上设置了
JAVA_OPTS="$JAVA_OPTS -Djavax.servlet.request.encoding=UTF-8 -Dfile.encoding=UTF-8"
- 我检查了 HTTP header ,它们是正确的 (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 header : image with the headers
有什么想法吗? 谢谢。
最佳答案
我在 server.xml
文件的 Connector
元素中添加了 URIEncoding
属性,这是 tomcat 的配置文件。
我的代码如下。
<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"/>
关于java - 使用 UTF-8 编码的 Tomcat 7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42102058/