response入门

来源:互联网 发布:康佳网络电视售后电话 编辑:程序博客网 时间:2024/04/29 20:14

通过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不能同时调用
这里写图片描述

原创粉丝点击