我尝试在Suse Linux Enterprise Server 11.2上设置Tomcat-Server Version 5.0.30-27.35。应该通过这个tomcat提供一大堆静态资源。 (由于该系统上的管理员限制,升级tomcat-Server不是一种选择。)问题是,某些文件具有带特殊字符的文件名,并且Tomcat-Server不提供这些文件 - 例如在浏览器中访问http://myserver/qm-iso/aä.html时,我收到HTTP 404错误(wget,FF,IE,Chrome)。 (文件/qm-iso/aä.html存在)
我的设置:
Linux-Server设置为UTF-8。
Tomcat以JAVA_OPTS -Dfile.encoding = UTF8启动。
Tomcat-HTTP-Connector在server.xml中设置为URIEncoding =“UTF-8”<connector ... URIEncoding="UTF-8">
。
Default-Servlet在web.xml中有一个init-param fileEncoding
<init-param><param-name>fileEncoding</param-name><param-value>UTF-8</param-value></init-param>
我已经设置了一个打印出<%= System.getProperty("file.encoding") %>
和<%= (new OutputStreamWriter(new ByteArrayOutputStream())).getEncoding() %>
的Test-JSP - 都显示了UTF-8。
我在设置tomcat-log-level时调试并在访问URL http://myserver/qm-iso/aä.html
时读取这些日志记录语句Attributes
javax.servlet.forward.request_uri : /qm-iso/a%C3%A4.html
javax.servlet.forward.context_path :
javax.servlet.forward.servlet_path : /qm-iso/aä.html
javax.servlet.forward.path_info : /error.html
javax.servlet.error.request_uri : /qm-iso/a%C3%A4.html
javax.servlet.error.servlet_name : default
javax.servlet.error.status_code : 404
javax.servlet.error.message : /qm-iso/a%C3%A4.html
对我看来,logentry javax.servlet.forward.servlet_path
显示错误的编码aä¤.html。具有%C3%A4.html的行似乎正确编码。
任何想法,我可能忘记了什么?知道什么可以帮助吗?
理查德
答案 0 :(得分:1)
您需要(让您的管理员)将 URIEncoding
中的<Connector>
元素的/conf/server.xml
属性设置为UTF-8
。
<击> 撞击>
<Connector ... URIEncoding="UTF-8">
默认情况下,它们被解释为ISO 8859-1,这是一个单字节字符编码。然后,UTF-8 0xC3
字符的单个0xA4
和ä
字节将分别表示为字符Ã
和¤
,另请参阅{{ 3}} 击>
更新:抱歉,我忽略了您已经设置了URIEncoding
属性。现在这似乎是一个Tomcat 5.0特定的问题。设置该属性可以解决Tomcat 7上的问题(很可能也是最新的6)。我建议升级到更新的Tomcat版本。 Tomcat 5.0多年来一直是EOL。