JavaWeb ServletContext 对象 应用

news2025/1/21 18:49:33

ServletContext:

ServletContextJava EE Servlet 定义的一个让 Web 应用中的 Servlet 能够和服务器交流的一个接口,每个应用都有自己的 ServletContext,除了分布式应用中的每个服务器实例的 ServletContext 是独立的,不能用来共享数据外 Servlet 通过 ServletConfig 来获取 ServletContext,从而能够使用服务器提供的各种资源和信息;


ServletContext对象:

每个Web应用在服务器上运行时,服务器都会为该应用创建一个唯一的ServletContext对象实例。这个对象为整个 Web 应用程序提供了一个全局的共享空间,使得不同的 Servlet 之间可以共享信息和资源。

ServletContext对象作用:

1:域对象ServletContext 作为域对象,它提供了一个命名空间,在这个命名空间中,可以存储属性(键值对),这些属性在整个 Web 应用程序中都是可见的。

域对象存储数据

// 获取 ServletContext
ServletContext context = getServletContext();

// 设置一个属性
context.setAttribute("name", "admin");

// 响应客户端
resp.getWriter().write("用户名数据 存储 ServletContext中");

获取域对象数据

// 获取 ServletContext
ServletContext context = getServletContext();

// 获取之前设置的属性
String Data = (String) context.getAttribute("name");
// 响应客户端
if (Data != null) {
    resp.getWriter().write("获取Data数据成功 " + Data);
} else {
    resp.getWriter().write("获取Data数据失败");
}

2:读取配置参数

1:在 web.xml 通过配置 Servlet 初始化参数  这里配置的是 数据库连接字符串、第三方服务的 API 密钥

  <servlet>
<!--    注册Sevelet-->
    <servlet-name>MyServlet</servlet-name>
    <servlet-class>com.exam.project.MySevelet</servlet-class>
    <!-- 初始化参数 -->
    <init-param>
      <param-name>databaseUrl</param-name>
      <param-value>jdbc:mysql://localhost:3306/myapp</param-value>
    </init-param>
    <init-param>
      <param-name>apiKey</param-name>
      <param-value>1234567890abc</param-value>
    </init-param>
  </servlet>
 

在Sevelet中设置并读取配置参数: 

public class MySevelet extends HttpServlet {
//        设置数据初始化参数
        private String databaseUrl;
        private String apiKey;
        // 从 ServletContext 中读取初始化参数
        @Override
        public void init() throws ServletException {
            super.init();
            this.databaseUrl = getServletContext().getInitParameter("databaseUrl");
            this.apiKey = getServletContext().getInitParameter("apiKey");
        }

        protected void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            // 使用初始化参数
            response.getWriter().write("Database URL: " + databaseUrl + "\n");
            response.getWriter().write("API Key: " + apiKey);
        }

在 Servlet 的 init 方法中,使用 getInitParameter 方法来读取这些初始化参数。

当 MyServletdoGet 方法被调用时,使用 response.getWriter().write  向客户端发送这两个参数的值。 

3:搜索工程目录下面的资源文件

从 Web 应用程序的类路径中读取  applicationContext.xml 的配置文件 对应自己的文件目录 可以通过// 使用 getResourceAsStream 获取资源的 文件的路径

ServletContext context = getServletContext();
// 获取资源的路径 对应自己的文件目录 
String path = "src/main/webapp/WEB-INF/applicationContext.xml";

// 使用 getResourceAsStream 获取资源的 InputStream
InputStream inputStream = context.getResourceAsStream(path);

if (inputStream != null) {
    try (BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) {
        // 直接读取整个文件内容
        StringBuilder content = new StringBuilder();
        String line;
        // 逐行读取文件内容
        while ((line = reader.readLine()) != null) {
            content.append(line).append(System.lineSeparator());
        }
        // 发送响应
        resp.setContentType("text/plain");
        resp.setCharacterEncoding("UTF-8");
        resp.getWriter().write(String.valueOf(content));
    }
}else{
          System.out.println("获取失败");
    }
}


 

