写点什么

JavaWeb 核心之 ServletContext

作者:楠羽
  • 2022 年 9 月 23 日
    福建
  • 本文字数:1692 字

    阅读完需:约 6 分钟

3 ServletContext

3.1 ServletContext 概述

3.1.1 基本介绍

ServletContext 对象,它是应用上下文对象。每一个应用有且只有一个 ServletContext 对象。它可以实现让应用中所有 Servlet 间的数据共享。

3.1.2 生命周期

出生——活着——死亡


出生: 应用一加载,该对象就被创建出来了。一个应用只有一个实例对象。(Servlet 和 ServletContext 都是单例的)


活着:只要应用一直提供服务,该对象就一直存在。


死亡:应用被卸载(或者服务器挂了),该对象消亡。

3.1.3 域对象概念

域对象的概念,它指的是对象有作用域,即有作用范围。


域对象的作用,域对象可以实现数据共享。不同作用范围的域对象,共享数据的能力不一样。


在 Servlet 规范中,一共有 4 个域对象。今天我们讲解的 ServletContext 就是其中一个。它也是我们接触的第一个域对象。它是 web 应用中最大的作用域,叫 application 域。每个应用只有一个 application 域。它可以实现整个应用间的数据共享功能。

3.2 ServletContext 的使用

3.2 1 ServletContext 介绍

ServletContext 是应用上下文对象。每一个应用中只有一个 ServletContext 对象。作用:可以获得应用的全局初始化参数和达到 Servlet 之间的数据共享。生命周期:应用一加载则创建,应用被停止则销毁。
复制代码


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I3uuVRhN-1663838647502)(assets/ServletContext.png)]

3.2.2 域对象

域对象指的是对象有作用域。也就是有作用范围。域对象可以实现数据的共享。不同作用范围的域对象,共享数据的能力也不一样。
在 Servlet 规范中,一共有 4 个域对象。ServletContext 就是其中的一个。它也是 web 应用中最大的作用域,也叫 application 域。它可以实现整个应用之间的数据共享!
复制代码

3.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>
复制代码

3.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); }}
复制代码


发布于: 刚刚阅读数: 3
用户头像

楠羽

关注

还未添加个人签名 2022.08.04 加入

还未添加个人简介

评论

发布
暂无评论
JavaWeb核心之ServletContext_Servlet_楠羽_InfoQ写作社区