nutzam / nutz

Nutz -- Web Framework(Mvc/Ioc/Aop/Dao/Json) for ALL Java developer
https://nutzam.com
Apache License 2.0
2.53k stars 942 forks source link

url解析path时bug #867

Closed ansn001 closed 9 years ago

ansn001 commented 9 years ago

我有一个请求: /tcProxy/saveChat.html?roomID=1&messageType=public&sendUserID=1829283&sendUserName=ansn001%2540t.com&sendIp=&acceptUserID=0&acceptUserName=%E6%89%80%E6%9C%89%E4%BA%BA&content=22313

在Mvcs类的 getRequestPathObject方法中

String url = req.getPathInfo();// 结果url =null rl = req.getServletPath();//结果url=/tcProxy/saveChat.html?roomID=1&messageType=public&sendUserID=1829283&sendUserName=ansn001%2540t.com&sendIp=&acceptUserID=0&acceptUserName=%E6%89%80%E6%9C%89%E4%BA%BA&content=22313

然后调用 getRequestPathObject(url) 最终获取的path为

Search mapping for path=/tcProxy/saveChat.html?roomID=1&messageType=public&sendUserID=1829283&sendUserName=ansn001%2540t : NOT Action match

我怀疑,是因为我的url的参数里sendUserName后面对应的value里的“.”。所以在解析getServletPath()的时候获取值,不是我们所想要的。所以在getRequestPathObject(url)处理逻辑时,所取的也不正常 if (!url.endsWith("/")) { int ll = url.lastIndexOf('/'); lio = url.lastIndexOf('.'); if (lio < ll) lio = -1; } 有如下疑问: 1、为什么我们url里的querystring带有"."时,getServletPath获取的不正确,我应该怎么处理。对应的web.xml里的配置是"/*" 2、就算取不到。是不是getRequestPathObject(url)的逻辑修改一下。lio的取值不正确, path应该是url从最后一个的"/"之后的第一个"."为节点,从0取到这个节点。或者说,你们有什么其他的考虑。

wendal commented 9 years ago

NO

管它按什么解析的, 你想想为啥 nutz找的是 "/tcProxy/saveChat.html?roomID=1&messageType=public&sendUserID=1829283&sendUserName=ansn001%2540t" 这么一大串, 而不是 "/tcProxy/saveChat"

那nutz怎么得到"/tcProxy/saveChat.html?roomID=1&messageType=public&sendUserID=1829283&sendUserName=ansn001%2540t" 的呢? getRequestURI()

那getRequestURI()是谁提供的呢? tomcat等容器

那为啥getRequestURI()返回的是这么一长串的,而是单单是到.html结束呢!!!

因为, 容器是按"?" 也就是问号来分割URI和QueryString的, 而你发送的请求里面的?号都已经转义了,那没得分割啦, 自然把整个字符串当成URI啦!

ansn001 commented 9 years ago

好的,我晓得了,谢了