造成以上问题的有这么几种原因:
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¶m2=2&¶m3=3)的参数跟随过多的&&符号,
超过两个以上,tomcat5.5及版本以上它可能会不识别你给的参数,认为是你的参数非法无效的有大块的,并且可以忽略掉多余的,只是作为警告警示你有非法字符参数传递,一般来说不会影响你的应用程序程序运行,但是我们建议尽量避免这种多余参数的出现。这就是Apache组织在版本升级时,增加应用功能的校验,一些的非法的参数输入格式会提示警告你,有些原因可能被认为是你传入的参数,在对应的页面没有request.getParameter("param")使用到这个参数,既然你传入了,但你又没使用,所以警告提示你需要去掉多余的参数传递;
原因分析之二:jdk版本不同跟应用服务器配置的相应变化,一起做了参数功能校验设置。
也就是说参数的传递尽量的规范化,不能随意撰写,可能会出现你想不到的异常或者警告等。
举个例子:url?&key=value
这里的&就代表一个无效的参数。正确的应该是url?key1=value1&key2=value2
或者url?key=value 。
这个警告应该不会引起线程挂掉的,很可能是tomcat或你的应用本身有性能瓶颈。服务器会过滤这种无效参数,要找这个警告的源头是不容易,但也不是没办法。你需要写一个url有效性的检查的方法,然后写一个过滤器,把这个过滤器配置为对有所url进行过滤,然后发现有问题的url就打印或写入日志。
Jun25,200710:34:54PMorg.apache.tomcat.util.http.ParametersprocessParameters
2WARNING:Parameters:Invalidchunkignored.
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--> 1 if (nameEnd <= nameStart){
2 StringBuildermsg = new StringBuilder( " Parameters:Invalidchunk " );
3 //Nonameeg&=xx&willtriggerthis
4 if (valEnd >= nameStart){
5 msg.append( ' / '' );
6 try {
7 msg.append( new String(bytes,nameStart,
8 valEnd - nameStart,DEFAULT_ENCODING));
9 } catch (UnsupportedEncodingExceptione){
10 // Shouldneverhappen
11 log.error( " Unabletoconvertbytes " ,e);
12 }
13 msg.append( " ' " );
14 }
15 msg.append( " ignored. " );
16 log.warn(msg);
17 continue ;
18 // invalidchunk-it'sbettertoignore
19 }
造成以上问题的有这么几种原因:
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¶m2=2&¶m3=3)的参数跟随过多的&&符号,
超过两个以上,tomcat5.5及版本以上它可能会不识别你给的参数,认为是你的参数非法无效的有大块的,并且可以忽略掉多余的,只是作为警告警示你有非法字符参数传递,一般来说不会影响你的应用程序程序运行,但是我们建议尽量避免这种多余参数的出现。这就是Apache组织在版本升级时,增加应用功能的校验,一些的非法的参数输入格式会提示警告你,有些原因可能被认为是你传入的参数,在对应的页面没有request.getParameter("param")使用到这个参数,既然你传入了,但你又没使用,所以警告提示你需要去掉多余的参数传递;
原因分析之二:jdk版本不同跟应用服务器配置的相应变化,一起做了参数功能校验设置。
也就是说参数的传递尽量的规范化,不能随意撰写,可能会出现你想不到的异常或者警告等。
举个例子:url?&key=value
这里的&就代表一个无效的参数。正确的应该是url?key1=value1&key2=value2
或者url?key=value 。
这个警告应该不会引起线程挂掉的,很可能是tomcat或你的应用本身有性能瓶颈。服务器会过滤这种无效参数,要找这个警告的源头是不容易,但也不是没办法。你需要写一个url有效性的检查的方法,然后写一个过滤器,把这个过滤器配置为对有所url进行过滤,然后发现有问题的url就打印或写入日志。
Jun25,200710:34:54PMorg.apache.tomcat.util.http.ParametersprocessParameters
2WARNING:Parameters:Invalidchunkignored.
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--> 1 if (nameEnd <= nameStart){
2 StringBuildermsg = new StringBuilder( " Parameters:Invalidchunk " );
3 //Nonameeg&=xx&willtriggerthis
4 if (valEnd >= nameStart){
5 msg.append( ' / '' );
6 try {
7 msg.append( new String(bytes,nameStart,
8 valEnd - nameStart,DEFAULT_ENCODING));
9 } catch (UnsupportedEncodingExceptione){
10 // Shouldneverhappen
11 log.error( " Unabletoconvertbytes " ,e);
12 }
13 msg.append( " ' " );
14 }
15 msg.append( " ignored. " );
16 log.warn(msg);
17 continue ;
18 // invalidchunk-it'sbettertoignore
19 }