相信很多人都和我有一样的困惑,ServletRequest中getParameter()方法到底取的是什么参数,这些参数又是怎么放进去的,本文简单的回答一下该问题:

首先话不多说,我们来看一下该方法的官方说明:

Returns the value of a request parameter as a String, or null if the parameter does not exist. Request parameters are extra information sent with the request. For HTTP servlets, parameters are contained in the query string or posted form data.

其实核心的一句话就是query string or posted form data,认真三遍这几个单词,此时大家是否已恍然大悟,也就是说getParameter()方法取的是query string 和 posted form data中的数据,那么query string 和 posted form data又是指的啥呢?query string就是get请求中url的?后面的参数,posted form data就是post请求中的body数据,哈哈哈,到现在是不是觉得很有点感觉了;大家平时都是用的ajax请求,无论是get还是post,我们的请求参数都是可以放在data里的,只不过ajax会判断请求类别,如果是get请求的话,ajax会把data里的值给拼接到url的后面。

好了,上面说了getParameter()方法取的是什么数据的问题,那么这些数据又是怎么放进去的呢?我相信每个爱思考的人都会想过这个问题,可能百思不得其解。那我来告诉大家这些参数是tomcat放进去的,是不是有点小懵逼,tomcat又是怎么放进去的呢,大家都知道tomcat是个容器,我们的http请求是会先经过tomcat进行处理的,它会分析http请求中的请求行、请求头、数据三部分然后分别将其放到对应的位置中,这样我们后台就可以根据getParameter(),getHeader()等方法进行取值了。好了,我相信很多人都不知道http的请求消息格式是什么样子的,比如我上面说的请求行、请求头、数据这三部分大家只是印象中好像有那么几个概念,但是并不知道这是http协议中所规定的,所以我建议大家好好去了解一下http协议,这样才会对系统的交互流程有着最本质的了解。

看到这,大家可能会想问tomcat具体是怎么处理的呢,哈哈哈,这个就需要去看tomcat的源码了。