JavaWeb-ServletContext应用域接口

文章目录

  • ServletContext接口简介
  • 获取一个ServletContext对象
  • ServletContext接口中的相关方法
    • 获取应用域配置参数
    • 关于应用域参数的配置要求
    • getContextPath获取项目路径
    • getRealPath获取真实路径
    • log系列方法添加相关日志
    • 增删查应用域属性

ServletContext接口简介

ServletContext接口和Servlet和ServletConfig接口一样, 都是位于jakarta.servlet这个包下的接口, 其中Servlet接口的实现对象, 代表着提供服务的类的对象, ServletConfig接口对应的相应的Servlet对象的一些配置信息(位于web.xml文件下的servlet标签中的信息)

ServletContext 对象, 代表的是应用域 信息,
每一个webapp项目, 有且仅有一个ServletContext对象

关于上面三个接口之间的关系, 我想我们可以通过下面的视图来简单描述一下

在这里插入图片描述

学校与班级的例子:

对于一个Tomcat服务器(Servlet容器)来说, 相当于一个学校, 其中管理许多不同的webapp我们类比为班级, 每个班级的相关规定所对应的对象, 也就是ServletContext对象, 他对班级中的所有对象都生效, 也就是应用域的概念, 班里有许多的同学, 这些对象我们称之为一个个的Servlet对象, 每一个同学都对应一个独属于自己的信息对象, 也就是ServletConfig对象, 通过这样的类比, 我们对这三个接口所对应的对象的体会应该就更深了…


获取一个ServletContext对象

上一节我们说了, ServletConfig接口中有一个getServletContext方法, 这个方法就是返回一个ServletContext对象, 下面是代码信息

		// 获取一个 ServletContext 对象// 第一种方法是通过 this.ServletConfig 获取 ServletConfig 对象, // 然后再通过这个对象中的 getServletContext 获取到...ServletContext servletContext = this.getServletConfig().getServletContext();// 第二种方法是直接通过 this.getServletContext 直接获得(底层和上面的机制一样)ServletContext servletContext1 = this.getServletContext();

我们输出一下关于实现ServletContext接口的类的信息

在这里插入图片描述

其实查看相关源码就可以发现, 这个类其中存在的许多map的结构(好多保存的就是关于全局的映射信息)

ServletContext接口中的相关方法

我们这个章节只简单介绍其中的部分方法, 大多数方法我们下面的章节会介绍

获取应用域配置参数

以下的方法和ServletConfig中的功能是一样的, 我们不再多说

在这里插入图片描述

下面是我们的全局配置, 全局配置对所有的Servlet对象都可见

在这里插入图片描述

执行下面的代码逻辑, 获得web.xml中的关于全局配置的相关信息

 		response.setContentType("text/html");PrintWriter out = response.getWriter();// 获取全局配置的参数(和ServletConfig中的方法意义是一样的)ServletContext application = this.getServletContext();// 获得全局的配置集合名称(name)Enumeration<String> initParameterNames = application.getInitParameterNames();while (initParameterNames.hasMoreElements()) {// 获得nameString initParameterName = initParameterNames.nextElement();// 获得valueString initParameterValue = application.getInitParameter(initParameterName);out.print("<h1>" + initParameterName + " : " + initParameterValue + "</h1>");out.print("<br/>");}

在浏览器上获得信息如下

在这里插入图片描述

关于应用域参数的配置要求

  • 共享 : 最基本的要求, 只有需要共享的内容才建议放到应用域配置文件中
  • 小 & 少 : 只有数据量小的数据才建议放到应用域中配置, 因为应用域参数相当于一种缓存机制, 如果大量的内容都在应用域会增加系统对相关参数的处理负担
  • 不修改 & 很少修改: 因为是全局的变量配置, 就必然存在并发修改的线程安全问题, 所以我们存放在应用域的参数应该不修改或者很少修改以减少并发造成的线程安全问题

getContextPath获取项目路径

在这里插入图片描述

下面是项目配置的路径

在这里插入图片描述

