1.在tomcat的server.xml的Connector中增加下面俩属性
relaxedPathChars
relaxedQueryChars
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
URLEconding="UTF-8"
URIEconding="UTF-8"
useBodyEncodingForURI="true"
redirectPort="8443"
relaxedPathChars="|{}[],%"
relaxedQueryChars="|{}[],%"/>
可以解决对于这些特殊字符的解析,如果想要增加新的直接增加即可
2.在js中使用encodeURI方法
直接使用encodeURI
方法对url进行处理即可,在我这边使用的情况下,适用于所有情况.
3.修改tomcat的jar包
以上两种情况是我在网上大量搜索找出来的还算行之有效的方法,其他的进行修改都是无济于事,但是我们这边的需求是url中会含有中文。
方法一将会不适用,不可能把所有的汉字都加进去,而且我也没有进行尝试中文加入relaxedPathChars
和relaxedQueryChars
中是否有效,
方法二虽然比较实用,而且可以对付所有情况,但是需要修改大量的js的文件,是真的烦啊
因此,我尝试着去看了一下tomcat对于这部分的源码,找到了对这部分的匹配和校验
具体位置在Http11InputBuffer
类中的parseRequestLine
的方法下,有兴趣的可以试着下载源码,调试一下看看效果,于是我就
直接注释掉,然后找到编译的class
复制进tomcat的jar中,jar包在
tomcat的lib文件夹下的tomcat-coyote.jar
然后,完美运行
这是我已经修改好得tomcat-coyote.jar