response入门

通过response设置响应行

设置响应行的状态码
setStatus(int sc)

通过response设置响应头

addHeader(String name , String value)
addIntHeader(String name , int value)
addDateHeader(String name , long date)

setHeader(String name , String value)

setDateHeader(String name , long date)
setIntHeader(String name , int value)

重定向:(1)状态码302 (2)响应头location 代表重定向的地址。

通过response设置响应体

(1)响应体设置文本
PrintWriter getWriter()获得字符流,通过字符流的write方法可以将字符串设置到response缓冲区中,随后Tomcat会将response缓冲区中的内容组装成http响应返回给浏览器端。
response缓冲区的默认编码是iso-8859-1,此码表没有中文。解决方法为:response.setContentType(“text/html;charset=UTF-8”);

(2)响应体设置字节(可以设置图片等等)
ServletOutputStream getOutputStream()获得字节流,通过该字节流的write方法可以向缓冲区中写入字节,再由Tomcat将response缓冲区中的内容组装成http响应返回给浏览器端。


以下为浏览器从服务器1.按照字节流读取文件 2.按字节流下载文件

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 使用response获得字节输出
        ServletOutputStream out = response.getOutputStream();
        //获得服务器上的图片
        String repath = this.getServletContext().getRealPath("/javaweb流程.jpg");
        InputStream in= new FileInputStream(repath);
        int len=0;
        byte[] buffer=new byte[1024];
        while ((len=in.read(buffer))>0) {
            out.write(buffer, 0, len);
        }
        in.close();
        out.close();

    }

通过上图可以将图片从服务器端传输到浏览器,但浏览器直接解析图片显示在页面上,而不是提供下载。如果需要设置所有的文件都以下载的方式传输,我们需要设置两个响应头来告知浏览器文件的类型和打开方式:
(1)告知浏览器文件的类型:response.setContentType(文件的mime类型);
(2)告知浏览器文件的打开方式是下载:response.setHeader(“Content-Disposition”,”attachment;filename=文件名称”);
下面为代码:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 获得要下载的文件的名称
        String filename=request.getParameter("filename");
        //获取文件的绝对路径
        String realPath = this.getServletContext().getRealPath("download/"+filename);
        //要下载的文件的类型——客户端通过MIME区分类型
        response.setContentType(this.getServletContext().getMimeType(filename));
        //告诉客户端该文件不是直接解析而是以附件形式打开
        response.setHeader("Content-Disposition","attachment;filename="+filename);
        //获得该文件的输入流
        InputStream in = new FileInputStream(realPath);
        //获得输出流——通过response获得的输出流,用于向客户端写内容
        ServletOutputStream out=response.getOutputStream();
        //文件拷贝
        int len=0;
        byte[] buffer=new byte[1024];
        while((len=in.read(buffer))>0) {
            out.write(buffer, 0, len);
        }
        in.close();
        out.close();



    }

response细节点:

1)response获得的流不需要手动关闭,tomcat会帮我们关掉
2)getWriter和getOutputStream不能同时调用
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值