我注意到在我的Play!应用程序在Tomcat上运行时会抛出以下异常:
javax.servlet.ServletException: java.net.URISyntaxException: Illegal character in path at index 35: /K-NAAN/lyrics/Is-Anybody-Out-There[]-lyrics/3807088
play.server.ServletWrapper.service(ServletWrapper.java:157)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
root cause
java.net.URISyntaxException: Illegal character in path at index 35: /K-NAAN/lyrics/Is-Anybody-Out-There[]-lyrics/3807088
java.net.URI$Parser.fail(Unknown Source)
java.net.URI$Parser.checkChars(Unknown Source)
java.net.URI$Parser.parseHierarchical(Unknown Source)
java.net.URI$Parser.parse(Unknown Source)
java.net.URI.<init>(Unknown Source)
play.server.ServletWrapper.parseRequest(ServletWrapper.java:241)
play.server.ServletWrapper.service(ServletWrapper.java:132)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
根据这个帖子,方括号不是URI中的有效字符,客户端有责任对其进行编码。我在MacOS上的Chrome中遇到了这个异常,但在Firefox上没有遇到,这似乎意味着Chrome没有对它们进行编码。更糟糕的是,我相信googlebot也会遇到这个异常。
在这里应该采取什么正确的行动?
我可以调整Tomcat以接受或编码方括号吗?还是这是Play中的一个错误或行为?
还是我应该确保每个链接到我的页面的链接都已经URL编码了方括号?当然,在我的网站上可能做得到,但对于外部链接来说就不是那么容易了。