request.getMethod() 获取请求提交方式,如POST、GET等
request.getContentType() 获取请求类型,示例值:application/json ,multipart/form-data, application/xml等
可能含有请求内容的字符集,如application/json;charset=UTF-8
request.getRequestURL() 获取请求URL
request.getParameterNames(); 获取所有key
request.getParameter("test"); 根据key得到value
String key, name;
Enumeration
while (enumeration.hasMoreElements()) {
key = enumeration.nextElement();
name = request.getParameter(key);
System.out.println(key + " :" + name);
}
有遇到过一个项目用该方法不能读取到参数,而用上面第二点可以,这点我现在还是很奇怪
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding("UTF-8");
Map
try {
List
for (FileItem fileItem : items) {
if (fileItem.isFormField()) {
param.put(fileItem.getFieldName(), fileItem.getString("utf-8"));
}
}
} catch (Exception e) {
e.printStackTrace();
}
需增加jar包
request.getQueryString() 只适用于GET方法,
返回String,获取的参数形式:a=1&b=2&c=3
比如客户端发送http://localhost/testServlet?a=b&c=d&e=f,通过request.getQueryString()得到的是a=b&c=d&e=f
request.getParameterMap() 适用于GET、POST-表单
返回Map,其中Map的key是参数的名称,value(数组)是参数的值
如请求参数为a=1&b=2&c=3&c=4
则key=a value=[1]
key=c value=[3, 4]
Map
Set
for(String key : keys){
String[] b = a.get(key);
}
request.getReader()返回的是字符串
request.getInputStream()返回的是字符节数组
这两个方式适用于POST提交的所有类型,包括application/json(json字符串)、application/x-www-form-urlencoded表单(a=1&b=2&c=3)、multipart/form-data(含有一些杂七杂八的内容)、application/xml
int len = request.getContentLength();
ServletInputStream iii = request.getInputStream();
byte[] buffer = new byte[len];
iii.read(buffer, 0, len);
System.out.println(new String(buffer));
BufferedReader br = request.getReader();
String str, wholeStr = "";
while((str = br.readLine()) != null){
wholeStr += str;
}
System.out.println(wholeStr);
@RequestBody、 request.getInputStream()、request.getReader()这三种方法是有冲突的,因为流只能被读一次。
比如:
当form表单内容采用 enctype=application/x-www-form-urlencoded编码时,先通过调用request.getParameter()方法得到参数后,
再调用request.getInputStream()或request.getReader()已经得不到流中的内容,
因为在调用 request.getParameter()时系统可能对表单中提交的数据以流的形式读了一次,反之亦然。
当form表单内容采用 enctype=multipart/form-data编码时,即使先调用request.getParameter()也得不到数据,
所以这时调用request.getParameter()方法对 request.getInputStream()或request.getReader()没有冲突,
即使已经调用了 request.getParameter()方法也可以通过调用request.getInputStream()或request.getReader()得到表单中的数据,
特别要注意的是request.getInputStream()和request.getReader()在同一个响应中是不能混合使用的,如果混合使用就会抛异常