这次做博客系统的时候,觉得开始用连接池。可是当我把所有的配置都配置好后,开始验证的时候,就出现了一系列的问题,其中一个最让我纠结的文件就是这个javax.naming.NoInitialContextException。这是尼玛错误??纠结了我起码三个小时都没有解决,哎。。。悲剧!!!上网查资料,到论坛上提问,都没有解决!!!
等过了一会儿,我突然脑中灵光一闪,既然java代码中不可以,那jsp中呢??等我在jsp中尝试的时候又遇到了Cannot load JDBC driver class 'com.microsoft.sqlserver.jdbc.SQLServerDriver'这个错误??为什么找不到驱动??我这里明明已经把该驱动复制到WEB-INF/lib中了啊??为什么还有错误呢??想不通!!然后又百度??找到了答案,要把该驱动复制到tomcat目录的lib下!!哎。。终于可以了!!感谢上帝!!感谢百度!!!!
下面是关于在 tomcat 6.0中的使用连接池的相关的配置!!!
一般可以这三个文件中可以配置:tomcat目录下的conf/context.xml、server.xml和webapps/app../META-INF/context.xml中进行配置:
<Context reloadable="true"> <WatchedResource>WEB-INF/web.xml</WatchedResource> <Resource name="jdbc/server" auth="Container" type="javax.sql.DataSource" driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" url="jdbc:sqlserver://localhost:1433;databaseName=blog" username="sa" password="SQL2005" maxActive="100" maxIdle="30" maxWait="10000" /> </Context>
然后是web.xml中的配置:
<resource-ref> <description>DBConnection</description> <res-ref-name>jdbc/server</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref>
注意:在web.xml中的<res-ref-name>中的值要和Resource中的name的名字一样
最后是测试代码了:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@page import="java.sql.*"%> <%@page import="javax.naming.*"%> <%@page import="javax.sql.DataSource"%> <html> <head> <title>Tomcat Connection Pool Test</title> </head> <body> <% try { Context ctx = new InitialContext(); Context envContext = (Context) ctx.lookup("java:/comp/env"); DataSource ds = (DataSource) envContext.lookup("jdbc/server"); Connection conn = ds.getConnection(); out.println(conn); conn.close(); } catch (NamingException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } %> </body> </html>由于在Tomcat中配置了数据源,可以通过(DataSource)envCtx.lookup(''java:/comp/env/jdbc")来查找这个资料源。查找到这个资料源,就可以通过Connection conn = ds.getConnection()的方法来获得一个到数据库的连接。
在这里测试代码一定要在jsp中使用
同时并在tomcat的lib下和WebRoot/WEB-INF/lib下加入上驱动文件
Tomcat配置时连接池驱动包必须放在tomcat目录下的lib里。这是因为Tomcat连接池是在Tomcat启动时就创建了,那里还没有加载项目里的驱动包。