首页 > 代码库 > HttpServletResponse对象

HttpServletResponse对象

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


request和response对象即然代表请求和响应,那我们要获取客户机提交过来的数据,只需要找request对象就行了。要向客户机输出数据,只需要找response对象就行了。

 

HttpServletResponse对象是服务器的响应。这个对象中封装了向客户端发送数据、发送响应头,发送响应状态码的方法。

 

 //用outputStream输出中文数据的问题

//输出gb2312的数据,没有问题    public void test1(HttpServletResponse response) throws IOException{                String data = "中国";        OutputStream out = response.getOutputStream();        out.write(data.getBytes());            }

 

 

//输出UTF-8的数据,有问题,需要控制浏览器以utf-8打开    public void test2(HttpServletResponse response) throws IOException{                //<meta>  模似一个http响应头        //使用http协议控制浏览器以utf-8打开下面发送的数据        response.setHeader("content-type", "text/html;charset=UTF-8");//注意是分号,不能是逗号                String data = "中国";        OutputStream out = response.getOutputStream();        out.write(data.getBytes("UTF-8"));//输出的数据为了让不同国家的人都能看到,一般用utf-8码表写给浏览器,这样必须要通知浏览器以相同码表打开才不会乱码。            }
//用<meta>  模似一个http响应头,控制浏览器以UTF-8打开数据    public void test3(HttpServletResponse response) throws IOException{                response.getOutputStream().write("<meta http-equiv=‘content-type‘ content=‘text/html;charset=UTF-8‘>".getBytes());        String data = "中国";        OutputStream out = response.getOutputStream();        out.write(data.getBytes("UTF-8"));            }

 

 //用Writer输出中文数据,服务器使用的是ISO8859-1码表  

  注意与OutPutStream的不同。

使用字符流writer时,必须要设置两个码表,避免乱码

response.setCharacterEncoding("UTF-8");  
response.setContentType("text/html;charset=UTF-8");
 
public void test1(HttpServletResponse response) throws IOException{                //更改response的码表,通知服务器用UTF-8码表去取response中的数据,然后写给客户机        response.setCharacterEncoding("UTF-8");          //通知浏览器以UTF-8码表打开回送的数据        //response.setHeader("content-type", "text/html;charset=UTF-8");        response.setContentType("text/html;charset=UTF-8");//与上一句功能一样。写哪个都可以。                String data = "中国";        PrintWriter writer = response.getWriter();        writer.write(data);    }

 

 

public void test2(HttpServletResponse response) throws IOException{        //这句话调用后,相当于把response.setCharacterEncoding("UTF-8");  也设好了        response.setContentType("text/html;charset=UTF-8");        String data = "中国";        PrintWriter writer = response.getWriter();        writer.write(data);    }

 

 

//实现中文文件下载

public void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        //1.获取需要下载的文件        String path = this.getServletContext().getRealPath("/download/日本妞.jpg");//download目录位于WebRoot根目录        String filename = path.substring(path.lastIndexOf("\\")+1);                //2.通知浏览器以下载方式打开  (下载的中文文件名必须要给过URL编码)        response.setHeader("content-disposition", "attachment;filename="+URLEncoder.encode(filename, "UTF-8"));                //3.向浏览器写出数据        FileInputStream in = null;        try{            OutputStream out = response.getOutputStream();            in = new FileInputStream(path);                        byte buffer[] = new byte[1024];            int len = 0;            while((len=in.read(buffer))>0){                out.write(buffer,0,len);            }        }finally{            if(in!=null){                in.close();            }        }            }    public void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        doGet(request, response);    }

 

HttpServletResponse对象