HttpServletResponse对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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对象的主要内容,如果未能解决你的问题,请参考以下文章

HttpServletResponse对象

HttpServletResponse对象

4,学习总结-HttpServletResponse

HttpServletResponse对象之常见应用

重新认识HttpServletResponse对象,你学会了吗?--乐字节

JavaWeb---总结HttpServletResponse对象