JavaWeb-ServletContext应用域接口

news2025/2/28 8:51:46

文章目录

  • 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()) {
            // 获得name
            String initParameterName = initParameterNames.nextElement();
            // 获得value
            String 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.coloradmin.cn/o/2307303.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SQL命令详解之操作数据表

​​​​​ 操作数据表 操作数据表是数据库管理系统中用于存储、管理和操作数据的核心结构。数据表通常由行和列组成&#xff0c;每一列代表一种数据类型&#xff08;例如&#xff0c;整数、字符、日期等&#xff09;&#xff0c;而每一行代表一条记录&#xff08;即数据项&a…

Javaweb后端数据库多表关系一对多,外键,一对一

多表关系 一对多 多的表里&#xff0c;要有一表里的主键 外键 多的表上&#xff0c;添加外键 一对一 多对多 案例

【洛谷贪心算法题】P2240部分背包问题

【解题思路】 贪心策略选择 对于部分背包问题&#xff0c;关键在于如何选择物品放入背包以达到最大价值。由于物品可以分割&#xff0c;遍历排序后的物品数组&#xff0c;根据物品重量和背包剩余容量的关系&#xff0c;决定是将整个物品放入背包还是分割物品放入背包&#xff…

SpringBoot 2 后端通用开发模板搭建(异常处理,请求响应)

目录 一、环境准备 二、新建项目 三、整合依赖 1、MyBatis Plus 数据库操作 2、Hutool 工具库 3、Knife4j 接口文档 4、其他依赖 四、通用基础代码 1、自定义异常 2、响应包装类 3、全局异常处理器 4、请求包装类 5、全局跨域配置 补充&#xff1a;设置新建类/接…

DeepSeek本地部署与Dify结合创建私有知识库指南

python调用本地deepseek+Dify的API使用--测试WX自动发送信息-CSDN博客 DeepSeek,一家在人工智能领域具有显著技术实力的公司,凭借其千亿参数规模的AI大模型,以及仅需0.5元人民币即可进行百万tokens的API调用成本,已经取得了令人瞩目的成就。不仅如此,DeepSeek的模…

Nginx 报错:413 Request Entity Too Large

做web开发时&#xff0c;对于上传附件的功能&#xff0c;如果nginx没有调整配置&#xff0c;上传大一点的文件就会发生下面这种错误&#xff1a; 要解决上面的问题&#xff0c;只需要调整Nginx配置文件中的 client_max_body_size 参数即可&#xff0c;这个配置参数一般在http配…

Arduino项目实战:使用MQ-2气体传感器与OLED屏幕监测环境气体

概述 在这个项目中,MQ-2气体传感器是一个多功能的气体检测设备,能够感知多种常见气体,如甲烷、丁烷、丙烷、酒精和烟雾等。你可以把它想象成一个超级灵敏的“嗅觉”,能够帮助你实时检测环境中的各种有害气体。与Arduino板连接后,MQ-2传感器把捕捉到的气体浓度数据传送给A…

C#实现本地Deepseek模型及其他模型的对话

前言 1、C#实现本地AI聊天功能 WPFOllamaSharpe实现本地聊天功能,可以选择使用Deepseek 及其他模型。 2、此程序默认你已经安装好了Ollama。 在运行前需要线安装好Ollama,如何安装请自行搜索 Ollama下载地址&#xff1a; https://ollama.org.cn Ollama模型下载地址&#xf…

【ESP32S3接入讯飞在线语音识别】

视频地址: 【ESP32S3接入讯飞在线语音识别】 1. 前言 使用Seeed XIAO ESP32S3 Sense开发板接入讯飞实现在线语音识别。自带麦克风模块用做语音输入,通过串口发送字符“1”来控制数据的采集和上传。 语音识别对比 平台api教程评分百度

【问题记录】Go项目Docker中的consul访问主机8080端口被拒绝

【问题记录】Go项目Docker中的consul访问主机8080端口被拒绝 问题展示解决办法 问题展示 在使用docker中的consul服务的时候&#xff0c;通过命令行注册相应的服务&#xff08;比如cloudwego项目的demo_proto以及user服务&#xff09;失败。 解决办法 经过分析&#xff0c;是…

DeepSeek实现FunctionCalling调用API查询天气

什么是FunctionCalling Function Calling&#xff08;函数调用&#xff09;是大型语言模型&#xff08;如 OpenAI 的 GPT 系列&#xff09;提供的一种能力&#xff0c;允许模型在生成文本的过程中调用外部函数或工具&#xff0c;以完成更复杂的任务。通过 Function Calling&am…

windows设置暂停更新时长

windows设置暂停更新时长 win11与win10修改注册表操作一致 &#xff0c;系统界面不同 1.打开注册表 2.在以下路径 \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings 右键新建 DWORD 32位值&#xff0c;名称为FlightSettingsMaxPauseDays 根据需求填写数…

【Kimi】自动生成PPT-并支持下载和在线编辑--全部免费

【Kimi】免费生成PPT并免费下载 用了好几个大模型&#xff0c;有些能生成PPT内容&#xff1b; 有些能生成PPT&#xff0c;但下载需要付费&#xff1b; 目前只有Kimi生成的PPT&#xff0c;能选择模板、能在线编辑、能下载&#xff0c;关键全部免费&#xff01; 一、用kimi生成PP…

一款在手机上制作电子表格

今天给大家分享一款在手机上制作电子表格的&#xff0c;免费好用的Exce1表格软件&#xff0c;让工作变得更加简单。 1 软件介绍 Exce1是一款手机制作表格的办公软件&#xff0c;您可以使用手机exce1在线制作表格、工资表、编辑xlsx和xls表格文件等&#xff0c;还可以学习使用…

【实战 ES】实战 Elasticsearch:快速上手与深度实践-1.3.1单节点安装(Docker与手动部署)

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 10分钟快速部署Elasticsearch单节点环境1. 系统环境要求1.1 硬件配置推荐1.2 软件依赖 2. Docker部署方案2.1 部署流程2.2 参数说明2.3 性能优化建议 3. 手动部署方案3.1 安…

【Mac电脑本地部署Deepseek-r1:详细教程与Openwebui配置指南】

文章目录 前言电脑配置&#xff1a;安装的Deepseek版本&#xff1a;使用的UI框架&#xff1a;体验效果展示&#xff1a;本地部署体验总结 部署过程Ollama部署拉取模型运行模型Openwebui部署运行Ollama服务在Openwebui中配置ollama的服务 后话 前言 deepseek最近火的一塌糊涂&a…

网络安全学习中,web渗透的测试流程是怎样的?

渗透测试是什么&#xff1f;网络安全学习中&#xff0c;web渗透的测试流程是怎样的&#xff1f; 渗透测试就是利用我们所掌握的渗透知识&#xff0c;对网站进行一步一步的渗透&#xff0c;发现其中存在的漏洞和隐藏的风险&#xff0c;然后撰写一篇测试报告&#xff0c;提供给我…

将VsCode变得顺手好用(1

目录 设置中文 配置调试功能 提效和增强相关插件 主题和图标相关插件 创建js文件 设置中文 打开【拓展】 输入【Chinese】 下载完成后重启Vs即可变为中文 配置调试功能 在随便一个位置新建一个文件夹&#xff0c;用于放置调试文件以及你未来写的代码&#xff0c;随便命名但…

第6_7章_管理权限评估和测试策略

管理权限 权限将受保护的对象与必须评估以决定是否应授予访问权限的策略相关联。 在创建要保护的资源以及要用于保护这些资源的策略后&#xff0c; 您可以开始管理权限。要管理权限&#xff0c;请在编辑资源服务器时单击 Permissions 选项卡。 可以创建权限来保护两种主要类…

2025年网校系统源码开发趋势:技术革新的教育培训APP搭建实战

2025年&#xff0c;随着AI、大数据、云计算等技术的深度融合&#xff0c;网校教育系统的源码开发也迎来了新的发展趋势。本文将深入探讨这些趋势&#xff0c;并结合教育培训APP的开发实战&#xff0c;展示如何应对未来的技术挑战。 一、2025年网校教育系统源码的技术趋势 AI驱…