Servlet教程-ServletContext

ServletContext是Servlet运行的上下文环境,用于记录事件、获取资源和共享数据。可以通过getInitParameter获取初始化参数,setAttribute和getAttribute进行属性绑定和读取。在Servlet008中设置属性后,Servlet009能访问并移除这些属性,展示了数据在Servlet间的共享。此外,ServletContext还提供访问静态资源的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ServletContext(Servlet上下文)接口定义了servlet运行在Web应用的视图,servlet应用容器负责提供其实现。Servlet可以使用ServletContext对象记录事件,获取URL引用的资源,存取当前上下文的其他Servlet可访问的属性。
ServletContext是Web服务中服务访问路径的根。例如,Servlet服务访问路劲为:http://localhost:8080/servlet/userServlet,/servlet称为上下文路径。
注意:Web服务器中仅部署一个Web项目时,可以不配置上下文(虚拟主机)。但部署多个Web项目时,一定要配置项目的上下文,且上下文不会在虚拟主机之间共享。

初始化参数

ServletContext接口允许Servlet访问由应用开发人员在Web应用中的部署描述符中指定上下文的初始化参数:

  • getInitParameter
  • getInitPatameterNames

上下文属性

Servlet中可以将数据与上下文进行绑定,同一个Web中其他任何Servlet都已访问到该数据。上下文属性方法:

  • setAttribute(String name, Object object) – 设置绑定属性
  • getAttribute(String name) – 获取指定绑定的属性值
  • getAttributeNames() – 获取所有的绑定的属性名称(返回枚举类型)
  • remoteAttribute(String name) – 移除绑定的属性
public class Servlet008 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("this is servlet008");

        // 获取ServletContext对象
        ServletContext servletContext = request.getServletContext();
        // 属性绑定上下文对象
        servletContext.setAttribute("username", "admin");
        servletContext.setAttribute("pwd", "123456");

        // 请求转发
        request.getRequestDispatcher("/servlet009").forward(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

public class Servlet009 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("this is servlet009");

        // 获取ServletContext对象
        ServletContext servletContext = request.getServletContext();
        // 获取上下文对象绑定的属性值
        // username1:admin
        System.out.println("username1:" + servletContext.getAttribute("username"));

        Enumeration<String> attributeNames = servletContext.getAttributeNames();
        /**
         * 此处输出包含了自定义绑定的属性名,还有系统字典的属性名
         */
        while (attributeNames.hasMoreElements()) {
            String name = attributeNames.nextElement();
            System.out.println(name + ":" + servletContext.getAttribute(name));
        }
        // 移除绑定的属性
        servletContext.removeAttribute("username");

        // username2:null
        System.out.println("username2:" + servletContext.getAttribute("username"));
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

资源

ServletContext接口提供了直接访问Web应用中静态资源文件(HTML、图片、CSS等)的方法:

  • getResource(String path) – 根据资源文件路径获取资源的URL,返回URL对象
  • getResourceAsStream(String path) – 根据资源文件路径获取资源字节流对象,返回InputStream对象
    以上两个方法需要以**/开头的字符串作为参数,资源路径是相对于上下文的根目录,或者想对于Web应用WEB-INF/lib目录下JAR文件中META-INF/resources**目录。
    资源文件查找顺序:
  1. Web应用上下文根目录
  2. WEB-INF/lib目录下JAR文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值