通过前面的学习,知道HttpServletRequest的作用是接受客户端传递的数据,今天跟张老师学习了HttpServletRequest的getInputStream方法与getReader方法以及他们的区别,根据不同情况选择对他们的使用,在张老师的Java基础视频中的学习中就知道了字符集编码的重要性,这次还有重定向时getWriter()方法对网页字符集编码的影响,下面是今天学习的总结。

 

HttpServletRequest的getInputStream方法与getReader方法
1.getInputStream方法返回一个代表实体内容的输入流对象,类型为javax.servlet.ServletInputStream,可以读取HTTP请求消息中的实体内容。如果实体内容中包含二进制数据,那么就只能使用此方法返回的输入流对象来读取。
2getReader方法用于返回一个代表实体内容的BufferReader对象,返回的BufferReader对象将实体内容中的字节数据按照请求消息中指定的字符集编码转换成文本字符串。
3,当请求消息中的实体内容全部是文本数据,并且在Servlet程序中也需要以文本方式来处理这些内容时,适于使用getReader方法。如果Servlet程序不对他们进行处理,而只是存储到服务器的文件系统或数据库中,这适于使用 
getInputStream方法。
4对于要处理文件上传的Servlet程序来说,只能调用getInputStream方法返回的ServletInputStream字节流对象去读取实体内容,而不能调用getReader方法。因为从ServletInputStream流对象中读取的数据是每个字节的原始内容,而从BufferedReader流对象中读取的数据是原始的内容按某种编码转换成的字符文本。

 

重定向时getWriter()方法对网页字符集编码的影响
   1.调用者程序中没有使用PrintWriter out=response.getWriter();语句,被调用者程序中设置的字符集编码将覆盖调用者程序中设置的字符集编码。
    2.调用者程序中使用类了PrintWriter out=response.getWriter();语句,被调用者程序中设置的字符集编码将不再起作用。因为只有在第一次调用当前HttpServletResponse对象的getWriter方法之前,调用那些设置字符集编码的方法(即调用者程序使用的setContentType()方法),才会对PrintWriter对象起作用,而在getWriter方法之后调用将对PrintWriter对象无效。