zoukankan      html  css  js  c++  java
  • Tomcat配置JNDI数据源

    本文将介绍Tomcat配置JNDI数据源的方法,主要分为配置局部数据源(仅供单个应用使用)和全局数据源(所有用该Tomcat的应用都可以使用)

    一、思考

    从我们学习Web开发以来,我们都是通过程序代码来实现数据库的访问的。从一开始直接将数据库配置信息写在代码中,到后来将配置信息抽取出来写在了Properties文件中,我们访问数据库的代码更加精简。

    而通过JNDI方式访问数据库则更为直接,JNDI连接数据库的方式直接将数据库信息放在Tomcat中,而项目代码里直接通过JNDI技术就可以得到数据源。他们之间通过定义在Tomcat中的数据源名联系起来。

    应该说,JNDI方式配置数据源将项目代码与实施部署分离开来了,有利于开发人员和实施部署人员各司其职。

    二、配置方式

    一般情况下,局部数据源直接配置在项目对一个的<Context>标签内,如下:

    <Context docBase="S:WorkspacesServletProjectWebRoot" reloadable="true" >
        <Resource name="jdbc/dstest" auth="Container" type="javax.sql.DataSource" maxActive="5" maxIdle="2" maxWait="10000" username="root" password="root" driverClassName="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@127.0.0.1:1521:dbName"/>
    </Context>

    注:根据项目配置方式不同,可以配在servlet.xml中或conf/Catalina/localhost下的独立xml文件中

    而全局数据源,则需要先在<GlobalNamingResources>标签内添加<Resource>数据源,然后在项目部署的<Context>标签内用<ResourceLink>引用对应的<Resource>标签,如下:

     1 <!-- 在GlobalNamingResources中添加数据源 -->
     2 <GlobalNamingResources>
     3     <!-- 省略其他  -->
     4     <Resource name="jdbc/dstest" auth="Container" type="javax.sql.DataSource" maxActive="5" maxIdle="2" maxWait="10000" username="root" password="root" driverClassName="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@127.0.0.1:1521:dbName"/>
     5   </GlobalNamingResources>
     6 
     7 <!-- 在项目部署Context中引用数据源 -->
     8 <Context docBase="S:WorkspacesServletProjectWebRoot" path="" >   
     9              <ResourceLink name="jdbc/dstest" global="jdbc/dstest" type="javax.sql.DataSource"/>
    10         </Context>

    注:1、这里第4行和第9行的name属性必须相同。

     2、配置好全局数据源后,你不仅可以在server.xml文件中用<ResourceLink>引用,你也可以在conf/Catalina/localhost中的xml文件中引用。

    选择局部数据源还是全局数据源完全取决你自己的需求,如果你经常 有几个项目需要用到同一个数据源,那么你可以使用全局数据源,然后在项目的<Context>标签中引用,这样可以避免重复书写<Resource>内容。

    三、测试

    1、第三步所写的任一种方式配置好数据源。

    2、配置完数据源之后,你还要把对应的数据库驱动文件放在项目的lib目录或者tomcat的lib目录下。

    3、接着,我们写一个简单的Bean,Bean里进行数据库的连接。我们会在JSP页面上调用这个Bean并输出结果,以查看数据源是否配置成功。

    JNDIBean.java文件

    package com.chanshuyi.test;
    
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.Statement;
    
    import javax.naming.Context;
    import javax.naming.InitialContext;
    import javax.sql.DataSource;
    
    public class JNDIBean {
        
        public String getInfoByJNDI()
        {
            String result = "";
            
            try
            {
                Context ctx = new InitialContext();
                /* 在XML文件中定义的数据源名为:jdbc/dstest */
                DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/dstest");
                Connection conn = ds.getConnection();
                Statement stmt = conn.createStatement();
                ResultSet rs = stmt.executeQuery("select * from t_yw_product where trueid = '260'");
                while(rs.next())
                {
                    result += rs.getString("finaluser") + "<br/>";
                }
            }
            catch(Exception e)
            {
                e.printStackTrace();
            }
            return result;
        }
    }

    JNDITest.jsp文件:

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <jsp:useBean id="jndiBean" class="com.chanshuyi.test.JNDIBean"></jsp:useBean>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    <html>
        <head></head>
        <body>
            <h1>Hello World !</h1>
            <%=jndiBean.getInfoByJNDI()%>
        </body>
    </html>
  • 相关阅读:
    阅读 video in to axi4-stream v4.0 笔记
    python 字符串操作
    python 基本语句
    Python 算术运算符
    芯片企业研报阅读
    量化分析v1
    基于MATLAB System Generator 搭建Display Enhancement模型
    System Generator 生成IP核在Vivado中进行调用
    FPGA 中三角函数的实现
    System Generator 使用离散资源
  • 原文地址:https://www.cnblogs.com/chanshuyi/p/3929997.html
Copyright © 2011-2022 走看看