JNDI
JNDI是什么
Java Naming and Directory Interface:Java命名与目录接口
目录服务的Java API
JNDI能做什么
通过将名称与资源或服务进行关联,为查找和访问各种命名和目录服务提供通用、统一的接口
JNDI的作用与优点
简化应用对于资源的配置及维护工作
可以在更大范围、不同应用之间共享资源
配置资源
修改Tomcat的context.xml文件,配置Environment环境变量
name:环境变量的名称
type:环境变量的Java类型全类名
value:环境变量的值
在JSP页面编写代码,通过JNDI访问发布的信息
通过Context的lookup()方法查找资源
数据库连接:
存在问题
重复创建、销毁数据库连接
并发访问数量较大时,执行速度受到极大影响
系统的安全性和稳定性较差
数据池连接
使用连接池管理数据库连接
每次请求从连接池中获取数据库连接
处理结束后,将数据库连接归还到连接池
配置数据源
tomcat-->conf-->context.xml:
目录 | 说明 |
name | 指定资源的JNDI名字 |
auth | 指定管理资源的Manager |
type | 指定资源所属的Java类型 |
maxTotal | 最大连接数,默认值为8,负数表示不受限制 |
maxIdle | 最大空闲连接数,默认值为8,设置为负数表示不受限制 |
minIdle | 最小连空闲接数,默认值为0 |
maxWaitMillis | 最大等待数 |
username | 指定连接数据库的用户名 |
password | 指定连接数据库的密码 |
driverClassName | 指定连接数据库的JDBC驱动程序 |
url | 指定连接数据库的URL |
注:不同的Web服务器设置数据源的方法也是不一样的
配置/WEB-INF/web.xml文件
目录 | 说明 |
description | 引用资源说明 |
res-ref-name | 引用资源的JNDI名字,与元素中的name属性对应 |
res-type | 引用资源的Java类型,与元素中的type属性对应 |
res-auth | 指定管理引用资源的Manager,与元素中的auth属性对应 |
在Tomcat的lib目录中添加数据库驱动jar文件
编写代码,查找并获取数据源
通过lookup()方法查找数据源
编写代码,测试从连接池中获取数据源
运行效果
JNDI配置常见错误
错误类型:无法加载驱动类
报错信息
错误原因
缺少jar文件
驱动类名拼写错误
解决方案
将JDBC驱动程序的jar文件添加到Tomcat的lib目录中
检查驱动类名拼写是否正确
错误类型:无法创建JDBC驱动
报错信息
错误原因
数据库驱动配置错误
解决方案
检查context.xml文件中数据源的配置信息,确保配置信息完全正确
错误类型:属性名绑定错误
报错信息
错误原因
获取配置信息值的key错误,须使用前缀(java:comp/env/)+数据源名称
解决方案
检查代码,使用使用前缀(java:comp/env/)+数据源名称作为lookup()方法的参数