ServletContext

ServletContext

1.ServletContext对象,tomcat为每一个web项目单独创建的一个上下文(知上知下贯穿全文)对象。服务器启动的时候,为每个WEB应用创建一个单独的ServletContext对象,我们可以使用这个对象存取数据,用这个对象存取的数据可以在整个WEB应用中获得。

2.常用功能
可以使用如下方法可以在多个servlet之间共享数据
在这里插入图片描述
可以获得当前WEB项目中的指定资源(文件)
在这里插入图片描述
可以进行整个web项目初始化数据设置 , 在web.xml可以给整个web项目配置初始化参数

<!-- 全局初始化参数(整个项目) -->
<context-param>
  <param-name>参数名</param-name>
  <param-value>参数值</param-value>
</context-param>

3.ServletContext获取或存储对象

package scon;

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

@WebServlet(urlPatterns = "/t")
public class MyCon extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取ServletContext对象的方法getServletContext()
        ServletContext servletContext = getServletContext();

        servletContext.setAttribute("name","tom");

        System.out.println(servletContext.getAttribute("name"));


    }
}

4.ServletContext读取WEB项目中的指定资源

既然 ServletContext 是 贯穿全文 的对象 ,所以项目中的资源 它都能访问到 , 主要 用它 获取
   web项目中文件.

   文件保存的位置 :
   1.src下           :   发布到 /WEB-INF/classes/文件名
   2.web目录下       :   发布到 /文件名
   3.WEB-INF目录下   :   发布到 /WEB-INF/文件名

   代码中获取路径 , 写法 应该是发布后的路径 .

   getRealPath(String str) : 获取真实路径 .
   参数 :  相对的路径
   返回值 : 真实文件路径.
   new File("真实路径")
   new FileInputStream("真实路径")

  ======================================================

  总结 :

  1. / 表示 web目录
  2. web目录下的文件  :    /文件名
  3. web-inf目录下的文件 : /WEB-INF/文件名
  4. src 目录下文件 :      /WEB-INF/classes/文件名
@WebServlet(urlPatterns = "/file")
public class FileServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("FileServlet.doGet");

        // 获取 ServletContext 对象
        ServletContext sc  = getServletContext();

        // 读取 web目录下文件 .
        String realPath = sc.getRealPath("/web下文件.txt");
        System.out.println(realPath);  // G:\apache-tomcat-8.5.34\webapps\day09\web下文件.txt

        // BufferedReader 直接读取一行数据
        BufferedReader br = new BufferedReader(new FileReader(realPath));
        String s = br.readLine();
        System.out.println(s);
    }
}
@WebServlet(urlPatterns = "/file2")
public class File2Servlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("FileServlet.doGet");

        // 获取 ServletContext 对象
        ServletContext sc  = getServletContext();

        // 读取 web-inf目录下文件 .
        String realPath = sc.getRealPath("/WEB-INF/web-inf下文件.txt");
        System.out.println(realPath);

        // BufferedReader 直接读取一行数据
        BufferedReader br = new BufferedReader(new FileReader(realPath));
        String s = br.readLine();
        System.out.println(s);

        System.out.println("=====================================");

        // 读取 src目录下文件 .
        String realPath2 = sc.getRealPath("/WEB-INF/classes/src下文件.txt");
        System.out.println(realPath2);

        // BufferedReader 直接读取一行数据
        BufferedReader br2 = new BufferedReader(new FileReader(realPath2));
        String s2 = br2.readLine();
        System.out.println(s2);
    }
}

package hm02_context_file;

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;

/*
    getResourceAsStream(String str) 获取资源输入流对象

    参数 : str 与 getRealPath()的参数一致
    返回值 : 输入流对象, 用来直接读取文件.

 */
@WebServlet(urlPatterns = "/file3")
public class File3Servlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        // 读取 a.jpg
        // 使用路径读取方式 (较麻烦)
//        String realPath = getServletContext().getRealPath("/a.jpg");
//        FileInputStream fileInputStream = new FileInputStream(realPath);

        // 使用 流 读取方式 (较简单)
        InputStream in = getServletContext().getResourceAsStream("/a.jpg");

        // 回写字节数据
        ServletOutputStream out = response.getOutputStream();

        // 读写数据
        byte[] b = new byte[1024];
        int len = 0;
        while ((len = in.read(b)) != -1) {
            out.write(b , 0 , len);
        }

        //释放资源
        out.close();
        in.close();

    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值