org.apache.tomcat.util.http.Parameters processParameters WARNING: Parameters: Invalid chunk ignored

 
不同版本的原因,都那过来研究一下:

造成以上问题的有这么几种原因:
1、访问/test.jsp?&p1=1&p2=2...
2、访问/test.jsp?p1=1&p2=&p3=3...
3、访问/test.jsp?p1=1&&p2=2...
4、访问/test.jsp?action=save&....
5、表单提交时,存在<input name="" value="***" />这样的域

总之,代码编写的不规范容易带来这样的问题。

 

   原因分析之一:你提交后面(*.jsp?param1=1&param2=2&&param3=3)的参数跟随过多的&&符号,
超过两个以上,tomcat5.5及版本以上它可能会不识别你给的参数,认为是你的参数非法无效的有大块的,并且可以忽略掉多余的,只是作为警告警示你有非法字符参数传递,一般来说不会影响你的应用程序程序运行,但是我们建议尽量避免这种多余参数的出现。这就是Apache组织在版本升级时,增加应用功能的校验,一些的非法的参数输入格式会提示警告你,有些原因可能被认为是你传入的参数,在对应的页面没有request.getParameter("param")使用到这个参数,既然你传入了,但你又没使用,所以警告提示你需要去掉多余的参数传递;

       原因分析之二:jdk版本不同跟应用服务器配置的相应变化,一起做了参数功能校验设置。

 

      也就是说参数的传递尽量的规范化,不能随意撰写,可能会出现你想不到的异常或者警告等。

 

举个例子:url?&key=value
这里的&就代表一个无效的参数。正确的应该是url?key1=value1&key2=value2
或者url?key=value 。

这个警告应该不会引起线程挂掉的,很可能是tomcat或你的应用本身有性能瓶颈。服务器会过滤这种无效参数,要找这个警告的源头是不容易,但也不是没办法。你需要写一个url有效性的检查的方法,然后写一个过滤器,把这个过滤器配置为对有所url进行过滤,然后发现有问题的url就打印或写入日志。

 

 Jun 252007 10:34:54 PM org.apache.tomcat.util.http.Parameters processParameters
2  WARNING: Parameters: Invalid chunk ignored.

相信很多人,在使用Tomcat中碰到过上面这个问题。我也为此苦恼过。现将解决办法,告诉大家及解决问题的一点感悟。
数次碰到这个问题没有解决后,促使我想到去看原代码,根据异常信息,我找到抛出异常的代码段。现将原代码引入到文章中。
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->  1  if ( nameEnd <= nameStart ) {
 2                  StringBuilder msg  =   new  StringBuilder( " Parameters: Invalid chunk  " );
 3                   // No name eg &=xx& will trigger this
 4                   if  (valEnd  >=  nameStart) {
 5                      msg.append( ' / '' );
 6                       try  {
 7                          msg.append( new  String(bytes, nameStart,
 8                                  valEnd  -  nameStart, DEFAULT_ENCODING));
 9                      }  catch  (UnsupportedEncodingException e) {
10                           //  Should never happen
11                          log.error( " Unable to convert bytes " , e);
12                      }
13                      msg.append( " " );
14                  }
15                  msg.append( " ignored. " );
16                  log.warn(msg);
17                   continue ;
18                   //  invalid chunk - it's better to ignore
19              }
不知你注意到没,我在上面代码第3行的注释上,加上了下划线,相信你看到这句话时,知道应该做了。
对了,你猜对了。没有参数名称(例如,&=xx&aa=11),每个&后面没有参数名称,这样的情况发生后,将
触发这个异常。

注:这同样告诉我们一个问题。对于开源项目,如果你在搜索现有资料不能解决问题时,你可以尝试去看原代码,或许可以找到解决问题的办法。
http://blog.csdn.net/lxy15329/article/details/5958837
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值