HttpServletResponse

Posted jiesi123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HttpServletResponse相关的知识,希望对你有一定的参考价值。

1.Response响应方法

设置响应行

setStatus()设置响应行状态码

设置响应头

setHeader()键值对形式

重定向

response.sendRedirect();需要状态码是302

技术图片

 

设置响应体

getWriter()将字符串返回到浏览器

解决中文乱码问题

解决response缓冲区乱码和解决浏览器乱码

response.setContentType("text/html;charset=UTF-8");

响应头设置字节

ServletOutputStream类,将文件写入浏览器

2.文件下载案例

步骤分析:

1.通过request获取文件的名字

2.解决get请求乱码问题

3.获取到agent头,明确是什么浏览器

4.解决浏览器兼容

5.明确数据源

6.明确目的地

7.开始复制

8.释放资源

//获取用户要下载的文件名
        String filename=request.getParameter("filename");
        //解决get请求乱码问题
        filename=new String(filename.getBytes("ISO8859-1"),"UTF-8");
        //获取user-agent头,明确是什么浏览器
        String agent=request.getHeader("User-Agent");
        //解决浏览器兼容问题
        String filenameEncoder="";
        if (agent.contains("MSIE")) {
                // IE浏览器
                filenameEncoder= URLEncoder.encode(filename, "utf-8");
                filenameEncoder= filenameEncoder.replace("+", " ");
        } else if (agent.contains("Firefox")) {
                // 火狐浏览器
        BASE64Encoder base64Encoder = new BASE64Encoder();
                filenameEncoder= "=?utf-8?B?"
                        + base64Encoder.encode(filename.getBytes("utf-8")) + "?=";
        } else {
                // 其它浏览器
                filenameEncoder= URLEncoder.encode(filename, "utf-8");                
        }
        //告知浏览器文件的类型
        response.setContentType(getServletContext().getMimeType(filename));
        //告知浏览器以附件方式打开,不是解析
        response.setHeader("Content-Disposition", "attachment;filename="+filenameEncoder);//设置文件名
        //获取文件绝对路径
        String path=getServletContext().getRealPath("download/"+filename);
        //获取文件源,明确数据源
        FileInputStream fis=new FileInputStream(path);
        //明确目的地
        ServletOutputStream out=response.getOutputStream();
        //开始复制
        int len=0;
        byte[] bytes=new byte[1024];
        while((len=fis.read(bytes))!=-1) {
            out.write(bytes, 0, len);
        }
        //释放资源
        fis.close();
    }

知识点:

告知浏览器文件类型

response.setContentType(getServletContext.getMimeType())

getMimeType()返回指定文件名的MIME类型

设置Content-Disposition头,告知文件类型

response.setHeader("Content-Disposition", "attachment;filename="+filenameEncoder);//设置文件名

 

以上是关于HttpServletResponse的主要内容,如果未能解决你的问题,请参考以下文章

HelloServlet类继承HttpServlet利用HttpServletResponse对象

Servlet响应httpServletResponse

Servlet响应httpServletResponse

Servlet响应httpServletResponse

Servlet响应httpServletResponse

在java中HttpServletResponse响应中文出现乱码。