Java URL中的方括号导致Tomcat中出现异常

Java URL中的方括号导致Tomcat中出现异常,java,url,tomcat,playframework,urlencode,Java,Url,Tomcat,Playframework,Urlencode,我注意到在我的游戏中抛出了以下异常!在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

我注意到在我的游戏中抛出了以下异常!在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)
javax.servlet.ServletException:java.net.URISyntaxException:35号索引路径中的非法字符:/K-NAAN/lyris/有人在吗[]-lyris/3807088
play.server.ServletWrapper.service(ServletWrapper.java:157)
javaservlet.http.HttpServlet.service(HttpServlet.java:717)
根本原因
java.net.URISyntaxException:索引35处路径中的非法字符:/K-NAAN/lyris/有人在吗[]-lyris/3807088
java.net.URI$Parser.fail(未知源)
java.net.URI$Parser.checkChars(未知源)
java.net.URI$Parser.parseHierarchy(未知源)
java.net.URI$Parser.parse(未知源)
java.net.URI。(未知源)
play.server.ServletWrapper.parseRequest(ServletWrapper.java:241)
play.server.ServletWrapper.service(ServletWrapper.java:132)
javaservlet.http.HttpServlet.service(HttpServlet.java:717)
根据方括号,URI中的字符无效,客户机负责对它们进行编码?我在MacOS上的Chrome浏览器中得到了这个例外,但在Firefox上没有,这似乎意味着Chrome浏览器没有对它们进行编码。更糟糕的是,我敢肯定谷歌机器人也会遇到这种例外

这里的正确做法是什么

我可以调整Tomcat以某种方式接受或编码方括号吗?或者这是一个虫子或游戏中的行为


或者我应该确保每个指向我页面的链接都有方括号URL编码吗?当然,这在我自己的网站上是可能的,但对于外部链接就不太可能了。

任何想要使用可能不直接用于URL或具有特殊含义的字符的链接都需要在URL中对字符进行编码


让生活更复杂一点,我注意到FireFox经常显示未编码的字符,但在地址栏中发送编码字符。在尝试调试此类问题时,使用Firebug(或浏览器的等效程序)来确保您知道实际发送的是什么是值得的。

我们遇到的特定异常似乎是1.2.4中的一个bug,应该在1.2.5中通过返回代码400而不是500来修复


我们还将仔细检查并再次检查我们所有的链接是否都使用方括号编码(它们已经使用了方括号编码)。

您最后说的一句话:指向页面的每个链接都应该使用方括号url编码。您无法控制向您发送无效URL的任意客户端。