最开始,我是借鉴 孤傲苍狼的JNDI教程去做的,他讲得很详细,但是坏处也就是因为他讲的太详细。查了很多书,都是建议说不要用全局去配置JNDI,一是要修改tomcat的server.xml,容易破坏tomcat ,其次是那样吃力不讨好。我是建议用局部变量就好的。

1.步骤一:学习配置JNDI之前,介绍你一定要先掌握tomcat的配置虚拟目录(可以去看Tomcat中主目录配置与虚拟目录配置问题这样的文章,也可以去我的tomcat配置虚拟目录 -思维焦点网易博客找类似的链接)。学习了tomcat的配置虚拟目录后你就知道了为什么要在  tomcat安装目录\conf\Catalina\localhost   下创建.xml文件。

2.步骤二: 开始通过局部配置JNDI(这个教程也只讲局部配置)。

下面会附上代码,标注颜色的,你要根据自己的实际情况改一下。

3.步骤三:最后通过tomcat的startup.bat启动和用电脑的浏览器是可以看到成功连接数据源和驱动的,但是用eclipse启动tomcat就不能了,总是提示Cannot create JDBC driver of class '' for connect URL 'null'问题 ,后来找到了tomcat+mysql问题,找不到jdbc驱动? ,说是jdbc for mysql除了mysql-connector-java-3.1.8-bin.jar之外还要个aspectjrt.jar,一起放在WEB-INF\lib  里面,结果没问题,可以运行了。网上很多资料和书都没有提到这个,我也不知道什么原因需要copy aspectjrt.jar 这个东西,也可能时tomcat版本或是jdbc版本问题。如果还是不行的话,可以再尝试这种方法:Tomcat下使用Druid配置JNDI数据源

--------------------------------------------------------------我是可爱的分割线-----------------------------------------------------

继续详解步骤二,附上代码:

1.首先,新建一个Test_JNDI的工程,然后在mysql和sqlserver数据库中创建名为test的数据库(只测试这两种数据库)。然后,在工程里创建test_jndi.jsp,然后在这个jsp中贴上代码


 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.sql.*,javax.sql.*,javax.naming.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>JNDI数据源测试</title>
</head>
<body>
<%
Connection connMySQL = null;
try {
//1、初始化名称查找上下文
Context ctx = new InitialContext();
//InitialContext ctx = new InitialContext();亦可
//2、通过JNDI名称找到DataSource,对名称进行定位java:comp/env是必须加的,后面跟的是DataSource名
/*
DataSource名在web.xml文件中的<res-ref-name>mysqlDataSource</res-ref-name>进行了配置
<!--MySQL数据库JNDI数据源引用 -->
<resource-ref>
<description>MySQL DB Connection</description>
<res-ref-name>mysqlDataSource</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
*/
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/mysql");
//3、通过DataSource取得一个连接
connMySQL = ds.getConnection();
out.println("MySQL Connection pool connected !!");
//4、操作数据库
} catch (NamingException e) {
System.out.println(e.getMessage());
} catch (SQLException e) {
e.printStackTrace();
} finally {
//5、关闭数据库,关闭的时候是将连接放回到连接池之中
connMySQL.close();
}
%> <hr/>
<%
Connection connSQLServer = null;
try {
//1、初始化名称查找上下文
Context ctx = new InitialContext();
//InitialContext ctx = new InitialContext();亦可
//2、通过JNDI名称找到DataSource,对名称进行定位java:comp/env是必须加的,后面的是DataSource名
/*
DataSource名在web.xml文件中的<res-ref-name>sqlserverDataSource</res-ref-name>进行了配置
<!--SQLServer数据库JNDI数据源引用 -->
<resource-ref>
<description>SQLServer DB Connection</description>
<res-ref-name>sqlserverDataSource</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
*/
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/sqlserver");
//3、通过DataSource取得一个连接
connSQLServer = ds.getConnection();
out.println("SQLServer Connection pool connected !!");
//4、操作数据库
} catch (NamingException e) {
System.out.println(e.getMessage());
} catch (SQLException e) {
e.printStackTrace();
} finally {
//5、关闭数据库,关闭的时候是将连接放回到连接池之中
connSQLServer.close();
}
%> </body>
</html>

