之前看了Request对象,接下来我们来看下与其相对应的Response对象。
1)关于HttpServletResponse
HttpServletResponse,继承自ServletResponse,主要用于将经过处理后的数据发送至服务器,其实现也是基于Http协议,跟Request一样,为了提高开发的效率,将原生的Socket方式进行了封装,形成这比较方便好用的HttpServletResponse。
2)HttpServletResponse的常用方法
Response中也包含了大量的方法,不过有一些方法并不常用,所以我们这里就不进行介绍,需要的话查看官方的文档即可,下面介绍一些比较常用的方法:
addHeader() // 添加一个响应头信息
setHeader() // 设置一个响应头信息
addIntHeader() //设置一个整型类型的头信息
setStatus() // 设置状态码
sendError() //发送错误状态码
addCookie() //添加一个cookie(后面相关部分介绍)
getOutputStream() // 获取输出流
getWriter() // 获取一个PrintWrite
setContentType() // 设置该文件的MIME类型
下面介绍一下常用方法的具体使用
3)getWriter()
该方法放回一个PrinterWrite 类型的对象,用于向浏览器输出数据,例如输出HTML代码,相关的信息等等
PrintWriter writer = response.getWriter();
writer.write("Hello Servlet");
也可以直接输出格式化的HTML代码( 输出后的代码会被浏览器进行解析 )
writer.write("<html><body>Hello World</body></html>");
4)setContentType()
当然,为了能够浏览器能够正常解析响应的内容,例如HTML代码,中文字符等,所以需要对输出的内容以及编码方式进行设置,通常的做法就是根据所要输出的文件的MIME类型进行指定,编码方式一般都是设置为utf-8,那么为了正确解析上面的HTML代码,我们可以进行这样的设置
response.setContentType("text/html;charset=utf-8");
而且该设置必须在写出之前进行设置,也就是在调用write方法之前调用,具体的原因是因为write方法一旦获取得到数据,便会马上将其输出到浏览器,所以,必须在调用该方法之前进行ContentType的设置
5)getOutputStream()
该方法是打开一个输出流,主要是用于将文件、图像、音频等等这些非文本类型的数据输出,当然输出的时候同样需要设置ContentType类型
<span style="white-space:pre"> </span>response.setContentType("text/html;charset=utf-8");
<span style="white-space:pre"> </span>FileReader file = new FileReader(getServletContext().getRealPath("/form.html"));
<span style="white-space:pre"> </span>char[] buffer = new char[2048];
<span style="white-space:pre"> </span>file.read(buffer);
<span style="white-space:pre"> </span>BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(response.getOutputStream()));
<span style="white-space:pre"> </span>bw.write(buffer);
这里有一个需要注意的地方就是,获取指定文件的时候,由于是部署之后的文件的地址,所以需要使用getServletContext.getRealPath("url");来获取工程中的问价,具体原因目前还不太了解,正在学习中。