天天看點

15.ServletContext1. ServletContext概述2 ServletContext的使用

1. ServletContext概述

1.1 基本介紹

ServletContext對象,它是應用上下文對象。每一個應用有且隻有一個ServletContext對象。它可以實作讓應用中所有Servlet間的資料共享。

1.2 生命周期

出生——活着——死亡

出生: 應用一加載,該對象就被建立出來了。一個應用隻有一個執行個體對象。(Servlet和ServletContext都是單例的)

活着:隻要應用一直提供服務,該對象就一直存在。

死亡:應用被解除安裝(或者伺服器挂了),該對象消亡。

1.3 域對象概念

域對象的概念,它指的是對象有作用域,即有作用範圍。

域對象的作用,域對象可以實作資料共享。不同作用範圍的域對象,共享資料的能力不一樣。

在Servlet規範中,一共有4個域對象。今天我們講解的ServletContext就是其中一個。它也是我們接觸的第一個域對象。它是web應用中最大的作用域,叫application域。每個應用隻有一個application域。它可以實作整個應用間的資料共享功能。

2 ServletContext的使用

2 1 ServletContext介紹

ServletContext 是應用上下文對象。每一個應用中隻有一個 ServletContext 對象。

作用:可以獲得應用的全局初始化參數和達到 Servlet 之間的資料共享。

生命周期:應用一加載則建立,應用被停止則銷毀。

15.ServletContext1. ServletContext概述2 ServletContext的使用

2.2 域對象

域對象指的是對象有作用域。也就是有作用範圍。域對象可以實作資料的共享。不同作用範圍的域對象,共享資料的能力也不一樣。

在 Servlet 規範中,一共有 4 個域對象。ServletContext 就是其中的一個。它也是 web 應用中最大的作用域,也叫 application 域。它可以實作整個應用之間的資料共享!

2.3 ServletContext配置

ServletContext既然被稱之為應用上下文對象,是以它的配置是針對整個應用的配置,而非某個特定Servlet的配置。它的配置被稱為應用的初始化參數配置。

配置的方式,需要在

<web-app>

标簽中使用

<context-param>

來配置初始化參數。具體代碼如下:

<!--配置應用初始化參數-->
<context-param>
    <!--用于擷取初始化參數的key-->
    <param-name>servletContextInfo</param-name>
    <!--初始化參數的值-->
    <param-value>This is application scope</param-value>
</context-param>
<!--每個應用初始化參數都需要用到context-param标簽-->
<context-param>
    <param-name>globalEncoding</param-name>
    <param-value>UTF-8</param-value>
</context-param>
           

2.4 ServletContext常用方法

public class ServletContextDemo extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //擷取ServletContext對象
        ServletContext context = getServletContext();

        //擷取全局配置的globalEncoding
        String value = context.getInitParameter("globalEncoding");
        System.out.println(value);

        //擷取應用的通路虛拟目錄
        String contextPath = context.getContextPath();
        System.out.println(contextPath);

        //根據虛拟目錄擷取應用部署的磁盤絕對路徑
        //擷取b.txt檔案的絕對路徑
        String b = context.getRealPath("/b.txt");
        System.out.println(b);

        //擷取c.txt檔案的絕對路徑
        String c = context.getRealPath("/WEB-INF/c.txt");
        System.out.println(c);

        //擷取a.txt檔案的絕對路徑
        String a = context.getRealPath("/WEB-INF/classes/a.txt");
        System.out.println(a);


        //向域對象中存儲資料
        context.setAttribute("username","zhangsan");

        //移除域對象中username的資料
        //context.removeAttribute("username");
    }

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