2.然后,在工程目录下的WebContent下的.xml文件中,

添加如下代码:

 <?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" 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">
<display-name>Test_JNDI</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>test_jndi.jsp</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<!--MySQL数据库JNDI数据源引用 -->
<resource-ref>
<description>MySQL DB Connection</description>
<res-ref-name>jdbc/mysql</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<!--SQLServer数据库JNDI数据源引用 -->
<resource-ref>
<description>sqlserver DB Connection</description>
<res-ref-name>jdbc/sqlserver</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref> </web-app>

3.最后,也是最重要,最容易出错的,就是在tomcat安装目录\conf\Catalina\localhost   下创建 Test_JNDI.xml文件(文件名最好和项目名Test_JNDI一样,不一样的情况我还没实验过)

(1).可以先在Test_JNDI.xml文件中添加如下代码,然后在浏览器输入对于URL,验证是否能访问项目首页。

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/Test_JNDI" docBase="E:/EclipseEE/workspace/Test_JNDI/WebContent" reloadable="true" debug="0" crossContext="true" />

注意1:上面这段代码是不带标签体的标签,跟下面的代码是不一样的。具体是<Context  .......   /> 和 <Context  .......   >.....这里是数据源信息</Context >这两个代码语法是有区别的,一个是有标签体的。

