request.getParameter返回null

用GET方法传递过去的参数,在某些情况下用request.getParameter只能取得null,而apache确实得到了完整的URL,且Debug时URL也是完整的,就是取不出来。

参数是一大段文字,其中可能有中文,我在客户端是用Javascript编码过的,为了避免URL过长,截断过,在以前的PHP里用得很好,就是偶尔会把一个中文字的编码给切断,造成末尾乱码,但影响不大。这次出了这个问题,我一直怀疑是不是Tomcat不能接受这么长的URL,或者是struts/JSP. 结果找到最后,发现就是编码不完整的问题。

在request.getParameter这个调用里,会对percent encode过的参数值进行解码,但解码时遇到不正确的码就会返回null. 这不正确的码就是我截断的。

以前编码是把所有的文字编码,组成URL后截断长度到6000。于是改了一下编码的策略,每100个字符作为一个块编码一次,直到字符串结束或剩下的空间不能容纳一个块为止。目前看来,这是一个好办法。

This entry was posted on Sunday, April 8th, 2007 at 6:27 pm and is filed under Programming. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

2 Comments »

Comment by zhang
2007-04-08 23:16:30

你想干什么?

如果参数太多了,可以考虑用POST啊,POST可以设置content-length

Comment by zhouqb
2007-04-09 10:08:15

嗯,Firefox的插件,打开一个新窗口请求一个地址,GET最简单,而且数据也不重要,截断就好了 :)

 
 
Name (required)
E-mail (required - never shown publicly)
URI
Your Comment (smaller size | larger size)

Please copy the string l7C17v to the field below: