web server apache tomcat11-08-JNDI Resources

前言

整理这个官方翻译的系列,原因是网上大部分的 tomcat 版本比较旧,此版本为 v11 最新的版本。

开源项目

从零手写实现 tomcat minicat 别称【嗅虎】心有猛虎,轻嗅蔷薇。

系列文章

web server apache tomcat11-01-官方文档入门介绍

web server apache tomcat11-02-setup 启动

web server apache tomcat11-03-deploy 如何部署

web server apache tomcat11-04-manager 如何管理?

web server apache tomcat11-06-Host Manager App -- Text Interface

web server apache tomcat11-07-Realm Configuration

web server apache tomcat11-08-JNDI Resources

web server apache tomcat11-09-JNDI Datasource

web server apache tomcat11-10-Class Loader

...

介绍

Tomcat为每个在其下运行的Web应用程序提供了一个JNDI InitialContext实现实例,以与Jakarta EE应用程序服务器提供的实例兼容。Jakarta EE标准在/WEB-INF/web.xml文件中提供了一组标准元素,用于引用/定义资源。

有关JNDI的编程API和Jakarta EE服务器支持的功能的更多信息,请参见以下规范,Tomcat模拟了它提供的服务:

  • Java命名和目录接口(从JDK 1.4开始包含)

  • Jakarta EE平台规范(特别是,请参见命名章节) web.xml配置 以下元素可用于Web应用程序部署描述符(/WEB-INF/web.xml)中,以定义资源:

  • <env-entry> - 环境条目,一个单值参数,可用于配置应用程序的操作方式。

  • <resource-ref> - 资源引用,通常是指用于资源的对象工厂,例如JDBC DataSource、Jakarta Mail Session或配置到Tomcat中的自定义对象工厂。

  • <resource-env-ref> - 资源环境引用,Servlet 2.4中新增的一种资源引用变体,用于简化对不需要身份验证信息的资源的配置。 只要Tomcat能够识别一个适当的资源工厂来创建资源,并且不需要进一步的配置信息,Tomcat就会使用/WEB-INF/web.xml中的信息来创建资源。

Tomcat提供了一些针对JNDI资源的特定于Tomcat的选项,这些选项无法在web.xml中指定。这些选项包括closeMethod,它可以在Web应用程序停止时更快地清理JNDI资源,以及singleton,它控制是否为每个JNDI查找创建资源的新实例。要使用这些配置选项,资源必须在Web应用程序的<Context>元素或$CATALINA_BASE/conf/server.xml中的<GlobalNamingResources>元素中指定。

context.xml配置 如果Tomcat无法识别适当的资源工厂和/或需要额外的配置信息,则必须在Tomcat能够创建资源之前指定额外的Tomcat特定配置。Tomcat特定的资源配置输入在<Context>元素中,该元素可以在$CATALINA_BASE/conf/server.xml或最好是每个Web应用程序的上下文XML文件(META-INF/context.xml)中指定。

使用以下元素在<Context>元素中执行Tomcat特定的资源配置:

  • <Environment> - 配置标量环境条目的名称和值,这些环境条目将通过JNDI InitialContext公开给Web应用程序(相当于在Web应用程序部署描述符中包含<env-entry>元素)。
  • <Resource> - 配置资源的名称和数据类型,该资源可供应用程序使用(相当于在Web应用程序部署描述符中包含<resource-ref>元素)。
  • <ResourceLink> - 向全局JNDI上下文中定义的资源添加链接。使用资源链接使Web应用程序可以访问在<Server>元素的<GlobalNamingResources>子元素中定义的资源。
  • <Transaction> - 添加用于实例化可在java:comp/UserTransaction处可用的UserTransaction对象实例的资源工厂。 可以将任意数量的这些元素嵌套在一个<Context>元素内,并且只与该特定Web应用程序相关联。

如果在<Context>元素中定义了资源,那么不需要在/WEB-INF/web.xml中定义该资源。但是,建议在/WEB-INF/web.xml中保留条目,以记录Web应用程序的资源需求。

如果对于在Web应用程序部署描述符(/WEB-INF/web.xml)中包含的<env-entry>元素和在Web应用程序的<Context>元素的一部分中的<Environment>元素都定义了相同的资源名称,则仅当相应的<Environment>元素允许时(通过将override属性设置为“true”),部署描述符中的值将优先。

全局配置 Tomcat维护服务器的全局资源的单独命名空间。这些在$CATALINA_BASE/conf/server.xml<GlobalNamingResources>元素中配置。您可以通过使用<ResourceLink>将这些资源暴露给Web应用程序,以将其包含在每个Web应用程序的上下文中。

如果使用<ResourceLink>定义了资源,那么不需要在/WEB-INF/web.xml中定义该资源。但是,建议在/WEB-INF/web.xml中保留条目,以记录Web应用程序的资源需求。

使用资源 在Web应用程序最初部署时,InitialContext被配置,并且被提供给Web应用程序组件(用于只读访问)。所有配置的条目和资源都放置在JNDI命名空间的java:comp/env部分中,因此对于资源的典型访问 - 在本例中是对JDBC DataSource的访问 - 看起来像这样:

// 获取我们的环境命名上下文
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");// 查找我们的数据源
DataSource ds = (DataSource)envCtx.lookup("jdbc/EmployeeDB");// 从池中分配并使用连接
Connection conn = ds.getConnection();
... 使用此连接访问数据库 ...
conn.close();

Tomcat标准资源工厂 Tomcat包含一系列标准资源工厂,可以为您的Web应用程序提供服务,并通过 元素提供配置灵活性,而无需修改Web应用程序或部署描述符。以下各小节详细介绍了标准资源工厂的配置和用法。

有关如何创建、安装、配置和使用自定义资源工厂类的信息,请参阅添加自定义资源工厂。

注意 - 在标准资源工厂中,只有“JDBC数据源”和“用户事务”工厂被要求在其他平台上可用,并且只有在平台实现了Jakarta EE规范时才需要。所有其他标准资源工厂以及您自己编写的自定义资源工厂都特定于Tomcat,并且不能假定它们在其他容器上可用。

通用JavaBean资源 0. 介绍 此资源工厂可用于创建符合标准JavaBeans命名约定的任何Java类的对象(即具有零参数构造函数,并且具有符合setFoo()命名模式的属性设置器)。如果工厂的singleton属性设置为false,则该资源工厂仅在每次查找此条目时创建适当的bean类的新实例。

使用此设施的步骤如下所述。

  1. 创建您的JavaBean类 创建每次资源工厂被查找时将实例化的JavaBean类。例如,假设您创建了一个名为com.mycompany.MyBean的类,其代码如下所示:
package com.mycompany;public class MyBean {private String foo = "Default Foo";public String getFoo() {return (this.foo);}public void setFoo(String foo) {this.foo = foo;}private int bar = 0;public int getBar() {return (this.bar);}public void setBar(int bar) {this.bar = bar;}
}
  1. 声明您的资源需求 然后,修改您的Web应用程序部署描述符(/WEB-INF/web.xml)以声明您将请求此bean的新实例的JNDI名称。最简单的方法是使用 元素,例如:
<resource-env-ref><description>MyBean实例的对象工厂。</description><resource-env-ref-name>bean/MyBeanFactory</resource-env-ref-name><resource-env-ref-type>com.mycompany.MyBean</resource-env-ref-type>
</resource-env-ref>

警告 - 请确保您遵循Web应用程序部署描述符的DTD所要求的元素顺序!有关详细信息,请参阅Servlet规范。

  1. 编写您的应用程序对此资源的使用 对此资源环境引用的典型用法可能如下所示:
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
MyBean bean = (MyBean) envCtx.lookup("bean/MyBeanFactory");writer.println("foo = " + bean.getFoo() + ", bar = " +bean.getBar());
  1. 配置Tomcat的资源工厂 要配置Tomcat的资源工厂,请向此Web应用程序的 元素添加如下所示的元素。
<Context ...>...<Resource name="bean/MyBeanFactory" auth="Container"type="com.mycompany.MyBean"factory="org.apache.naming.factory.BeanFactory"bar="23"/>...
</Context>

请注意,资源名称(在这里是bean/MyBeanFactory)必须与Web应用程序部署描述符中指定的值匹配。我们还初始化了bar属性的值,这将导致在返回新bean之前调用setBar(23)。因为我们没有初始化foo属性(虽然我们可以),所以bean将包含由其构造函数设置的任何默认值。

如果bean属性的类型为String,则BeanFactory将使用提供的属性值调用属性设置器。如果bean属性类型为原始类型或原始包装类型,则BeanFactory将将该值转换为适当的原始类型或原始包装类型,然后在调用setter时使用该值。某些bean具有无法从String自动转换的类型的属性。如果bean提供了一个具有相同名称但接受String的备用setter,则BeanFactory将尝试使用该setter。如果BeanFactory无法使用值或执行适当的转换,则设置属性将失败,并显示命名异常。

较早的Tomcat版本中可用的forceString属性已被删除,作为加强安全措施。

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

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

相关文章

spring boot后端开发基础

spring boot后端开发基础 Spring Boot一、开发步骤二、Web分析三、跨域问题四、HTTP协议五、Web服务器六、响应前端请求七、springboot常用注解创建一个简单的RESTful API服务层和数据访问层配置类和Bean定义响应体和路径变量 Spring Boot 一、开发步骤 创建项目 添加依赖 项…

k8s部署Eureka集群

部署有状态负载 镜像配置&#xff1a; 环境变量如下&#xff1a; AUTHENTICATE_ENABLEtrue JAVA_OPTS-Dauth.userName账号 -Dauth.password密码 MY_POD_NAMEmetadata.name BOOL_REGISTERtrue BOOL_FETCHtrue APPLICATION_NAME负载名称 EUREKA_INSTANCE_HOSTNAME${MY_POD_NA…

webpack源码分析——enhanced-resolve库之getType、normalize、join和cachedJoin函数

一、PathType 路径类型 const PathType Object.freeze({Empty: 0, // 空Normal: 1, // 默认值Relative: 2, // 相对路径AbsoluteWin: 3, // win 下的绝对路径AbsolutePosix: 4, // posix 下的绝对路径Internal: 5 // enhanced-resolve 内部自定义的一种类型&#xff0c;具体是…

小程序AI智能名片S2B2C商城系统:做内容、造IP、玩社群打造私域流量的新营销秘籍

在数字化浪潮汹涌的新时代&#xff0c;小程序AI智能名片S2B2C商城系统正以其独特的魅力&#xff0c;引领着营销领域的新变革。这套系统不仅将人工智能与小程序技术完美结合&#xff0c;更通过创新的S2B2C模式&#xff0c;为企业打开了一扇通往成功的大门。 面对激烈的市场竞争&…

SQL注入作业

目录 一、万能密码和二阶注入测试 1.万能密码 2.二阶注入测试 二、联合查询注入测试 1.判断注入点 2.判断当前查询语句的列数 3.查询数据库基本信息 4.查询数据库中的数据 三、报错注入 1. 报错注入函数EXTRATVALUE 2.UPDATEXML 四、盲注测试 1.布尔盲注 判断数据…

Linux搭建Discuz论坛

搭建一个论坛 —接上篇博客 改名/etc/httpd/conf.d/vhosts.conf 》/etc/httpd/conf.d/vhosts.conf.bak [rootlocalhost conf.d]# mv /etc/httpd/conf.d/vhosts.conf /etc/httpd/conf.d/vhosts.conf.bak此时的vhosts.conf是一个新创建的文件&#xff0c;之前的vhosts.conf已经…

使用 Godot 游戏引擎为 Apple 的 visionOS 创建游戏和应用的平台

借助GodotVision ,您可以使用Godot 游戏引擎为 Apple VisionOS创建游戏和应用程序。 保卫牛城堡,一款使用 GodotVision 制作的 VisionOS 游戏 GodotVision 运行一个控制本机RealityKit 视图的无头 Godot实例。粗略地说:Godot 是后端,

毅速3D打印随形透气钢:革新传统,引领未来

透气钢&#xff0c;这种多孔金属材料&#xff0c;既融合了金属材料的坚固性&#xff0c;又具备了透气材料的通透性。尤其在注塑模具的制造中&#xff0c;透气钢的作用不可忽视。通过镶嵌透气钢&#xff0c;能够有效解决因困气产生的注塑问题&#xff0c;使成型加工更为完善&…

机器学习鸢尾花使用csv

操作流程 下载鸢尾花数据集导入需要的包读取数据并查看数据大小和长度划分训练集和测试集使用模型评估算法 下载鸢尾花数据集 链接&#xff1a;https://pan.baidu.com/s/1RzZyXsaiJB3e611itF466Q?pwdj484 提取码&#xff1a;j484 --来自百度网盘超级会员V1的分享导入需要…

矩阵混乱度(熵值)代码计算

1、先回顾下熵值的数据公式&#xff1a; 2、jax.numpy代码 注意的点&#xff1a;熵值计算的输入的必须是归一化的正值 import jax.numpy as jnp import jax def _entroy(probs):log_probs jnp.log2(jnp.maximum(1.0e-30, probs))mean_sum_plogp jnp.mean(- jnp.sum(log_pro…

vscode+vue开发常用插件整理

前言&#xff1a; vscode新机开发常用插件整理 1、chinese 简体中文配置 2、file-jump 别名跳转&#xff0c;可以把引入的组件&#xff0c;通过ctrl地址名 跳转组件内部 3、Vue Peek&#xff1a;vue项目中的一些配置&#xff0c;安装后&#xff0c;能实现 ctrl组件名 跳转…

Golang图像处理实战:image/png包的应用详解

Golang图像处理实战&#xff1a;image/png包的应用详解 介绍基本操作读取PNG文件保存PNG文件 处理图像数据修改图像像素图像裁剪和缩放 高级功能使用 image/color 处理颜色优化PNG性能 错误处理与调试常见错误及其解决方法文件无法打开图像解码失败 使用工具和库进行调试 结语 …

测试数据整理--chatgpt 构造sql语句导出数据库数据

在测试过程中&#xff0c;我们有时候需要准备一些测试数据&#xff0c;若从系统中直接导出Excel数据&#xff0c;数据往往庞大且需要整合&#xff0c;不好整理&#xff0c;于是我们直接去数据库中查询一些表&#xff0c;数据整合后直接导出结果会更方便。 我们今天就 用 chatg…

shell 调用钉钉通知

使用场景&#xff1a;机器能访问互联网&#xff0c;运行时间任务后通知使用 钉钉建立单人群 手机操作&#xff0c;只能通过手机方式建立单人群 电脑端 2. 配置脚本 #!/bin/bash set -e## 上图中 access_token字段 TOKEN KEYWORDhello # 前文中设置的关键字 function call_…

【jinja2】模板渲染

HTML文件 return render_template(index.html)h1: 一级标题 变粗变大&#xff08;狗头

B02、JVM调优案例

1、调优的基本问题 1.1、为什么要调优&#xff1f; 目的是防止出现OOM&#xff0c;进行JVM规划和预调优&#xff1b;解决程序运行中各种OOM&#xff1b;以及减少Full GC出现的频率&#xff0c;解决运行慢、卡顿问题。 1.2、调优的大方向 合理的编写代码&#xff0c;充分并合理…

大气的免费wordpress模板

国产的wordpress模板&#xff0c;更适合中国人使用习惯&#xff0c;更符合中国老板的审美的大气wordpress企业官网建站模板。 WordPress模板&#xff0c;也称为主题&#xff0c;是用于定义WordPress网站或博客外观和功能的预设计文件集。这些模板使用HTML、CSS和PHP代码构建&a…

鸢尾花数据集的KNN探索与乳腺癌决策树洞察

鸢尾花数据集的KNN探索与乳腺癌决策树洞察 今天博主做了这个KNN和决策树的实验。 一.数据集介绍 介绍一下数据集&#xff1a; 威斯康星州乳腺癌数据集&#xff1a; 威斯康星州乳腺癌数据集&#xff08;Wisconsin Breast Cancer Dataset&#xff09;是一个经典的机器学习数…

【简单介绍下Beego框架】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

探索 Nacos反序列化漏洞CNVD-2023-45001

在软件开发领域&#xff0c;安全漏洞是一项不容忽视的重要问题。最近&#xff0c;我们的安全团队发现了一个影响到我们的Nacos 2.1.0版本的反序列化漏洞&#xff0c;可能带来严重的安全威胁。我们已经立即采取了修复措施。本文将深入探讨这些漏洞的原理、可能造成的影响&#x…