我们使用getContextPath获取项目配置的路径
执行下面的逻辑

		response.setContentType("text/html");PrintWriter out = response.getWriter();// 在idea中, 我们的项目路径是自己配置在 Tomcat 服务器上面的, 所以我们要是想要获取真实的项目路径根目录// 可以通过 getContextPath 方法获得ServletContext application = this.getServletContext();String contextPath = application.getContextPath();out.print("<h1>" + contextPath + "</h1>");

输出结果

在这里插入图片描述

getRealPath获取真实路径

在这里插入图片描述

通过一个方法getRealPath可以查看文件的真实的路径(根节点是web目录)
我们在web目录下创建一个文件如下

在这里插入图片描述

我们执行下面的代码逻辑

		response.setContentType("text/html");PrintWriter out = response.getWriter();// 使用getRealPath获取文件的真实路径(以web文件为根路径)ServletContext application = this.getServletConfig().getServletContext();// 传递一个字符串, 获取这个字符串所对应的项目的真实的路径(以 / 开头代表 web 这个文件的根路径)String realPath = application.getRealPath("/path.html");out.println(realPath);

在浏览器中输出的内容如下

在这里插入图片描述

这个就是我们path.html文件在该计算机上真实存储的文件的路径


log系列方法添加相关日志

在这里插入图片描述

关于日志的存储位置

在先前的章节中, 我们介绍了在 Tomcat服务器的根节点 有一个logs 目录文件

在这里插入图片描述

这个是正常情况下,
我们不使用 idea 开发工具, 使用最原始的开发方式(之前有介绍), 创建的项目生成的日志就会存放到这个位置

