JavaWeb ServletContext 对象 应用

server/2024/10/15 20:20:47/

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 中读取初始化参数@Overridepublic 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.ppmy.cn/server/46042.html

相关文章

STMF1学习笔记(八)—DMA方式多通道采集

1、初始化 2、DMA设置 3、业务代码—DMA方式 一、 在 main 函数前面添加变量。其中 ADC_Value 作为转换数据缓存数组&#xff0c;ad1,ad2 存 储 PA0( 转换通道 0),PA1( 转换通道 1) 的电压值。 /* USER CODE BEGIN PV */ /* Private variables */ uint32_t ADC_Value[…

代码随想录训练营Day54:Leetcode392、115

Leetcode392&#xff1a; 问题描述&#xff1a; 给定字符串 s 和 t &#xff0c;判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些&#xff08;也可以不删除&#xff09;字符而不改变剩余字符相对位置形成的新字符串。&#xff08;例如&#xff0c;"…

辅助科技照亮道路,携手共促盲文书写技能新飞跃

在这个科技日新月异的时代&#xff0c;创新的力量正以前所未有的方式融入我们的日常生活&#xff0c;特别是对于视觉障碍群体而言&#xff0c;技术的每一次进步都是通往更加独立生活的桥梁。今天&#xff0c;让我们聚焦于一款名为“蝙蝠避障”的辅助软件&#xff0c;它不仅为盲…

一些常见的 Conda 命令

Conda 是一个用于包管理和环境管理的开源软件包&#xff0c;特别是用于Python环境。以下是一些常见的 Conda 命令&#xff1a; 创建环境&#xff1a; conda create --name myenv # 创建一个名为 myenv 的新环境 conda create --name myenv python3.8 # 创建一个指定 Python 版本…

射频功率限幅器简略

在功率输入保护方面&#xff0c;限幅器是最好用的器件之一&#xff0c;可以保护后级电路不受超限功率的损害&#xff0c;限幅器其实像TVS功能一样&#xff0c;让超过阈值的功率释放到接地上&#xff0c;来达到限制幅度的目的&#xff0c;目前限幅器的限幅幅度大多都大于15dBm,很…

软件测试 - 第四章课后作业

软件测试 - 第四章课后作业 一单选题&#xff08;共6题&#xff0c;33分&#xff09; (单选题)下列选项中&#xff0c;不属于HTTP请求组成部分的是( )。 A. 请求行 B. 请求体 C. 状态行 D. 请求头 正确答案: C:状态行;(单选题)下列关于HTTP响应说法错误的是( )。 A. 当服务器…

VB.net进行CAD二次开发(三)

参考文献1中CAD .net开发系列1-7&#xff0c;非常地好&#xff0c;需要逐一测试和运行 上面的catch块只显示一个错误信息。实际的清理工作是在finally块中进行的。这样做的理由是如果在事务处理被提交&#xff08;Commit()&#xff09;之前&#xff0c;Dispose()被调用的话&am…

任务悬赏系统:遵守规则,轻松赚取佣金

前言 在数字化时代&#xff0c;任务悬赏系统作为一种新兴的平台&#xff0c;正逐渐融入我们的日常生活。这类系统不仅为用户提供了自我展示和技能变现的舞台&#xff0c;更成为了一种轻松赚取佣金的途径。 一、任务悬赏系统是什么&#xff1f; 简单来说&#xff0c;任务悬赏系…