Java学习笔记(七十 一)—— SerlvetContext

概念
  • SerlvetContext对象代表整个web应用,可以和程序的容器(服务器)来通信
获取
  • 通过request对象获取
    request.getServletContext();

  • 通过HttpServlet获取
    this.getServletContext();

    		// ServletContext对象获取
            ServletContext servletContext1 = request.getServletContext();
            ServletContext servletContext2 = this.getServletContext();
            System.out.println(servletContext1); // org.apache.catalina.core.ApplicationContextFacade@429db069
            System.out.println(servletContext2); // org.apache.catalina.core.ApplicationContextFacade@429db069
            System.out.println(servletContext1==servletContext2); // true
功能

获取MIME类型

  • MIME类型:在互联网通信过程中定义的一中文件数据类型
    • 格式:大类型/小类型 text/html
  • 获取:String getMimeType(String file)
            // ServletContext对象获取
            ServletContext servletContext = request.getServletContext();
            // 定义文件名称
            String filename="a.jpg";
            String mimeType = servletContext.getMimeType(filename);
            System.out.println(mimeType); // image/jpeg

域对象:共享数据

  1. setAttribute(String name,Object value)
  2. getAttribute(String name)
  3. removeAttribute(String name)
  • ServletContext对象的范围:所有用户所有请求的数据

    		// 文件ServletContextDemo3.class
            // ServletContext对象获取
            ServletContext servletContext = request.getServletContext();
            // 设置数据
            servletContext.setAttribute("nihao","hello");
    		// 文件ServletContextDemo4.class
            // ServletContext对象获取
            ServletContext servletContext = request.getServletContext();
            Object nihao = servletContext.getAttribute("nihao");
            System.out.println(nihao);

获取文件的真实(服务器)路径

  1. String getRealPath(String path)
            // ServletContext对象获取
            ServletContext servletContext = request.getServletContext();
            // ‘/’代表web文件夹,web目录下的a.txt
            String realPath = servletContext.getRealPath("/a.txt");
            // web目录下WEB-INF下的b.txt
            String realPath1 = servletContext.getRealPath("/WEB-INF/b.txt");
            // src目录下的c.txt
            String realPath2 = servletContext.getRealPath("/WEB-INF/classes/c.txt");
            System.out.println(realPath2);
练习
  1. 文件下载

    需求:
    	页面显示连接
    	点击超链接后弹出下载提示框
    	点击图片完成下载
    @WebServlet("/downloadservlet")
    public class DownLoadServlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // 1. 获取请求参数,获取文件名称
            String filename = request.getParameter("filename");
            // 2、使用字节输入流加载文件进内存
            // 2.1、找到文件的服务器路径
            ServletContext servletContext = this.getServletContext();
            String realPath = servletContext.getRealPath("/WEB-INF/classes/"+filename);
            System.out.println(realPath);
            // 2.2、用字节流关联
            FileInputStream fileInputStream = new FileInputStream(realPath);
            // 3、设置response的响应头
            // 3.1、设置响应头类型
            String mimeType = servletContext.getMimeType(filename);
            response.setHeader("content-type",mimeType);
            // 3.2、设置响应头打开方式
            response.setHeader("content-disposition","attachment;filename="+filename);
            // 4、将输入流的数据写出到输出流中
            ServletOutputStream outputStream = response.getOutputStream();
            byte[] buff=new byte[1024*8];
            int len=0;
            while ((len=fileInputStream.read(buff))!=-1){
                outputStream.write(buff,0,len);
            }
            fileInputStream.close();
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            this.doPost(request,response);
        }
    }
    <a href="/day24_war_exploded/downloadservlet?filename=cat.jpg">下载图片</a>
发布了113 篇原创文章 · 获赞 1 · 访问量 919

猜你喜欢

转载自blog.csdn.net/weixin_44876003/article/details/103641300