在运行时,他显示http500-内部服务器错误,在22行出现错误,我不知道是错在什么地方,我的代码是对的,但是我对语法不熟
第22行获取name的值为null,所以导致23行转编码的时候发生空指针异常。
还有你这个中文都乱码了,处理下。
这个没获取到值不就空指针了么
【相关推荐】
本文分析的Tomcat源码版本为:9.0.29.
通过Debug可以找到两处关键的代码:
第一处:
org.apache.tomcat.util.http.Parameters#processParameters(byte[], int, int, java.nio.charset.Charset) 下图中的290行
在这个地方因为有’+’,所以把decodeValue参数设置为true,表示需要对请求中的value进行decode操作。
decode的具体的源码位置如下,也就是第二处关键代码:
org.apache.tomcat.util.buf.UDecoder#convert(org.apache.tomcat.util.buf.ByteChunk, boolean)
可以看到,在源码里面有一段代码,是把’+'替换了为了空格,是特意做了这样的特殊处理。
整个方法的解读如下:
所以我的入参是jay+love,但是后台接收到的是jay love,加号变空格了。为什么呢?
原因很简单,在源码中有一段代码把’+'替换成了空格,刻意为之。