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》
相关文章推荐
- ubuntu12.04--change socks5 to http by proxy
- 网络基本知识
- HttpUrlConnection 自动上传文件
- HTTP协议入门——1.1版本
- 神经网络浅讲:从神经元到深度学习
- 如何一步步拿到伐册 book申请http://www.bosshr.com/shownews_47767.html
- 全站 HTTPS 来了
- Linux网络相关命令小结
- Android开发之使用URL訪问网络资源
- win7系统关闭“window安全网络身份验证”窗口的设置方法
- 错误消息: 为了配置 TCP/IP,必须安装并启用的网络适配器
- [CSAPP] 第三部分 第11章 网络 IP地址
- Linux内核工程导论——网络:Filter(LSF、BPF)
- 转帖不会乱码的,powershell网络蜘蛛
- Http状态码(apache解析php的403错误)
- CentOS下拨号上网(网络转载)
- 用开源软件建垂直搜索引擎 转载 http://news.cnblogs.com/n/60041/
- 深入理解TCP(二)
- okhttp使用入门
- Web端为什么不会发送http请求给服务器的原因