response的知识点(加一个文件下载)

又是糟心的一天,拖堂啊!!!!!!!!!!!!!!!!!!什么时候能不拖堂!!!!!!!!!!!!!!但是还是要好好总结,好好学习。

一、Http的响应报文

组成:
响应行:方法:setStatus(状态码)
响应头:方法:setHeader(key,value)
response.setHeader(“refresh”,“3;url=http://www.baidu.con”)//定时跳转
响应体:response.print();//可以写入null
response.write()//不可以写入null,会空指针异常

二、httpServletResponse对象

1.使用HttpServletResponse设置响应行
response.setStatus(500);
2.设置响应头的方法:response.setHeader(key,value);
response.setHeader(“refresh”,“3;http://www.baidu.com”);
3.转发:
response.sendRedirect("/day04/")
4.重定向和请求转发的区别(面试)
1.实现原理:请求转发在服务器内部完成的 重定向在服务器外部完成的
2.请求次数: 请求转发一次请求,重定向至少俩次请求
3.地址栏地址:请求地址不变 重定向地址栏发生改变

三、ServletContext域对象应用

【1】获取ServletContext域对象: request.getServletContext();
【2】往域对象中存值,取值,移除值:
【存数据】
context.setAttribute(“contextName”, “传智播客!”);
【取数据】
context.getAttribute(“contextName”);
【移除数据】
context.removeAttribute(“contextName”);

四、文件下载

1、文件后台下载的本质:流拷贝,将文件以流的形式从服务器发用给浏览器;
2、文件下载的步骤:两个头+两个流
两个头:
设置content-disposition头,告诉浏览器以附件的形式下载当前文件
设置mimeType头,告诉浏览器下载的文件的mimeType(可省略)
两个流:
输出流:从response中获取输出流
输入流:将文件读取到输入流中
流拷贝:将文件以流的形式发送给浏览器

<!--download.html-->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>文件下载</title>
</head>
<body>
    <h2>通过超链接的方式下载资源</h2>
    <a href="/downloadServlet?filename=1.zip">1.zip</a><br>
    <a href="/downloadServlet?filename=2.exe">2.exe</a><br>
    <a href="/downloadServlet?filename=3.txt">3.txt</a><br>
    <a href="/downloadServlet?filename=4.jpg">4.jpg</a><br>
</body>
</html>
//DownloadServlet.java
@WebServlet("/downloadServlet")
public class DownloadServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //文件下载
        //filename
        String filename = request.getParameter("filename");

        //file
        String realPath = request.getServletContext().getRealPath("resource");
        File file = new File(realPath,filename);

        //1、设置头信息
        //告诉浏览器以附件的形式打开这个文件
        response.setHeader("content-disposition","attachment;filename="+filename);
        
        //2、设置两个流
        //通过response获取输出流
        ServletOutputStream out = response.getOutputStream();
        //将需要下载的文件读取到输入流中
        FileInputStream in = new FileInputStream(file);
        //流拷贝:
        int len = 0;
        byte[] buff = new byte[1024*8];
        while ((len = in.read(buff)) != -1) {
            out.write(buff,0,len);
        }
        out.close();
        in.close();

    }
}

你们看就这么点内容,讲了一早上,不扩展,不补充,想打人,暴躁的我 。。。。。。
对了,有一个bug待解决,我不知道为什么下载的文件名都一样,奇奇怪怪的,等有了解决方法再来补充哦~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值