HttpServletResponse对象

装载自:http://www.cnblogs.com/xdp-gacl/p/3789624.html

1.HttpServletResponse对象介绍

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

代码如下:

/*
 * 介绍:web服务器收到客户端(浏览器)的HTTP请求,会针对每一个请求创建一个request对象和一个response对象,
 * 那么我们要获取客户端发送的数据直接找request,向客户端响应直接找response即可
   HttpServletRequest  父类是ServletRequest
   HttpServletResponse :父类是ServletResponse,实现类:HttpServletResponseWraper;
   HttpServletResponse对象封装了像客户端发送数据、发送响应头\发送状态码的方法
   负责向浏览器返回数据的方法:
    getOutputStream();getWriter()
    发送状态:setStatus();
  发送头:response.addHeader(arg0, arg1);设置返回头可以浏览器的以utf-8或者某种编码来显示
  
 * 
 * 
 * */
public class HttpServletResponse003 extends HttpServlet{
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException  {
   //outputChineseByOutputStream(response);//使用OutputStream流像浏览器输出中文
   outputChineseByPrintWriter(response);//使用PrintWriter流像浏览器输出中文
  
 }
 
private void outputChineseByOutputStream(HttpServletResponse response) throws IOException{
response.setHeader("content-type", "text/html;charset=UTF-8"); //设置编码方式控制浏览器以utf-8编码打开数据
String data="中国你好";
OutputStream os=response.getOutputStream();  //取到OutputStream输出流
byte [] dataByte=data.getBytes("UTF-8"); //将字符转换成字节数组,指定以UTF-8编码进行转换
os.write(dataByte);  //使用OutputStream流向客户端输出字节数组
 
 
}
//当需要向浏览器输出字符数据时,使用PrintWriter比较方便,省去了将字符转换成字节数组那一步。
private void outputChineseByPrintWriter(HttpServletResponse response) throws IOException{
String data="使用PrintWriter流输出";
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();//获取PrintWriter输出流
//out.write("");
// out.write(data);//使用PrintWriter流向客户端输出字符
//向浏览器的所有输出都必须以字符串的形式
out.write(1+"");
}
 

2.使用Response实现文件的下载:

文件下载的步骤:

(1)获取下载文件的绝对路径;(2)获取文件下载的文件名;(3)设置content-disposition响应头控制浏览器已下载的形式打开文件;(4)获取要下载的文件输入流;(5)创建数据缓冲区;(6)通过response对象获取OutputStream流;(7)将FileInputStream流写入到buffer缓冲区;

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

代码如下:

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;


import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


//使用response对象下载文件
/*
文件下载的步骤:
(1)获取下载文件的绝对路径;(2)获取文件下载的文件名;(3)设置content-disposition响应头控制浏览器已下载的形式打开文件;(4)获取要下载的文件输入流;(5)创建数据缓冲区;(6)通过response对象获取OutputStream流;(7)将FileInputStream流写入到buffer缓冲区;
(8)使用OutputStream将缓冲区的数据输出到客户端浏览器*/
public class ResponseLoadPicature  extends HttpServlet{
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException{
//1、使用OutputStream下载文件,使用字符流处理
//downloadFileByOutputStream(response);
//2、使用PrinterWriter下载文件,处理字符流
//upLoadPictureByPrinterWriter(response);
}


private void downloadFileByOutputStream(HttpServletResponse response) throws IOException{
//图片的中文名字要进行URLEncoder.encode方法进行编码否则或乱码
String path=this.getServletContext().getRealPath("/WEB-INF/img/集合.png");
//2获取到文件的名字
String fileName=path.substring(path.lastIndexOf("\\")+1);
System.out.println("文件名为:"+fileName);
//3设置content-disposition响应头控制浏览器以下载的形式打开文件
response.setHeader("content-disposition", "attachment;filename="+URLEncoder.encode(fileName, "UTF-8"));
//4.获取要下载的文件输入流
InputStream is=new FileInputStream(path);
int len=0;
//创建数据缓冲区
byte [] buffer=new byte[1024];
OutputStream out=response.getOutputStream();
while((len=is.read(buffer))>0){
out.write(buffer);
}
is.close();

}

//使用字符数据流PrinterWriter流处理图片,使用字符数据流处理图片可能会丢失数据,而字节数据流可以出来任意类型的数据流
private  void upLoadPictureByPrinterWriter(HttpServletResponse response) throws IOException{
String path=this.getServletContext().getRealPath("/WEB-INF/img/集合.png");
//2获取到文件的名字
String fileName=path.substring(path.lastIndexOf("\\")+1);
System.out.println("文件名为:"+fileName);
//3设置content-disposition响应头控制浏览器以下载的形式打开文件
response.setHeader("content-disposition", "attachment;filename="+URLEncoder.encode(fileName, "UTF-8"));
FileReader fr =new FileReader(path);
char [] buffer=new char[1024];
//获取输出流
PrintWriter pw=response.getWriter();
int len=0;
if((len=fr.read(buffer))>0){
pw.write(buffer);
}





}


}








你可能感兴趣的:(JavaWeb开发)