JavaWeb: jndi的使用

JNDI:JNDI是 Java命名与目录接口(Java Naming and Directory Interface),在J2EE规范中是重要的规范之一

把路径名称与一个java对象绑定. 我们可以通过路径名称获得java对象的技术,就是jndi;(通过路径获取对象,把一个对象交给tomcat来进行管理,给此对象一个路径,在项目里通过路径获取对象)

Jndi、tomcat与dbcp的结合使用

JNDI的使用:1)在容器中配置数据源  2)在程序中引用数据源

 

以连接数据库为例

没有JNDI的做法存在的问题:

1、数据库服务器名称MyDBServer 、用户名和口令都可能需要改变,由此引发JDBC URL需要修改;

2、数据库可能改用别的产品,如改用DB2或者Oracle,引发JDBC驱动程序包和类名需要修改;

3、随着实际使用终端的增加,原配置的连接池参数可能需要调整;

 

解决办法:

程序员应该不需要关心“具体的数据库后台是什么?JDBC驱动程序是什么?JDBC URL格式是什么?访问数据库的用户名和口令是什么?”等等这些问题,程序员编写的程序应该没有对 JDBC 驱动程序的引用,没有服务器名称,没有用户名称或口令 —— 甚至没有数据库池或连接管理。而是把这些问题交给J2EE容器来配置和管理,程序员只需要对这些配置和管理进行引用即可

 

首先,在在J2EE容器中配置JNDI参数,定义一个数据源,也就是JDBC引用参数,给这个数据源设置一个名称;然后,在程序中,通过数据源名称引用数据源从而访问后台数据库。

在系统部署后,如果数据库的相关参数变更,只需要重新配置 mysql-ds.xml 修改其中的JDBC参数,只要保证数据源的名称不变,那么程序源代码就无需修改。

JNDI避免了程序与数据库之间的紧耦合,使应用更加易于配置、易于部署。

JNDI的扩展:JNDI在满足了数据源配置的要求的基础上,还进一步扩充了作用:所有系统外部的资源的引用,都可以通过JNDI定义和引用。

J2EE 规范要求所有 J2EE 容器都要提供 JNDI 规范的实现。JNDI 在 J2EE 中的角色就是“交换机” —— J2EE 组件在运行时间接地查找其他组件、资源或服务的通用机制。

 

1)把连接池的jar包放到tomcat的lib目录下。

2)在conf目录下,找到context.xml文件

Name表示对象的名字,jdbc/datasource,auth表示作者,用户名,密码,驱动类名,url。


代码如下:

	<Resource name="jdbc/datasource" auth="Container"
		type="javax.sql.DataSource" username="root" password="0000"
		driverClassName="com.mysql.jdbc.Driver" 
		url="jdbc:mysql://localhost:3306/test"
		maxActive="8" maxIdle="4"/>
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Context initCtx = null;
        try {
            //初始化容器对象
            initCtx = new InitialContext();
            //最后的路径要和配置文件中保持一致
            //comp/env表示环境命名上下文(environment naming context(ENC))
            DataSource ds = (DataSource) initCtx.lookup("java:comp/env/jdbc/datasource");
            Connection conn = ds.getConnection();
            System.out.println(conn+"test");
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

可能会出现的问题:

实验Tomcat的DBCP数据源的时候发生com.MySQL.jdbc.Connection.isValid(I)Z错误。 
原因:JDBC驱动过旧(下载新的驱动)。 
解决方法:更新驱动 放在tomcat的lib目录下



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值