Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象、和代表响应的response对象。
request和response对象即然代表请求和响应,那我们要获取客户机提交过来的数据,只需要找request对象就行了。要向客户机输出数据,只需要找response对象就行了。

一、HttpServletResponse对象介绍

HttpServletResponse对象代表服务器的响应。这个对象中封装了向客户端发送数据、发送响应头,发送响应状态码的方法。查看HttpServletResponse的API,可以看到这些相关的方法。

1.1、负责向客户端(浏览器)发送数据的相关方法

  

1.2、负责向客户端(浏览器)发送响应头的相关方法

  

1.3、负责向客户端(浏览器)发送响应状态码的相关方法

  

1.4、响应状态码的常量
 
  HttpServletResponse定义了很多状态码的常量(具体可以查看Servlet的API),当需要向客户端发送响应状态码时,可以使用这些常量,避免了直接写数字,常见的状态码对应的常量:

  状态码404对应的常量

 

  状态码200对应的常量

  

  状态码500对应的常量

  

二、HttpServletResponse对象常见应用

2.1、使用OutputStream流向客户端浏览器输出中文数据

使用OutputStream流输出中文注意问题:

  在服务器端,数据是以哪个码表输出的,那么就要控制客户端浏览器以相应的码表打开,比如:outputStream.write(“中国”.getBytes(“UTF-8”));使用OutputStream流向客户端浏览器输出中文,以UTF-8的编码进行输出,此时就要控制客户端浏览器以UTF-8的编码打开,否则显示的时候就会出现中文乱码,那么在服务器端如何控制客户端浏览器以以UTF-8的编码显示数据呢?可以通过设置响应头控制浏览器的行为,例如:response.setHeader(“content-type”, “text/html;charset=UTF-8”);通过设置响应头控制浏览器以UTF-8的编码显示数据。

范例:使用OutputStream流向客户端浏览器输出”中国”这两个汉字

package gacl.response.study;2 3 import java.io.IOException;4 import java.io.OutputStream;5 import javax.servlet.ServletException;6 import javax.servlet.http.HttpServlet;7 import javax.servlet.http.HttpServletRequest;8 import javax.servlet.http.HttpServletResponse;9
10 public class ResponseDemo01 extends HttpServlet {11
12     private static final long serialVersionUID = 4312868947607181532L;
13
14     public void doGet(HttpServletRequest request, HttpServletResponse response)
15             throws ServletException, IOException {
16         outputChineseByOutputStream(response);//使用OutputStream流输出中文
17     }
18
19     /**
20      * 使用OutputStream流输出中文
21      * @param request
22      * @param response
23      * @throws IOException
24      */
25     public void outputChineseByOutputStream(HttpServletResponse response) throws IOException{
26         /**使用OutputStream输出中文注意问题:
27          * 在服务器端,数据是以哪个码表输出的,那么就要控制客户端浏览器以相应的码表打开,
28          * 比如:outputStream.write("中国".getBytes("UTF-8"));//使用OutputStream流向客户端浏览器输出中文,以UTF-8的编码进行输出
29          * 此时就要控制客户端浏览器以UTF-8的编码打开,否则显示的时候就会出现中文乱码,那么在服务器端如何控制客户端浏览器以以UTF-8的编码显示数据呢?
30          * 可以通过设置响应头控制浏览器的行为,例如:
31          * response.setHeader("content-type", "text/html;charset=UTF-8");//通过设置响应头控制浏览器以UTF-8的编码显示数据
32          */
33         String data = "中国";
34         OutputStream outputStream = response.getOutputStream();//获取OutputStream输出流
35         response.setHeader("content-type", "text/html;charset=UTF-8");//通过设置响应头控制浏览器以UTF-8的编码显示数据,如果不加这句话,那么浏览器显示的将是乱码
36         /**
37          * data.getBytes()是一个将字符转换成字节数组的过程,这个过程中一定会去查码表,
38          * 如果是中文的操作系统环境,默认就是查找查GB2312的码表,
39          * 将字符转换成字节数组的过程就是将中文字符转换成GB2312的码表上对应的数字
40          * 比如: "中"在GB2312的码表上对应的数字是98
41          *         "国"在GB2312的码表上对应的数字是99
42          */
43         /**
44          * getBytes()方法如果不带参数,那么就会根据操作系统的语言环境来选择转换码表,如果是中文操作系统,那么就使用GB2312的码表
45          */
46         byte[] dataByteArr = data.getBytes("UTF-8");//将字符转换成字节数组,指定以UTF-8编码进行转换
47         outputStream.write(dataByteArr);//使用OutputStream流向客户端输出字节数组
48     }
49
50     public void doPost(HttpServletRequest request, HttpServletResponse response)
51             throws ServletException, IOException {
52         doGet(request, response);
53     }
54
55 }

