用GET方法传递过去的参数,在某些情况下用request.getParameter只能取得null,而apache确实得到了完整的URL,且Debug时URL也是完整的,就是取不出来。
参数是一大段文字,其中可能有中文,我在客户端是用Javascript编码过的,为了避免URL过长,截断过,在以前的PHP里用得很好,就是偶尔会把一个中文字的编码给切断,造成末尾乱码,但影响不大。这次出了这个问题,我一直怀疑是不是Tomcat不能接受这么长的URL,或者是struts/JSP. 结果找到最后,发现就是编码不完整的问题。
在request.getParameter这个调用里,会对percent encode过的参数值进行解码,但解码时遇到不正确的码就会返回null. 这不正确的码就是我截断的。
以前编码是把所有的文字编码,组成URL后截断长度到6000。于是改了一下编码的策略,每100个字符作为一个块编码一次,直到字符串结束或剩下的空间不能容纳一个块为止。目前看来,这是一个好办法。
Leave a Reply