从前面的介绍Url编码文章中,我们了解了浏览器发起请求的字符处理过程。现在开始介绍tomcat服务器对键值对进行Url解码的过程。
源码都在这里:
org.apache.tomcat.util.http.Parameters#processParameters(byte[], int, int, java.nio.charset.Charset)
下面我们分析下其源码:
我们那 "a=b&%你a=%我" 做例子,浏览器发起请求前会将它url编码成如下:
a=b&%25%E4%BD%A0a=%25%E6%88%91
1)先看其如何解析出键值对 中的“键”和“值”。源码 如下:
tomcat主要是对关键的字符 ‘=’、‘&’和‘+’ 进行分析从而分割出“键” 和 “值”。在这里,我们可以很容易看出,tomcat对‘%’是直接跳过 不处理的。也就是说,浏览器Url编码后的键值对中的 ‘%’ 是不被tomcat处理的。
我们可以往下看:tomcat 在上面过程中提取出 ‘键’:“%25%E4%BD%A0a” 和 ‘值’:“%25%E6%88%91” 后,分别进行url解码。然后存入Map中。