4:获取当前工程名字: 通过调用 getServletContext() 获取 ServletContext 实例,然后调用 getServletContextName() 方法来获取应用程序名称。

    ServletContext context = getServletContext();

        // 获取当前 Web 应用程序的名称
        String appName = context.getServletContextName();
        // 发送响应
        resp.setContentType("text/plain");
        resp.setCharacterEncoding("UTF-8");
        resp.getWriter().write("获取当前工程的名称 " + appName);
    }
}

 月缺不改光,剑折不改刚。月缺魄易满,剑折铸复良。

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

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

相关文章

vue3组件通信与props

title: vue3组件通信与props date: 2024/5/31 下午9:00:57 updated: 2024/5/31 下午9:00:57 categories: 前端开发 tags: Vue3组件Props详解生命周期数据通信模板语法Composition API单向数据流 Vue 3 组件基础 在 Vue 3 中&#xff0c;组件是构建用户界面的基本单位&#…

最佳 Mac 数据恢复:恢复 Mac 上已删除的文件

尝试过许多 Mac 数据恢复工具&#xff0c;但发现没有一款能达到宣传的效果&#xff1f;我们重点介绍最好的 Mac 数据恢复软件 没有 Mac 用户愿意担心数据丢失&#xff0c;但您永远不知道什么时候会发生这种情况。无论是意外删除 Mac 上的重要文件、不小心弄湿了 Mac、感染病毒…

模型 STORY评估框架

说明&#xff1a;系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。故事五要素&#xff1a;结构、时间、观点、现实、收益 。 1 STORY评估框架的应用 1.1 STORY模型展示其个性化在线学习解决方案的优势 一家在线教育平台想要通过一个故事来展示其个性…

【高校科研前沿】南大王栋、吴吉春教授团队在深度学习助力水库生态调度和优化管理方面取得新进展,成果以博士生邱如健为一作发表于水环境领域国际权威期刊

1.文章简介 论文名称&#xff1a;Integration of deep learning and improved multi-objective algorithm to optimize reservoir operation for balancing human and downstream ecological needs 第一作者及单位&#xff1a;邱如健&#xff08;博士生 南京大学&#xff09;…

在Android Studio中使用谷歌Gemini代码助手

今天在做android开发的时候&#xff0c;一个项目使用到了gradle8.0&#xff0c;但是我的Android Studuio根本不支持&#xff0c;无可奈何只能从小蜜蜂版本升级了水母 | 2023.3.1版本&#xff0c;但突然发现AS已经集成了Gemini助手。 首先我们需要下载这个版本的&#xff1a; h…

【Unity脚本】使用脚本操作游戏对象的组件

【知识链】Unity -> Unity脚本 -> 游戏对象 -> 组件 【知识链】Unity -> Unity界面 -> Inspector【摘要】本文介绍如何使用脚本添加、删除组件&#xff0c;以及如何访问组件 文章目录 引言第一章 游戏对象与组件1.1什么是组件&#xff1f;1.2 场景、游戏对象与组…

分形之科赫雪花

前言 分形是一种具有自相似性的几何图形或数学对象。它的特点是无论在任何放大或缩小的尺度下,都能够看到与整体相似的图形。分形的形状可以非常复杂,常常具有分支、重复的图案,以及细节层次丰富的结构。 分形在自然界中广泛存在,如云朵、树枝、山脉、海岸线等,它们都展…

jpom ruoyi 发布后端

添加ssh 添加标签 添加仓库 添加构建 构建 命令 APP_NAMEenterprise IMAGE_NAMEenterprise:latest APP_PORT8080 RUN_ENVjenkins cd ruoyi-admin docker stop $APP_NAME || true docker rm $APP_NAME || true docker rmi $IMAGE_NAME || true docker build -f Dockerfil…

【Linux基础】Linux了解、安装centos虚拟机

【Linux基础】Linux了解、安装centos虚拟机 文章目录 【Linux基础】Linux了解、安装centos虚拟机1、什么是Linux2、Linux安装2.1、使用VMware安装Linux centos72.2、启动虚拟机安装 1、什么是Linux Linux是一套免费使用和自由传播的操作系统。说到操作系统&#xff0c;大家比较…

Spring boot 集成thymeleaf

