【发布时间】:2011-12-15 01:04:23
【问题描述】:
我尝试在 Suse Linux Enterprise Server 11.2 上设置 Tomcat-Server 版本 5.0.30-27.35。还有一大堆静态资源也应该通过这个 tomcat 提供。 (由于该系统的管理员限制,升级 tomcat-Server 不是一个选项。)问题是,某些文件的文件名带有特殊字符,并且这些文件不是由 Tomcat-Server 交付的 - 例如。在浏览器(wget、FF、IE、Chrome)中访问 http://myserver/qm-iso/aä.html 时出现 HTTP 404 错误。 (文件/qm-iso/aä.html存在)
我的设置:
Linux 服务器设置为 UTF-8。
Tomcat 以 JAVA_OPTS -Dfile.encoding=UTF8 启动。
在 server.xml 中将 Tomcat-HTTP-Connector 设置为 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>
我设置了一个 Test-JSP,它打印出<%= System.getProperty("file.encoding") %> 和 <%= (new OutputStreamWriter(new ByteArrayOutputStream())).getEncoding() %> - 都显示 UTF-8。
当访问 URL http://myserver/qm-iso/aä.html 时,我已将 tomcat-log-level 设置为调试和读取这些日志记录语句
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 显示错误的 enoding aä.html。带有 a%C3%A4.html 的行似乎编码正确。
任何想法,我可能忘记了什么?知道有什么帮助吗?
理查德
【问题讨论】:
标签: tomcat utf-8 character-encoding