注意2:xml文件中不能出现任何一个中文,不然启动tomcat会报错(tomcat报错 Invalid byte 2 of 2-byte UTF-8 sequence

注意3:上面这段代码中的<?xml 前面不能有空格, 否则tomcat报错(不允许有匹配 "[xX][mM][lL]" 的处理指令目标

(2).贴上完整代码:

 <?xml version="1.0" encoding="UTF-8"?>
<Context path="/Test_JNDI" docBase="E:/EclipseEE/workspace/Test_JNDI/WebContent" reloadable="true" debug="0" crossContext="true" >
<Resource
name="jdbc/mysql"
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="root"
password="0821"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8"/> <Resource
name="jdbc/sqlserver"
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="sa"
password="0821"
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://localhost:1433;DatabaseName=test"/>
</Context>

注意:

用户名和密码设置成你自己电脑的数据库,test为数据库。

name="jdbc/sqlserver" ,名字在所有地方有要保持一致。

path="/Test_JNDI" 里的名字要设置成和跟这个.xml文件一样。

运行成功结果:

--------------------------------------------------------------我是可爱的分割线-----------------------------------------------------

本文参考:1.JNDI数据源的配置-孤傲苍狼

2.JNDI到底是什么?

3. Tomcat中主目录配置与虚拟目录配置问题

温馨提示:copy代码后粘贴到eclipse如果存留行号,可以利用的eclipse的快捷键alt+shit+a 将行号批量选中删除。

原创不易,请注明转载

JNDI数据源局部配置(解决Cannot create JDBC driver of class '' for connect URL 'null')的更多相关文章

  1. SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null' 解决办法

    当跑jndi项目时抛出:org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' fo ...

  2. Cannot create JDBC driver of class '' for connect URL 'null'问题解决方法2

    1)启动Tomcat服务器,打开浏览器,输入http://localhost:8080/admin(其中localhost是名称服务器或称为主机),进入管理界面的登陆页面,这时候请输入原来安装时要求输 ...

  3. birt 访问频繁报错Cannot create JDBC driver of class '' for connect URL 'null' java.sql.SQLException: No suitable driver

    一般birt项目都是部署tomcat启动.这个问题大概率是因为没有配置JNDI数据源的原因. 参考链接: https://www.cnblogs.com/xdp-gacl/p/3951952.html

  4. SQL: Cannot create JDBC driver of class '' for connect URL

    使用数据库数据源的web 项目,发布后,访问数据库500报错: 浏览器端: 控制台: 数据库连接池在不启动Tomcat的情况下,测试类通过,没有问题. 一旦在服务器发布,就会出现问题,考虑是Tomca ...

  5. Cannot create JDBC driver of class '' for connect URL 'jdbc:mysql://127.0.0.1:3306/test'

    原来的配置如下: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http ...

  6. JNDI学习总结(一)——JNDI数据源的配置

    一.数据源的由来 在Java开发中,使用JDBC操作数据库的四个步骤如下:   ①加载数据库驱动程序(Class.forName("数据库驱动类");) ②连接数据库(Connec ...

  7. JNDI数据源的配置

    一.数据源的由来 在Java开发中,使用JDBC操作数据库的四个步骤如下:   ①加载数据库驱动程序(Class.forName("数据库驱动类");)   ②连接数据库(Conn ...

  8. JNDI学习总结(一)——JNDI数据源的配置(转)

    一.数据源的由来 在Java开发中,使用JDBC操作数据库的四个步骤如下:   ①加载数据库驱动程序(Class.forName("数据库驱动类");)   ②连接数据库(Conn ...

  9. JNDI学习总结(2)——JNDI数据源的配置

    一.数据源的由来 在Java开发中,使用JDBC操作数据库的四个步骤如下:   ①加载数据库驱动程序(Class.forName("数据库驱动类");)    ②连接数据库(Con ...

随机推荐

  1. POJ1904 King's Quest(完备匹配可行边:强连通分量)

    题目大概就是说给一张二分图以及它的一个完备匹配,现在问X部的各个点可以与Y部那些些点匹配,使得X部其余点都能找到完备匹配. 枚举然后匹配,当然不行,会超时. 这题的解法是,在二分图基础上建一个有向图: ...

  2. unity MenuAnim.MoveTo

    移动函数,第一个参数是gameobject,第二个参数是pos,第三个参数是时间,第四个参数延迟 MenuAnim.MoveTo(title, new Vector3(1, 0.7f, 0), 0.5 ...

  3. BZOJ3346 : Ural1811 Dual Sim Phone

    首先将边进行去重,那么有$n\geq\sqrt{m}$. 然后二分答案,转化为判定是否存在两个点它们的出边集合的并集为全集. 那么这两个点必然满足$deg_x+deg_y\geq n$. 不妨设$de ...

  4. 使用linux命令行配置无线网链接

    1. 需安装wpa_supplicant https://wiki.archlinux.org/index.php/WPA_Supplicant_%28%E7%AE%80%E4%BD%93%E4%B8 ...

  5. Node.js -- Router模块中有一个param方法

    这段时间一直有在看Express框架的API,最近刚看到Router,以下是我认为需要注意的地方: Router模块中有一个param方法,刚开始看得有点模糊,官网大概是这么描述的: 1 Map lo ...

  6. CSS抗锯齿 font-smoothing 属性介绍

    CSS3里面加入了一个“-webkit-font-smoothing”属性. 这个属性可以使页面上的字体抗锯齿,使用后字体看起来会更清晰舒服. 加上之后就顿时感觉页面小清晰了. 淘宝也在用哦! 它有三 ...

  7. ACM: 强化训练-Roads in the North-BFS-树的直径裸题

    Roads in the North Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu De ...

  8. linux命令之 top, free,ps

    linux终端查看cpu和内存使用情况 t一.op进入全屏实时系统资源使用信息查看 PID:进程的ID USER:进程所有者 PR:进程的优先级别,越小越优先被执行 NInice:值 VIRT:进程占 ...

  9. GSM 短信相关AT指令(转)

    // AT+CSMS 选择消息业务AT+CSMS=0 // SMS 的AT 命令兼容GSM 07.05 Phase 2AT+CSMS=1 // SMS 的AT 命令兼容GSM 07.05 Phase ...

  10. PHP 解决nginx 用file_get_content 问题

    $my_curl = curl_init(); //初始化一个curl对象 curl_setopt($my_curl, CURLOPT_URL, "http://www.webjoy.net ...