Tomcat 7.0 HTTP发布请求与Windows Server 2008 R2的utf-8问题

时间:2014-12-12 21:24:34

标签: java jsp tomcat utf-8 windows-server-2008-r2

我有一个非常奇怪的问题,我在Tomcat 7.0实例上有一个Web应用程序(JSP文件)。我无法弄清楚为什么它没有正确发送POST UTF-8请求。 我已经在Windows Server 2008 R2上安装了它。我已在server.xml和web.xml中配置了所有必需的设置,例如URIEncoding = UTF-8用于标记,并在web.xml中设置过滤器。

在我的JSP中,我正在调用一个接受POST方法的.Net Web服务:

private String urlcallPOST(String content){
    String result="";
    try
{
String urlParameters =  "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>"+
"<SOAP-ENV:Envelope"+
"    xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\""+
"    xmlns:ns1=\"http://tempuri.org/\">"+
"    <SOAP-ENV:Body>"+
"        <ns1:Message>"+
"            <ns1:contentList>"+
"                <ns1:string>"+content+"</ns1:string>"+
"            </ns1:contentList>"+
"        </ns1:Message>" +
"    </SOAP-ENV:Body>" +
"</SOAP-ENV:Envelope>";


URL url = new URL("http://theIP/webservice.asmx"); 
URLConnection connection =  url.openConnection();          
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setRequestProperty("Content-Type","text/xml; charset=utf-8");
connection.setRequestProperty("SOAPAction", "\"http://tempuri.org/Message\"");

byte[] buf = urlParameters.getBytes();
DataOutputStream os = new DataOutputStream(connection.getOutputStream());
os.write(buf, 0, buf.length);


BufferedReader reader = new BufferedReader(new    InputStreamReader(connection.getInputStream()));
String line = null;
while ((line = reader.readLine()) != null) {
    System.out.println(line);
}

reader.close();
os.close();
}

catch(Exception e)
{
}


 return result;
}

我使用了元标记并定义了charset = utf-8并且还使用了:

request.setCharacterEncoding("UTF-8");
在任何请求之前

。 我在tomcat 7.0.57中的webapps中创建了一个名为GetMine的文件夹。并在那里复制了这个jsp文件。当我使用content =&#34; 调用urlCallPOST方法时,一些utf-8阿拉伯语文本&#34;它在stdout文件中的Tomcat的日志文件夹中显示 ????

奇怪的是,当我在 ECLIPSE 中创建一个java项目(不是j2ee或静态网页)并调用urlcallPOST时。它工作正常。

当我看到ECLIPSE的结果很好时,决定安装 WireShark 数据包捕获工具并检查结果,并惊讶地发现当从ECLIPSE执行代码时,wireshark以这种格式显示了这些阿拉伯字符:\ 330 \ 263 \ 330 \ 264等,webservice也返回正确的响应。但是当我从执行它的JSP检查时,wireshark以这种格式显示那些阿拉伯字符: ?????

我用谷歌搜索,发现这个网站显示了这些阿拉伯语编码:http://www.acc.umu.se/~saasha/charsets/?charset=iso_8859-4&charset=cp1256

我尝试在我的urlCallPOST方法的内容标记内硬编码 \ 330 \ 263 \ 330 \ 264 ,但它仍然没有显示正确的字符(某些字符显示正确! !!!)

我该怎么办?对于Windows Server 2008 R2的编码,这是错误/错误吗? 我在Solaris和JBOSS tomcat中有这个确切的配置,它工作正常。

1 个答案:

答案 0 :(得分:1)

最后我找到了解决方案。 你需要在tomcat的配置中添加一个小配置: 添加“-Dfile.encoding = UTF-8”,这就是全部。见下图。

Tomcat 7 configuration

此外,您已在server.xml文件中设置URIEncoding = UTF-8。

URI Encoding