• ServletContext
    • ServletResponse

    • ServletContext

      • 代表整个web应用,可以和程序的容器(服务器)来通信
      • 获取方式
          1. 通过request对象获取
          1. 通过HttpServlet获取
      • 方法-功能
        • 获取MIME类型
        • 通过域对象设置共享数据
        • 获取文件真实的(服务器路径)-“Out/…下面”
          • 项目文件夹的web目录,web-inf目录,src目录下的资源文件对应的真实路径
          • src目录下的资源会被放到WEB-INF下的classes文件夹中
          • image.png
          • image.png
    • Response

      • 设置响应信息
        • 设置相应头
        • 设置相应行
        • 设置响应体
      • 服务器输出数据到浏览器中
        • 字符输出流
        • 字节输出流
      • 重定向和转发的区别

        • redirect 和 forward
          • 重定向的特点:redirect

            1. 地址栏发生变化
              2. 重定向可以访问其他站点(服务器)的资源
              3. 重定向是两次请求。不能使用request对象来共享数据
    • 转发的特点:forward

      1. 1. 转发地址栏路径不变


      2. 转发只能访问当前服务器下的资源
      3. 转发是一次请求,可以使用request对象来共享数据

    • 案例:文件下载-要求点击超链接,弹出下载询问框

        1. 页面显示超链接
        1. 点击超链接后弹出下载提示框
        1. 完成图片文件下载
      • 关键
        • 使用响应头设置资源的打开方式: content-disposition:attachment;filename=xxx
      • 步骤
        • 获取文件名字fileName 和 Mime 文件类型
        • 获取文件的真实服务器路径 通过(/img+fileNme)获得,这里默认知道在工作目录/img/fileName 有这个资源
        • 设置响应头 MIME文件类型
        • 设置资源打开方式resp.setHeader(“content-disposition”, “attachment;filename=” + fileName)
        • 将数据写出到response输出流
        • 如果要解决文件中文名问题:使用Utils工具,入参数(agent,fileName)
          • user-agent
          • User-Agent是Http协议中的一部分,属于头域的组成部分,User Agent也简称UA。用较为普通的一点来说,是一种向访问网站提供你所使用的浏览器类型、操作系统及版本、CPU 类型、浏览器渲染引擎、浏览器语言、浏览器插件等信息的标识。UA字符串在每次浏览器 HTTP 请求时发送到服务器!
          • 浏览器UA 字串的标准格式为: 浏览器标识 (操作系统标识; 加密等级标识; 浏览器语言) 渲染引擎标识 版本信息
      • 代码 ```java package com.jquan;

    import com.jquan.Utils.DownLoadUtils; import com.sun.javaws.IconUtil;

    import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream;

    @WebServlet(“/demo6”) public class ServletDemo6 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 获取文件名参数 String fileName = req.getParameter(“fileName”);

        //得到文件真实所在路径,获取输入流
        ServletContext servletContext = req.getServletContext();
    
        String realPath = servletContext.getRealPath("/img/" + fileName);
        System.out.println("see real path of /img/" + fileName + "is: " + realPath);
    
        FileInputStream input = new FileInputStream(realPath);
    
        //设置响应头类型--获取文件的 Mime-Type 类型 (Mime-Type数据格式规范)
        String mTypeofFile1 = servletContext.getMimeType(fileName);
        resp.setContentType(mTypeofFile1);
    
    
        /**通过Utils解决文件名中文问题*/
        String agent = req.getHeader("user-agent");
        fileName = DownLoadUtils.getFileName(agent, fileName);
    
    
        //设置响应头打开方式
        resp.setHeader("content-disposition", "attachment;filename=" + fileName);
    
        //通过response 输出流 输出
        ServletOutputStream servletOutputStream = resp.getOutputStream();
        byte[] buf = new byte[1024 * 8];
        int len = 0;
        while ((len = input.read(buf)) != -1) {
            servletOutputStream.write(buf, 0, len);
        }
    
        input.close();
    
    
    }
    
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }
    

    }

    ```