ServletContext详解

ServletContext

基本介绍

1621666817071

你可以把它想象成一个公用的空间,可以被所有的客户访问,也就是说A客户端可以访问D,B客户端可以访问D,C客户端也可以访问D。

WEB容器在启动时,它会为每个Web应用程序都创建一个对应的ServletContext,它代表当前Web应用。并且它被所有客户端共享。

ServletContext对象可以通过ServletConfig.getServletContext()方法获得对ServletContext对象的引用,也可以通过this.getServletContext()方法获得其对象的引用。

由于一个WEB应用中的所有Servlet共享同一个ServletContext对象,因此Servlet对象之间可以通过ServletContext对象来实现通讯。ServletContext对象通常也被称之为context域对象。公共聊天室就会用到它。

当web应用关闭、Tomcat关闭或者Web应用reload的时候,ServletContext对象会被销毁

怎么使用ServletContext

使用ServletContext:

(1) 如何得到ServletContext对象

this.getServletContext();
this.getServletConfig().getServletContext();
request.getSession().getServletContext();

(2) 方法

添加属性:setAttribute(String name, Object obj);
得到值:getAttribute(String name),//这个方法返回Object
删除属性:removeAttribute(String name)
得到Mime类型(大类型/小类型,jpeg):context.getMinmeType(filename);
获取服务器真是文件路径: context.getRealPath(fileNamePath(相对路径));

(3) 生命周期
ServletContext中的属性的生命周期从创建开始,到服务器关闭结束。

应用

文件下载

        //获取请求下载参数文件名称
        String filename = request.getParameter("filename");
        ServletContext servletContext = this.getServletContext();
        //获取服务器真实路径
        String realPath = servletContext.getRealPath("./imagename");
        //文件输入流
        FileInputStream fileInputStream = new FileInputStream(realPath);
        //设置response响应头
        //1.设置响应头类型
        String mimeType = servletContext.getMimeType(filename);
        response.setHeader("context-type",mimeType);
        //设置响应头打开方式
        response.setHeader("content-disposition","attachment;filename="+filename);//filename时下载时显示的名称
        ServletOutputStream outputStream = response.getOutputStream();
        byte[] buff = new byte[1024*8];
        int len = 0;
        while ((len=fileInputStream.read(buff))!=-1){
            outputStream.write(buff,0,len);
        }
        outputStream.flush();
        outputStream.close();
        fileInputStream.close();
posted @ 2021-11-23 21:00  剪水行舟  阅读(640)  评论(0)    收藏  举报