Spring boot 集成thymeleaf 背景 自己通过Spring boot集成通义千问实现了一个智能问答系统。Spring boot集成通义千问已经完成&#xff0c;现在需要做一个简单的页面展示&#xff0c;作为一个八年没有摸过前端的后端开发人员&#xff0c;不得不又拿起了html和thymeleaf。 Sp…

指纹浏览器大全

具体请前往&#xff1a;国内外指纹浏览器大全

博士毕业论文/CTEX/LATEX

LATEX环境安装 CTEX 安装 &#xff08;垃圾&#xff0c;不要装&#xff09; 运行 clean.batcomp.bat 缺少字体 Couldn’t find Adobe Heiti S.cfg’ miktex-maketfm: No creation rule for font “Adobe Heiti Std”.解决方法&#xff1a;其实就是下载这四个字体之后&…

Linuxftp服务002本地登入

本期主要讲述的是ftp服务中的本地用户登入。 操作系统 CentOS Stream 9 操作步骤 首先我们先建立一个ftp组的用户&#xff0c;并设置密码。 [rootlocalhost ~]# useradd -g ftp wq [rootlocalhost ~]# echo 1 |passwd --stdin wq 更改用户 wq 的密码 。 passwd&#xff1a…

DataCube 漏洞小结

在这里分享一下通过拖取 DataCube 代码审计后发现的一些漏洞&#xff0c;包括前台的文件上传&#xff0c;信息泄露出账号密码&#xff0c;后台的文件上传。当然还有部分 SQL 注入漏洞&#xff0c;因为 DataCube 采用的是 SQLite 的数据库&#xff0c;所以SQL 注入相对来说显得就…

Qt 窗口

在Qt Creator 中创建项目的时候&#xff0c;我们能够选择创建QMainWindow 还是 QWidget 两种窗口。 二者有什么区别呢&#xff1f;其中 QMainWindow 是一种主窗口&#xff0c;包含菜单栏&#xff0c;工具栏&#xff0c;状态栏&#xff0c;中心窗口和浮动窗口等多个窗口组合&…

木叶飞舞之【机器人ROS2】篇章_第三节、给turtlebot3安装realsense深度相机

我们做视觉slam时会用到深度相机&#xff0c;但是gazebo的turtlebot3中只有rgb相机&#xff0c;没有深度&#xff0c;因此本节会修改代码&#xff0c;来给我们的小乌龟增加一个rgbd相机。 效果展示 发布topic如下图 图片大小都是640*480 1. 修改model.sdf文件 1.1 路径位置…

Java后端模拟面试 题集⑤

1.先作个自我介绍吧 面试官您好&#xff0c;我叫张睿超&#xff0c;来自湖南长沙&#xff0c;大学毕业于湖南农业大学&#xff0c;是一名智能科学与技术专业的统招一本本科生。今天主要过来面试贵公司的Java后端开发工程师岗位。 大学里面主修的课程是Java、Python、数字图像…

前端Vue小兔鲜儿电商项目实战Day03

一、Home - 整体结构搭建和分类实现 1. 页面结构 ①按照结构新增5个组件&#xff0c;准备最简单的模板&#xff0c;分别在Home模块的入口组件中引入 src/views/Home/components/ HomeCategory.vue HomeBanner.vue HomeNew.vue HomeHot.vue HomeProduct.vue <script …

你认识nginx吗,nginx是做什么的,nginx可以做什么 --1)nginx介绍

一.Nginx 介绍 Nginx&#xff08;发音同engine x&#xff09;是一个异步框架的 Web 服务器&#xff0c;也可以用作反向代理&#xff0c;负载平衡器 和 HTTP 缓存。该软件由 Igor Sysoev 创建&#xff0c;并于2004年首次公开发布。同名公司成立于2011年&#xff0c;以提供支持。…

CraftCMS ConditionsController.php 代码执行漏洞(CVE-2023-41892)

0x01 产品简介 Craft CMS是一个开源的内容管理系统,它专注于用户友好的内容创建过程,逻辑清晰明了,是一个高度自由,高度自定义设计的平台吗,可以用来创建个人或企业网站也可以搭建企业级电子商务系统。 0x02 漏洞概述 Craft CMS在4.4.15版本之前存在远程代码执行漏洞,…