一、获取请求消息的实体内容
getInputStream和getReader方法
1、getInputStream方法用于返回的一个代表实体内容的输入流对象,其类型为javax.servlet.ServletInputStream
2、getReader方法用于返回的一个代表实体内容的BufferedReader对象,返回的BufferedReader对象将实体内容中的字节数据按照请求消息中指定的字符集编码转换成文本字符串。
3、在调用getReader方法之前,可以调用ServletRequest的setCharacterEncoding方法指定其返回的BufferedReader对象所使用的字符集编码
二、文件上传的请求消息结构
ServletInputStream sis = request.getInputStream();
String filePath = getServletContext().getRealPath("/body.out");
FileOutputStream fos = new FileOutputStream(filePath);
byte[] buf = new byte[1024];
int len = sis.read(buf,0,1024);
while(len != -1)
{
fos.write(buf,0,len);
len = sis.read(buf,0,1024);
}
fos.close();
sis.close();
三、请求域属性
存储在ServletRequest对象中的对象称之为请求域属性,属于同一个请求的多个处理模块之间可以通过请求域属性来传递对象数据
与请求域属性相关的方法:
setAttribute方法
getAttribute方法
removeAttribute方法
getAttributeName方法
与请求参数的字符集编码相关的方法
getCharacterEncoding方法
setCharacterEncoding方法
getParameter方法的中文问题
1、getParameter等方法在读取的参数信息时,需要进行URL解码。
2、对于HTTP请求消息的请求行中的URL地址后的参数,getParameter等方法进行URL解码时所采用的字符集编码在Servlet规范中没有明确规定Tomcat中的ServletRequest对象的getParameter等方法默认采用ISO8859-1字符集编码进行URL解码,因此无法返回正确的中文参数信息 。
3、 对于POST方式下的“application/x-www-form-urlencoded”编码格式的实体内容,getParameter等方法以ServletRequest对象的getCharacterEncoding()方法返回的字符集编码对其进行URL解码。
4、getCharacterEncoding()方法的返回值通常为null,对于这种情况,ServletRequest对象的getParameter等方法将使用默认的ISO8859-1字符集编码对实体内容中的参数进行URL解码,因此也将无法返回正确的中文参数信息。
5、 ServletRequest接口中定义了一个setCharacterEncoding方法来设置请求消息中的实体内容的字符集编码名称,getParameter方法将以该方法设置的字符集编码对实体内容进行URL解码。
6、 setCharacterEncoding方法设置的是请求消息中的实体内容的字符集编码名称,它只影响getParameter方法对POST方式下的“application/x-www-form-urlencoded”编码格式的实体内容进行URL解码的结果,而不能影响getParameter方法对HTTP请求消息的请求行中的URL地址后的参数进行URL解码的结果。