运行结果如下:

客户端浏览器接收到数据后,就按照响应头上设置的字符编码来解析数据,如下所示:

2.2、文件下载

  文件下载功能是web开发中经常使用到的功能,使用HttpServletResponse对象就可以实现文件的下载

文件下载功能的实现思路:

  1.获取要下载的文件的绝对路径

  2.获取要下载的文件名

  3.设置content-disposition响应头控制浏览器以下载的形式打开文件

  4.获取要下载的文件输入流

  5.创建数据缓冲区

  6.通过response对象获取OutputStream流

  7.将FileInputStream流写入到buffer缓冲区

  8.使用OutputStream将缓冲区的数据输出到客户端浏览器

范例:使用Response实现文件下载

 package gacl.response.study;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.io.PrintWriter;import java.net.URLEncoder;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/*** @author gacl* 文件下载*/public class ResponseDemo02 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {downloadFileByOutputStream(response);//下载文件,通过OutputStream流}/*** 下载文件,通过OutputStream流* @param response* @throws FileNotFoundException* @throws IOException*/private void downloadFileByOutputStream(HttpServletResponse response)throws FileNotFoundException, IOException {//1.获取要下载的文件的绝对路径String realPath = this.getServletContext().getRealPath("/download/1.JPG");//2.获取要下载的文件名String fileName = realPath.substring(realPath.lastIndexOf("\\")+1);//3.设置content-disposition响应头控制浏览器以下载的形式打开文件response.setHeader("content-disposition", "attachment;filename="+fileName);//4.获取要下载的文件输入流InputStream in = new FileInputStream(realPath);int len = 0;//5.创建数据缓冲区byte[] buffer = new byte[1024];//6.通过response对象获取OutputStream流OutputStream out = response.getOutputStream();//7.将FileInputStream流写入到buffer缓冲区while ((len = in.read(buffer)) > 0) {//8.使用OutputStream将缓冲区的数据输出到客户端浏览器out.write(buffer,0,len);}in.close();}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}

运行结果如下所示:

范例:使用Response实现中文文件下载

  下载中文文件时,需要注意的地方就是中文文件名要使用URLEncoder.encode方法进行编码(URLEncoder.encode(fileName, “字符编码”)),否则会出现文件名乱码。
  

package gacl.response.study;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.io.PrintWriter;import java.net.URLEncoder;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/*** @author gacl* 文件下载*/public class ResponseDemo02 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {downloadChineseFileByOutputStream(response);//下载中文文件}/*** 下载中文文件,中文文件下载时,文件名要经过URL编码,否则会出现文件名乱码* @param response* @throws FileNotFoundException* @throws IOException*/private void downloadChineseFileByOutputStream(HttpServletResponse response)throws FileNotFoundException, IOException {String realPath = this.getServletContext().getRealPath("/download/张家界国家森林公园.JPG");//获取要下载的文件的绝对路径String fileName = realPath.substring(realPath.lastIndexOf("\\")+1);//获取要下载的文件名//设置content-disposition响应头控制浏览器以下载的形式打开文件,中文文件名要使用URLEncoder.encode方法进行编码,否则会出现文件名乱码response.setHeader("content-disposition", "attachment;filename="+URLEncoder.encode(fileName, "UTF-8"));InputStream in = new FileInputStream(realPath);//获取文件输入流int len = 0;byte[] buffer = new byte[1024];OutputStream out = response.getOutputStream();while ((len = in.read(buffer)) > 0) {out.write(buffer,0,len);//将缓冲区的数据输出到客户端浏览器}in.close();}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}

运行结果如下所示:

**向客户端浏览器输出中文数据可以使用OutputStream流
也可以使用PrintWriter流
PrintWriter流详描述见以下博文
http://www.cnblogs.com/xdp-gacl/p/3789624.html**

HttpServletResponse对象实现文件下载相关推荐

  1. HttpServletResponse对象(一)

    web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象,和代表响应的response对象. request和response对象既然代表请求和响应,那么我 ...

  2. javaweb学习总结(七)——HttpServletResponse对象(一)

    Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象. request和response对象即然代表请求和响应,那我们 ...

  3. Request和Response-学习笔记05【ServletContext对象、文件下载】

    Java后端 学习路线 笔记汇总表[黑马程序员] Request和Response-学习笔记01[Request_原理和继承体系.Request_获取请求数据][day01] Request和Resp ...

  4. javaweb学习总结(七):HttpServletResponse对象(一)

    Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象. request和response对象即然代表请求和响应,那我们 ...

  5. Struts2教程6:在Action类中获得HttpServletResponse对象的四种方法

    在struts1.x Action类的execute方法中,有四个参数,其中两个就是response和request.而在Struts2中,并没有任何参数,因此,就不能简单地从execute方法获得H ...

  6. Struts2 - 在Action类中获得HttpServletResponse对象

    Struts2 - 在Action类中获得HttpServletResponse对象 在struts1.x Action类的execute方法中,有四个参数,其中两个就是 response和reque ...

  7. HttpServletResponse对象介绍

    一.HttpServletResponse对象介绍 HttpServletResponse对象代表服务器的响应.这个对象中封装了向客户端发送数据.发送响应头,发送响应状态码的方法.查看HttpServ ...

  8. 在Action类中获得HttpServletResponse对象的四种方法

    Struts2:在Action类中获得HttpServletResponse对象的四种方法 在struts1.x Action类的execute方法中,有四个参数,其中两个就是response和req ...

  9. Java Web学习总结(4)——HttpServletResponse对象入门

    Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象. request和response对象即然代表请求和响应,那我们 ...

最新文章

  1. 区块链论文:去中心化证人共同签名,让认证者诚信或被发现
  2. 高德纳咨询公司(Gartner)预测:2019年七大人工智能科技趋势
  3. 逻辑分析仪抓取CAN总线波特率
  4. 指定的服务器无法运行请求操作_服务器无法正常运行?也许是这3个原因导致的!...
  5. iscsi存储的简单配置
  6. 红黑联盟c语言教程,1.1.2 C语言的特点
  7. Mysql 5.5的编译安装 在ubuntu 10平台上面
  8. linux exchange邮件客户端,Linux中使用Hiri邮件客户端访问Exchange帐户
  9. python判断输入的数字是完全平方还是三次方
  10. leetcode - 84. 柱状图中最大的矩形
  11. 定义软件定义的存储市场
  12. 【全军覆没】麻省理工把中国学生拉入黑名单,斯坦福取消中国大陆面试! 这是怎么了?...
  13. linux下查询日志sed与或非,Linux命令之sed命令使用介绍
  14. 【转】Unity利用WWW http传输Json数据
  15. android系统apk文件,如何安装apk文件 安卓手机apk文件安装方法
  16. HTML中这是一个一级标题,html如何设置一级标题背景
  17. Unity学习笔记--实现一个简单的2D地图编辑器
  18. 【敏捷团队】7.敏捷最后冲刺
  19. uni-app 图片上传插件使用说明
  20. 如何绘制业务流程图?

热门文章

  1. iPhone漏电10年大量用户受伤,官方回应:建议戴套
  2. 态势感知平台:化解高校信息资产安全管理难题
  3. 心灵鸡汤若干,不喜勿入
  4. STM32 USB相关知识扫盲
  5. linux mate桌面主题下载_Mate桌面
  6. day01_redis
  7. 通过SQL校验身份证号码是否正确
  8. #MEM课程#《公司治理》课后总结
  9. WPF 数据库数据导出为Datatable,Datatable导出为Excel
  10. 可视化的三大误区,哪些可视化工具受欢迎?