HTTP 协议参数
servlet 的请求参数以字符串的形式作为请求的一部分从客户端发送到 servlet 容器。当请求是一个 HttpServletRequest 对象,且符合“参数可用时”描述的条件时,容器从 URI 查询字符串和 POST 数据中填充参数。参数以一系列的名-值对(name-value)的形式保存。任何给定的参数的名称可存在多个参数值。ServletRequest 接口的下列方法可访问这些参数:
- getParameter
- getParameterNames
- getParameterValues
- getParameterMap
getParameterValues 方法返回一个 String 对象的数组,包含了与参数名称相关的所有参数值。getParameter 方法的返回值必须是getParameterValues 方法返回的 String 对象数组中的第一个值。getParameterMap 方法返回请求参数的一个 java.util.Map 对象,其中以参数名称作为 map 键,参数值作为 map 值。
查询字符串和 POST 请求的数据被汇总到请求参数集合中。查询字符串数据放在 POST 数据之前。例如,如果请求由查询字符串 a=hello 和 POST 数据 a=goodbye&a=world 组成,得到的参数集合顺序将是 a=(hello, goodbye, world)。
这些 API 不会暴露 GET 请求(HTTP 1.1所定义的)的路径参数。他们必须从 getRequestURI 方法或 getPathInfo 方法返回的字符串值中解析。
当参数可用时
Post 表单数据能填充到参数集(Paramter Set)前必须满足的条件:
- 该请求是一个 HTTP 或 HTTPS 请求。
- HTTP 方法是 POST。
- 内容类型是 application/x-www-form-urlencoded。
- 该 servlet 已经对请求对象的任意 getParameter 方法进行了初始调用。
如果不满足这些条件,而且参数集中不包括 post 表单数据,那么 servlet 必须可以通过请求对象的输入流得到 post 数据。如果满足这些条件,那么从请求对象的输入流中直接读取 post 数据将不再有效。