• JNDI绑定数据库


    经过3个多小时的努力,配置JNDI数据源(主要是通过DBCP连接池)终于搞定~
    还是Tomcat官方的说明好,不过全是英文的,大概还看得懂.
    百度上那么花花绿绿的太多了,一个也没成功!...
    本例使用的数据库为Ms SQL Server 2000,对于其它数据库只是修改一下相应的参数即可,
    服务器是Tomcat5.5, 与之间的版本配置连接池最简便
    自己总结了一下,希望起到一个抛砖引玉的作用

    总结:
    第一步:

    将驱动程序(jar包)放到tomcat安装目录下的commonlib文件夹下
    第二步:

    在Tomcat的webapps目录随便创建一个工程目录,例如myjdbc。在myjdbc目录下创建META-INF目录,在此目录下创建一个context.xml文件,里面的内容如下:

    xml version="1.0" encoding="UTF-8"?> 
    <Context>
     <Resource name="jdbc/test" 
      auth="Container" 
      type="javax.sql.DataSource"
             maxActive="100" 
      maxIdle="30" 
      maxWait="10000"
             username="sa" password="" 
      driverClassName="net.sourceforge.jtds.jdbc.Driver"
             url="jdbc:jtds:sqlserver://localhost/pubs"/>
     </Context>

     

    附注如下:
    Tomcat标准数据源资源工厂配置项如下:
    * driverClassName - 所使用的JDBC驱动类全称。
    * maxActive - 同一时刻可以自数据库连接池中被分配的最大活动实例数。
    * maxIdle - 同一时刻数据库连接池中处于非活动状态的最大连接数。
    * maxWait - 当连接池中没有可用连接时,连接池在抛出异常前将等待的最大时间,单位毫秒。
    * password - 传给JDBC驱动的数据库密码。
    * url - 传给JDBC驱动的连接URL。
    * user - 传给JDBC驱动的数据库用户名。
    * validationQuery - 一个SQL查询语句,用于在连接被返回给应用前的连接池验证。
    * 如果指定了该属性,则必为至少返回一行记录的SQL SELECT语句。


    jdbc/test是数据源的名称(随意写,要和web.xml文件中 <res-ref-name>jdbc/test</res-ref-name> 一样即可),
    其他的参数按照自己的实际情况进行修改,例如数据库的名称、账号、密码。

    第三步:

    在myjdbc目录下创建WEB-INF目录,创建web.xml文件,内容如下:

    xml version="1.0" encoding="UTF-8"?> 
    <web-app xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" 
    version="2.4"> 

        <resource-ref> 
            <description>DB Connection</description> 
            <res-ref-name>jdbc/test</res-ref-name> 
            <res-type>javax.sql.DataSource</res-type> 
            <res-auth>Container</res-auth> 
        </resource-ref> 
    </web-app> 

     

    说明:
    <resource-ref>
    <descrtiption>引用资源说明</descrtiption>
    <res-ref-name>引用资源的JNDI名</res-ref-name>
    <res-type>引用资源的类名</res-type>
    <res-auth>管理者(Container)</res-auth><!--Container-容器管理 Application-Web应用管理-->
    </resource-ref>
    第四步:

    写个jsp,试一下吧!

    <%=text/html;charset=utf-8%>
    =java.sql.*,javax.sql.*,javax.naming.*,com.DBConnection 

      try
      {
       初始化查找命名空间
       Context ctx   InitialContext(); 
       InitialContext ctx   InitialContext();亦可 
       找到DataSource,对名称进行定位java:compenv是必须加的,后面跟你的DataSource名
       DataSource ds  (DataSource)ctx.lookup(java:comp/env/jdbc/test);
       取出连接
       Connection conn  ds.getConnection();
    System.out.println(connection pool connected !!);   
      } catch (NamingException e) {
       System.out.println(e.getMessage());
      } catch (SQLException e) {
       e.printStackTrace();
      }finally
      {
       注意不是关闭,是放回连接池.
       conn.close();
      }

    }


    或写个JSP用标签库测试一下:

    <%=java import""=ISO-8859-1%>
    =http://java.sun.com/jsp/jstl/sql prefix""%>
    =http://java.sun.com/jsp/jstl/core prefix""%>

    <sql:query var="rs" dataSource="jdbc/test">
    select * from authors
    </sql:query>

    <html>
      <head>
        <title>DB Test</title>
      </head>
      <body>
    <c:forEach var="row" items="${rs.rows}">
        ${row.city}<br/>
    </c:forEach>
      </body>
    </html>

     

    我成功了!Good Luck!
    以下是配置JNDI的其他方法,个人不建议使用,因为修改服务器的
    server.xml和web.xml,如果有一点错误,你的容器就会崩溃~

    注:连接数据源的方法还有很多,在这里我简要说之:
    比如说第二步还可以这么做:

    在/tomcat/conf/Catalina/localhost(或其它主机名)/中添加以
    虚拟目录名称(你的工程名)命名的XML文件来配置context.
    比如我的主机下有个目录dbpool其地址为tomcat/webapps/test我可以这样来配置这个上下文:
    在tomcat/conf/Catalina/localhost/目录下创建test.xml文件,内容和上面一样.

    还可以:
    在/tomcat/conf/server.xml中<host></host>标签之间添加
       
     

    Context path="/test" docBase="test"
            debug="5" reloadable="true" crossContext="true">
      <Resource name="jdbc/test" auth="Container" type="javax.sql.DataSource"
                   maxActive="100" maxIdle="30" maxWait="10000"
                   username="javauser" password="javadude" driverClassName="net.sourceforge.jtds.jdbc.Driver"
                   url="jdbc:jtds:sqlserver://localhost/pubs"/>
    </Context>

     

    其中path是你的工程路径(相对或绝对亦可),其中docBase="test"说明,此主机已经指向到webapps目录下了,回头
    来看test这个上下文,它实际目录是位于webapps的目录下的,所以
    在Context中我们可以将docBase直接设置为test了。如果它在webapps/dbpool/test下,则设置为dbpool/test就可以了。

    附:JNDI——Java Naming and Directory Interface是一套提供naming和 directory功能的 API,
    Java应用程式开发者透过使用 JNDI,在naming和 directory方面的应用上就有了共通的准则.

    另一种方法:eclipse中修改catalina.properties,servers.xml,context.xml都直接在eclipse的server目录下修改,否则发布一次项目就被覆盖了。除非是war包形式发布项目,则可以直接在tomcat下修改

    第一步:(1)把数据库驱动的jar包,放入tomact解压文件的lib文件下:db2jcc.jar,db2jcc_license_cu.jar

        (2)在config目录下,打开catalina.properties文件。在tomcat.util.scan.DefaultJarScanner.jarsToSkip节点后加上db2*.jar

    第二步:(1)在config目录下的servers.xml中填写如下(在全局节点下配置)     

     1  <GlobalNamingResources>
     2     <!-- Editable user database that can also be used by
     3          UserDatabaseRealm to authenticate users
     4     -->
     5     <Resource auth="Container" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" name="UserDatabase" pathname="conf/tomcat-users.xml" type="org.apache.catalina.UserDatabase"/>
     6     <!--此处为jndi的配置 -->
     7     <Resource auth="Container" driverClassName="com.ibm.db2.jcc.DB2Driver" maxActive="50" maxIdle="30" maxWait="10000" name="NMCRW" password="mobilebe" type="javax.sql.DataSource" url="jdbc:db2://172.17.101.101:50001/HAPPY" username="mobilebe"/>  
     8               
     9               
    10   </GlobalNamingResources>
    View Code

         (2)在config目录下的context.xml中配置节点指向jndi的配置

    1  <!-- 引用刚才在全局配置的jndi数据源 -->
    2   <ResourceLink global="NMCRW" name="NMCRW" type="javax.sql.DataSource"/>
    View Code

    第三步:(1)spring配置jndi的工厂bean

    1   <!-- jndi的spring -->
    2     <bean id="dataSourceNmc" class="org.springframework.jndi.JndiObjectFactoryBean">
    3         <!-- jndi名字在tomcat中的书写格式java:comp/env/+jndi名字 -->
    4         <property name="jndiName">
    5             <value>java:comp/env/NMCRW</value>
    6         </property>
    7     </bean>
    View Code
  • 相关阅读:
    JSP原理
    基于Servlet+JSP+JavaBean开发模式的用户登录注册
    Eclipse-Java EE
    Javaweb经典三层架构的演变
    Tomcat9 访问 Manager App
    Tomcat 访问 Manager App,Host Manager
    phantomjs 抓取房产信息
    phantomjs 无法打开https网站解决方案
    java HashMap,LinkedHashMap,TreeMap应用
    tomcat 部署 RESTful 服务实例
  • 原文地址:https://www.cnblogs.com/shangxiaofei/p/4324321.html
Copyright © 2020-2023  润新知