但是使用 idea 创建项目的目录文件不在 Tomcat服务器 这些目录下, 实际上是通过某些方式对项目进行托管…(启动Tomcat的时候会有相关路径信息


启动Tomcat

观察日志信息如下, 我们发现这才是真实的日志等项目信息的托管路径

在这里插入图片描述

打开这个地址查看

在这里插入图片描述

观察日志信息分为三种

在这里插入图片描述

  • catalina日志: 在控制台上输出的日志信息(比如我们启动Tomcat 控制台上加载的相关配置信息
  • localhost日志: 通过ServletContext对象的log方法生成的日志信息
  • localhost_access_log: 浏览器访问服务器的相关日志信息

上面我们了解到, 只有localhost日志才是通过log方法 生成的日志, 所以我们执行下面的代码逻辑生成日志 简单测试一下

		// 测试使用 log 方法生成日志信息ServletContext application = this.getServletConfig().getServletContext();application.log("关于日志的测试信息");application.log("关于日志抛出异常的测试信息", new RuntimeException("抛出一个异常"));

在这里插入图片描述

可以查看在指定目录下已经生成了相关的日志信息…

而且, 我们刚才抛出一个异常, 但是Tomcat服务器并没有因为抛出异常而终止…

在这里插入图片描述


增删查应用域属性

在这里插入图片描述

在这里插入图片描述

执行下面的代码逻辑

		response.setContentType("text/html");PrintWriter out = response.getWriter();// 增删改 相关的应用域属性ServletContext application = this.getServletConfig().getServletContext();// 1. 增加应用域属性application.setAttribute("test_name", "huahua");application.setAttribute("test_age", 18);// 2. 获取应用域属性(两种方法)out.print(application.getAttribute("test_name") + " = " +application.getAttribute("test_age"));out.print("<br/>");Enumeration<String> attributeNames = application.getAttributeNames();while (attributeNames.hasMoreElements()) {String attributeName = attributeNames.nextElement();out.print(attributeName + " = " + application.getAttribute(attributeName));out.print("<br/>");}// 3. 删除应用域属性application.removeAttribute("test_name");// 4. 简单测试一下还有没有 test_name 属性Object name = application.getAttribute("test_name");out.print("test_name = " + name);

即可分析出应用域的成分都是什么, 如果在该webapp 的其他类中访问 应用域参数 也会访问成功, 因为应用域的作用范围是全局的…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/25108.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言(15)-------------->一维数组

这篇文章介绍的是数组的定义、创建、初始化、使用&#xff0c;在数组中输入内容并输出数组中的内容&#xff0c;并探讨了数组在内存中的存储。里面有些内容建议大家参考下面的一些文章&#xff0c;有助于加深大家对于C语言的理解&#xff1a; C语言&#xff08;2&#xff09;-…

AI学习第六天-python的基础使用-趣味图形

在 Python 编程学习过程中&#xff0c;turtle库是一个非常有趣且实用的工具&#xff0c;它可以帮助我们轻松绘制各种图形。结合for循环、random模块以及自定义方法等知识点&#xff0c;能够创作出丰富多彩的图案。下面就来分享一下相关的学习笔记。 一、基础知识点回顾 &…

线程安全问题

线程安全问题是指在多线程环境下&#xff0c;当多个线程同时访问共享资源时&#xff0c;可能出现的错误或不可预测的行为。以下是对其的理解&#xff1a; 1. 根本原因 线程安全问题的根本原因是多个线程对共享资源的并发访问。如果多个线程对共享资源进行读写操作&#xff0c…

ubuntu终端指令集 shell编程基础(一)

磁盘指令 连接与查看&#xff1a;磁盘与 Ubuntu 有两种连接方式&#xff1b;使用ls /dev/sd*查看是否连接成功&#xff0c;通过df系列指令查看磁盘使用信息。若 U 盘已挂载&#xff0c;相关操作可能失败&#xff0c;需用umount取消挂载。磁盘操作&#xff1a;使用sudo fdisk 磁…

第十四届蓝桥杯Scratch11月stema选拔赛真题——小猫照镜子

编程实现&#xff1a; 小猫照镜子。(背景非源素材) 具体要求&#xff1a; 1). 运行程序&#xff0c;角色、背景如图所示&#xff1b; 完整题目可点击下方链接查看&#xff0c;支持在线编程~ 小猫照镜子_scratch_少儿编程题库学习中心-嗨信奥https://www.hixinao.com/tiku/s…

Sublime Text4安装、汉化

-------------2025-02-22可用---------------------- 官方网址下载&#xff1a;https://www.sublimetext.com 打开https://hexed.it 点击打开文件找到软件安装目录下的 ctrlf 查找 8079 0500 0f94 c2右边启用替换替换为:c641 0501 b200 90点击替换按钮 替换完成后 另存为本地…

C++20的指定初始化器(Designated Initializers)

文章目录 指定初始化器的使用条件语法嵌套结构体的初始化数组的指定初始化注意事项优势 C20引入了**指定初始化器&#xff08;Designated Initializers&#xff09;**这一特性&#xff0c;允许在初始化结构体、联合体或类的对象时&#xff0c;明确指定成员变量的初始化值&#…

Redis安装及其AnotherRedisDesktopManagera安装使用

一、Redis安装 1. 下载Redis安装包 通过网盘分享的文件&#xff1a;Redis 链接: https://pan.baidu.com/s/1elAT8mk3EIoYQQ3WoVVoNg?pwd7yrz 提取码: 7yrz 2. 解压Redis安装包 下载完成后&#xff0c;将Redis安装包解压到一个指定的目录&#xff0c;例如&#xff1a;C:\Re…

51c嵌入式~电路~合集13

我自己的原文哦~ https://blog.51cto.com/whaosoft/12317946 一、造成PCB焊接缺陷的原因 电路板孔可焊性不好&#xff0c;将会产生虚焊缺陷&#xff0c;影响电路中元件的参数&#xff0c;导致多层板元器件和内层线导通不稳定&#xff0c;引起整个电路功能失效。 所谓可焊性…

Lindorm作为AI搜索基础设施,助力Kimi智能助手升级搜索体验

Kimi智能助手开启“长文本”时代&#xff0c;K系列强化学习模型持续进化中 2023年10月&#xff0c;月之暗面&#xff08;Moonshot AI&#xff09;旗下的Kimi智能助手&#xff0c;带着支持输入20万汉字的能力正式发布&#xff0c;提升了全球市场上产品化大模型服务支持的上下文输…

图数据库 | 24、如何进行正确性验证?

图数据库计算和查询结果的正确性&#xff0c;这个重要性当然是不言而喻的&#xff01; 老夫之前也写文章讲过&#xff0c;今天再手书一篇&#xff0c;旨在向大家系统地介绍一下图数据库查询与计算到底如何进行正确性验证&#xff01;&#xff01;&#xff01; 图数据库中的操…

【二分查找 图论】P8794 [蓝桥杯 2022 国 A] 环境治理|普及

本文涉及的基础知识点 本博文代码打包下载 C二分查找 C图论 [蓝桥杯 2022 国 A] 环境治理 题目描述 LQ 国拥有 n n n 个城市&#xff0c;从 0 0 0 到 n − 1 n - 1 n−1 编号&#xff0c;这 n n n 个城市两两之间都有且仅有一条双向道路连接&#xff0c;这意味着任意两…

vue写一个登录页面

目录 一、安装ui库二、路由跳转三、页面 一、安装ui库 element plus库 Element Plus 是 Element UI 的升级版本&#xff0c;专为 Vue 3.x 设计。它继承了 Element UI 的优秀特性&#xff0c;同时针对 Vue 3 的新特性&#xff08;如 Composition API、Teleport 等&#xff09;进…

和鲸科技携手四川气象,以 AI 的力量赋能四川气象一体化平台建设

气象领域与农业、能源、交通、环境科学等国计民生关键领域紧密相连&#xff0c;发挥着不可替代的重要作用。人工智能技术的迅猛发展&#xff0c;为气象领域突破困境带来了新的契机。AI 技术能够深度挖掘气象大数据中蕴含的复杂信息&#xff0c;助力人类更精准地把握自然规律&am…

Ubuntu下QT安装和调试的常见问题(一)__could_not_dertermine_which_make

前言 Ubuntu下QT的安装会有一些奇怪的问题出现&#xff0c;并没有像Windows下Visual Studio的安装那么直接就可以使用那么方便&#xff0c;本文就“make”挂接的问题&#xff0c;给出一些小的感受。 1、问题的提出 很多问题的解答&#xff0c;AI无论是上文心一言&#xff0c;还…

C# httpclient 和 Flurl.Http 的测试

关于C#调用接口或Post,Flurl封装了httpclient, CSDN有哥们提供了一个公网的测试网站&#xff0c;可以测试Post调用&#xff0c;我写了2个函数&#xff0c;测试httpclient和Flurl使用Post: async 和 await 是成对使用的&#xff0c;为了接受web异步返回的数据&#xff0c;winfor…

多通道数据采集和信号生成的模块化仪器如何重构飞机电子可靠性测试体系?

飞机的核心电子系统包括发电与配电系统&#xff0c;飞机内部所有设备和系统之间的内部数据通信系统&#xff0c;以及用于外部通信的射频设备。其他所有航空电子元件都依赖这些关键总线进行电力传输或数据通信。在本文中&#xff0c;我们将了解模块化仪器&#xff08;无论是PCIe…

Ollama部署本地大模型DeepSeek-R1-Distill-Llama-70B

文章目录 一、下模二、转模1. 下载转换工具2. 安装环境依赖3. llama.cpp1. 转换脚本依赖2. llama.cpp安装依赖包3. llama.cpp编译安装4. 格式转换 三、Ollama部署1. 安装启动Ollama2. 添加模型3. 测试运行 一、下模 #模型下载 from modelscope import snapshot_download model…

domain 网络安全 网络安全域

&#x1f345; 点击文末小卡片 &#xff0c;免费获取网络安全全套资料&#xff0c;资料在手&#xff0c;涨薪更快 文章目录 1、域的概述 1.1、工作组与域1.2、域的特点1.3、域的组成1.4、域的部署概述1.5、活动目录1.6、组策略GPO 2、域的部署实验 2.1、建立局域网&#xf…

VSCode轻松调试运行.Net 8.0 Web API项目

1.背景 我一直都是用VS来开发.NetCore项目的&#xff0c;用的比较顺手&#xff0c;也习惯了。看其他技术文章有介绍VS Code更轻量&#xff0c;更方便。所以我专门花时间来使用VS Code&#xff0c;看看它是如何调试代码、如何运行.Net 8.0 WebAPI项目。这篇文章是一个记录的过程…