今天是实习生入职第二天,分配了一个任务,写一个tomcat下配置JNDI数据源的说明文档,因为之前没接触过(一直使用的是C3P0连接池),所以踩了很多坑,现在总结出一个简单的小示例,以作记录
首先说,JDBC(Java DataBase Connectivity)与JNDI(Java Naming and Directory Interface)的区别:
JDBC以一种统一的方式来对各种各样的数据库进行存取,为开发人员隐藏了不同数据库的不同特性,开发人员可以通过一些简单的配置就可以直接调用连接而不用去处理数据库连接的细节,也可以采用数据库连接缓冲池(Connect Pool)优化数据库连接。
JNDI被用于执行名字和目录服务。在JNDI中,目录结构的每一个结点称为Context。每一个JNDI的名字都是相对于Context的。应用可以通过这个初始化的Context来定位它所需要的资源和对象。
JNDI相对于JDBC来说是它的灵活性,因为如果使用JDBC,在使用的过程中,如果需要修改数据库服务器,就需要修改相对应的用户名和口令,由此引发对应的URL也需要修改,而这些修改都需要在配置文件中进行配置,而一旦修改了配置文件就需要重新启动项目来使新的配置生效;还有一个问题就是如果改用其他的数据库产品,对应的JAR包都需要改变,这样来说JDBC显然使很难满足这些需求的。
JNDI只需要在配置文件中提前将可能用到的数据库的配置信息,配置到配置文件中(相应的JAR包也需要放在Tomcat目录下的lib文件夹下),然后交友J2EE容器来配置和管理,开发者只需要对这些配置和管理进行引用即可,相对来说更加灵活。还有一个好处就是JDBC的配置文件和程序的文件使放在一起的耦合性较高,而JNDI的配置文件是放在J2EE容器中的,大大降低了耦合性,相对来说独立性更高。
具体配置如下:
1、配置数据源
在项目的webapps目录文件下的META_INF文件夹下创建一个名为context.xml文件,用来配置资源
2、在程序中引用数据源
3、简单的Jsp页面(因为数据库的数据源存放在tomcat容器中,所以必须启动tomcat容器才可以进行测试,一下方法是最简单的测试小Demo)
4、测试结果截图
Jsp页面:
后台输出 :
false
至此,Demo完成
注:需要的JAR包
jstl-1.2.jar
standard-1.1.2.jar
这俩是放在WEB-INF文件夹下的lib中(需要add to build path)