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中获取输出流
输入流:将文件读取到输入流中
流拷贝:将文件以流的形式发送给浏览器



<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>文件下载title>
head>
<body>
    <h2>通过超链接的方式下载资源h2>
    <a href="/downloadServlet?filename=1.zip">1.zipa><br>
    <a href="/downloadServlet?filename=2.exe">2.exea><br>
    <a href="/downloadServlet?filename=3.txt">3.txta><br>
    <a href="/downloadServlet?filename=4.jpg">4.jpga><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待解决,我不知道为什么下载的文件名都一样,奇奇怪怪的,等有了解决方法再来补充哦~

你可能感兴趣的:(javaweb)