ServletContext

ServletContext

概念:代表整个web应用,可以和程序的容器(服务器)来通信

获取:

  1. 通过request对象来获取
    • request.getServletContext()
  2. 通过HttpServlet获取
    • this.getServletContext()
  • 两种方法获取只能获取一个,获取的是同一个

功能:

  1. 获取MIME类型

    • MIME类型:在互联网通信过程中定义的一种文件数据类型
      • 格式:大类型/小类型 text/html image/jpeg
    • 获取:String getMimeType(String file)
  2. 域对象,共享数据

    1. setAttribute(String name, Object value)
    2. getAttribute(String name)
    3. removeAttribute(String name)
    • 这个域的范围:所有用户所有请求的数据
  3. 获取文件的真实(服务器)路径

    1. 方法:String getRealPath(String Path)
      • web目录下获取,直接/a.txt
      • WEB-INF目录下获取,/WEB-INF/a.txt
      • src目录下获取,/WEB-INF/classes/a.txt

文件下载案例

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    //通过传递的参数获取要下载的文件的文件名
    String filename = req.getParameter("filename");
    ServletContext servletContext = this.getServletContext();
    //通过ServletContext获取要下载文件的真实路径
    String realPath = servletContext.getRealPath("/img/" + filename);
    //创建字节输入流,用于读取文件
    FileInputStream fis = new FileInputStream(realPath);
    //获取发送文件的MIME数据类型
    String mimeType = servletContext.getMimeType(filename);
    //设置content-type响应头
    resp.setHeader("content-type", mimeType);
    //设置content-disposition响应头,设置成附件打开
    resp.setHeader("content-disposition", "attachment;filename=" + filename);
    //获取字节输出流
    ServletOutputStream os = resp.getOutputStream();
    byte[] bytes = new byte[1024];
    int len = 0;
    //下载文件
    while ((len = fis.read(bytes)) != -1) {
        os.write(bytes, 0, len);
    }
    //释放资源
    fis.close();
}
  • 注意:在弹出的下载框中会遇到中文文件名乱码问题,需要针对不同浏览器进行解决,可以先获取浏览器的版本信息,然后设置编码,网上有很多解决这个问题的工具类,可以咨询查找。
  • 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!

请我喝杯咖啡吧~

支付宝
微信