您的位置:首页 > 理论基础 > 计算机网络

HttpServletResponse说明

2016-01-01 18:14 746 查看

HttpServletResponse说明

基本概述

HttpServletResponse是用于将Servlet处理好的内容发送给浏览器的类,服务器通过对HttpServletResponse对象中的内容进行截取、拼接就能获得一个完整的HTTP响应信息。

参考文档:http://tomcat.apache.org/tomcat-5.5-doc/servletapi/index.html

常用方法

public void addHeader(String name,String value) //添加一个消息头到HttpServletResponse对象中去。

public void setHeader(String name,String value) //重设一个消息头,其与addHeader的区别是,add是添加(重复也行),set表示的是,如果有该消息头就覆盖它,没有就创建它

public void setStatus(int sc) //设置响应消息的状态码,具体可以参照我的另一篇博客HTTP协议入门

public void sendRedirect(String location) throws java.io.IOException // 这个方法在与request的getRequestDispatch()比较时,会探讨

public ServletOutputStream getOutputStream() throws java.io.IOException //得到一个二进制输出流,可以回送任意格式数据数据

public java.io.PrintWriter getWriter() throws java.io.IOException //得到一个字符输出流,可以回送字符数据

getWriter()和getOutputStream()的区别

getWriter() 用于向客户机回送字符数据

getOutputStream() 返回的对象,可以回送字符数据,也可以回送字节数据(二进制数据)

OutputStream os=response.getOutputStream();

os.write("hello,world".getBytes());

PS:通过该方法也能用getOutputStream()回送字符数据

如何选择

如果是回送字符数据,则使用 PrintWriter对象 ,效率高

如果是回送字节数据(binary date) ,则只能使用 OutputStream



注意事项

PrintWriter,OutputStream 这两个流不能同时使用

比如:

OutputStream os=response.getOutputStream();

os.write("hello,world".getBytes());

PrintWriter out=response.getWriter();

out.println("abc");



会报错:

java.lang.IllegalStateException: getOutputStream() has already been called for this response



不能同时使用PrintWriter和OutputStream的原因



结论:Web服务器在完成一次service之后会自动关闭流,并销毁当前的request和response对象,故无法同时使用两个流。

案例:

package com.pc;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Servlet7 extends HttpServlet {
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		response.setContentType("text/html;charset=utf-8");
		response.setCharacterEncoding("utf-8");
		// 演示下载文件
		response.setHeader("Content-Disposition", "attachment; filename=EVO_120G.jpg");	
		// 打开文件
		// 1.获取到要下载文件的全路径
		String path = this.getServletContext().getRealPath("/EVO_120G.jpg");
		// 测试
		System.out.println("path=" + path);
		// 2.创建文件输入流
		FileInputStream fis = new FileInputStream(new File(path));
		// 做一个缓冲字符数组
		byte buff[] = new byte[1024];
		int length = 0;
		// 3.指向response的输出流
		OutputStream os = response.getOutputStream();
		// 4.循环读出
		// length表示每次实际读入的字节数
		while((length = fis.read(buff)) != -1){
			os.write(buff, 0, length);
		}
		// 关闭
		os.close();
		fis.close();
	}
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doGet(request, response);
	}
}


----------参考《韩顺平.细说Servlet》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: