Closed ansn001 closed 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啦!
好的,我晓得了,谢了
我有一个请求: /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取到这个节点。或者说,你们有什么其他的考虑。