[返回首页] - [索引页面] - [文章列表]
主题:请问tomcat连接sql server是不是这样连?谢谢!
首先我安装了tomcat和jsdk,访问本地主页时候没有什么问题
接着我从Microsoft那里下载了sql server driver for JDBC ,安装了.
然后我又对server.xml和web.xml进行了配置
接下来测试,访问主页时一样没问题,但是访问testdb.jsp时就出现了问题.说是"cannot get Connection pool"
我好昏!不知怎么办!请高手指教,非常感谢!
回复人:is02hua(萝卜) 一级(初级) 信誉:100 2005-4-9 12:42:15 得分:0
|
| 我对tomcat的配置如下:
将sql server driver for JDBC 安装目录下的3个 *.jar文件拷贝到comcat\commom\lib下面
然后对server.xml添加如下内容:
<Context path="" docBase="ROOT" debug="0" reloadable="true"> <Resource name="jdbc/SqlServerDB" auth="Container" type="javax.sql.DataSource"/> <ResourceParams name="jdbc/SqlServerDB"> <parameter>
<name>factory</name> <value>org.apache.commons.dbcp.BasicDataSourceFactory</value> </parameter> <parameter>
<name>driverClassName</name> <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value> </parameter>
<parameter> <name>url</name> <value>jdbc:microsoft:sqlserver://192.168.1.6:1433;databaseName=pubs</value> </parameter>
//我的登陆用户名为sa,不知此处这样填对否? <parameter> <name>username</name> <value>sa</value> </parameter> //我的登陆密码为空,不知此处这样填对否? <parameter> <name>password</name> <value></value> </parameter> <parameter> <name>maxActive</name> <value>20</value> </parameter> <parameter> <name>maxIdle</name> <value>20</value> </parameter> <parameter> <name>maxWait</name> <value>-1</value> </parameter> </ResourceParams> </Context>
//没有删除example的代码,是否要删除?
web.xml添加代码如下:
<resource-ref> <description>SqlServer Datasource example</description> <res-ref-name>jdbc/SqlServerDB</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref>
结果还是不行,昏死了!麻烦大侠出手,不胜感激!
| | TOP |
回复人:is02hua(萝卜) 一级(初级) 信誉:100 2005-4-9 12:43:52 得分:0
|
| root cause
java.sql.SQLException: cannot get Connection pool. at org.apache.jsp.testdb_jsp._jspService(testdb_jsp.java:74) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:92) at javax.servlet.http.HttpServlet.service(HttpServlet.java:809) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:162) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:240) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:187) at javax.servlet.http.HttpServlet.service(HttpServlet.java:809) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:200) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:146) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:209) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:144) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948) at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2358) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:133) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596) at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:118) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:594) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:116) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:594) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:127) at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948) at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:152) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705) at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683) at java.lang.Thread.run(Unknown Source)
| | TOP |
回复人:jFresH_MaN(TM) 两星(中级) 信誉:158 2005-4-9 12:46:29 得分:5
|
| 配置没问题 代码中这样写 Context initContext = new InitialContext(); Context envContext = (Context)initContext.lookup("java:/comp/env"); DataSource ds = (DataSource)envContext.lookup("jdbc/SqlServerDB"); Connection conn = ds.getConnection();
| | TOP |
回复人:is02hua(萝卜) 一级(初级) 信誉:100 2005-4-9 12:57:19 得分:0
|
| jFresH_MaN(TM) 我的代码是修改成你的样子,好像不行,不知我有没有写错
我原来的代码则是这样写的.
<%@ page contentType="text/html;charset=GB2312"%> <%@ page language= "java"%> <%@ page import= "java.sql.* "%> <%@ page import= "javax.naming.* "%>
<% try{ Context initCtx = new InitialContext(); Context envContext = (Context) initCtx.lookup("java:comp/env");
//获取连接池对象 Object obj = (Object) envContext.lookup("jdbc/SqlServerDB"); //DataSource ds= (DataSource)envContext.lookup("jdbc/SqlServerDB"); //Connection conn = ds.getConnection(); //类型转换 javax.sql.DataSource ds = (javax.sql.DataSource)obj; Connection conn = ds.getConnection(); Statement stmt = conn.createStatement(); //String strSql = " insert into test(id,name) values('00001','fany')"; String strSql; //stmt.executeUpdate(strSql); strSql = " select id,name from test "; ResultSet rs = stmt.executeQuery(strSql); if(rs.next()){ out.println(rs.getString(1)); out.println(rs.getString(2)); }
}catch(Exception ex){ ex.printStackTrace(); throw new SQLException("cannot get Connection pool."); }
%>
| | TOP |
回复人:jianghuxing(回头看看原来我一无所有) 四级(中级) 信誉:100 2005-4-9 13:01:55 得分:5
|
| Context initContext = new InitialContext(); Context envContext = (Context)initContext.lookup("java:/comp/env"); DataSource ds = (DataSource)envContext.lookup("jdbc/SqlServerDB"); Connection conn = ds.getConnection();
| | TOP |
回复人:jFresH_MaN(TM) 两星(中级) 信誉:158 2005-4-9 13:02:26 得分:10
|
| 如果你的web项目是部署在webapps里面的 你就要把<Resource>写在 <Host name="localhost" debug="0" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> 后面
| | TOP |
回复人:zhutouzip(Speak out!-shyboy) 一星(中级) 信誉:112 2005-4-9 13:07:35 得分:5
|
| 在web.xml中加入: <resource-ref> <description>DB Connection</description> <res-ref-name>jdbc/SqlServerDB</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref>
然后再在jsp中这样用: Context initContext = new InitialContext(); Context envContext = (Context)initContext.lookup("java:/comp/env"); DataSource ds = (DataSource)envContext.lookup("jdbc/SqlServerDB"); Connection conn = ds.getConnection();
| | TOP |
回复人:zhutouzip(Speak out!-shyboy) 一星(中级) 信誉:112 2005-4-9 13:12:35 得分:3
|
| 没看到,原来楼主是这样的! 你看看你的sqlserver的sa用户密码是否为空,最好设置一个密码吧! 我的配置你可以参考一下: <Context path="/DBTest" docBase="DBTest" debug="5" reloadable="true" crossContext="true">
<Logger className="org.apache.catalina.logger.FileLogger" prefix="localhost_DBTest_log." suffix=".txt" timestamp="true"/>
<Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/TestDB"> <parameter> <name>factory</name> <value>org.apache.commons.dbcp.BasicDataSourceFactory</value> </parameter>
<!-- Maximum number of dB connections in pool. Make sure you configure your mysqld max_connections large enough to handle all of your db connections. Set to 0 for no limit. --> <parameter> <name>maxActive</name> <value>100</value> </parameter>
<!-- Maximum number of idle dB connections to retain in pool. Set to 0 for no limit. --> <parameter> <name>maxIdle</name> <value>30</value> </parameter>
<!-- Maximum time to wait for a dB connection to become available in ms, in this example 10 seconds. An Exception is thrown if this timeout is exceeded. Set to -1 to wait indefinitely. --> <parameter> <name>maxWait</name> <value>10000</value> </parameter>
<parameter> <name>username</name> <value>sa</value> </parameter> <parameter> <name>password</name> <value>12388321</value> </parameter>
<parameter> <name>driverClassName</name> <value>org.gjt.mm.mysql.Driver</value> </parameter> --> <parameter> <name>driverClassName</name> <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value> </parameter> <!-- The JDBC connection url for connecting to your MySQL dB. The autoReconnect=true argument to the url makes sure that the mm.mysql JDBC Driver will automatically reconnect if mysqld closed the connection. mysqld by default closes idle connections after 8 hours. --> <parameter> <name>url</name> <value>jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mywebdata1</value> </parameter> </ResourceParams> </Context>
| | TOP |
回复人:jFresH_MaN(TM) 两星(中级) 信誉:158 2005-4-9 13:12:37 得分:10
|
| 最简单的办法就是修改server.xml <GlobalNamingResources>
<Resource name="jdbc/SqlServerDB" auth="Container" type="javax.sql.DataSource"/> <ResourceParams name="jdbc/SqlServerDB"> <parameter>
<name>factory</name> <value>org.apache.commons.dbcp.BasicDataSourceFactory</value> </parameter> <parameter>
<name>driverClassName</name> <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value> </parameter>
<parameter> <name>url</name> <value>jdbc:microsoft:sqlserver://192.168.1.6:1433;databaseName=pubs</value> </parameter>
//我的登陆用户名为sa,不知此处这样填对否? <parameter> <name>username</name> <value>sa</value> </parameter> //我的登陆密码为空,不知此处这样填对否? <parameter> <name>password</name> <value></value> </parameter> <parameter> <name>maxActive</name> <value>20</value> </parameter> <parameter> <name>maxIdle</name> <value>20</value> </parameter> <parameter> <name>maxWait</name> <value>-1</value> </parameter> </ResourceParams>
</GlobalNamingResources>
当然 web.xml里面仍然需要 <resource-ref>
| | TOP |
回复人:is02hua(萝卜) 一级(初级) 信誉:100 2005-4-9 13:16:20 得分:0
|
| 我的web项目是部署在webapps里面的.
你是说server.xml这部分代码
<Resource name="jdbc/SqlServerDB" auth="Container" type="javax.sql.DataSource"/> <ResourceParams name="jdbc/SqlServerDB"> <parameter>
<name>factory</name> <value>org.apache.commons.dbcp.BasicDataSourceFactory</value> </parameter> <parameter>
<name>driverClassName</name> <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value> </parameter>
<parameter> <name>url</name> <value>jdbc:microsoft:sqlserver://192.168.1.6:1433;databaseName=pubs</value> </parameter>
<parameter> <name>username</name> <value>sa</value> </parameter> <parameter> <name>password</name> <value>1111</value> </parameter> <parameter> <name>maxActive</name> <value>20</value> </parameter> <parameter> <name>maxIdle</name> <value>20</value> </parameter> <parameter> <name>maxWait</name> <value>-1</value> </parameter> </ResourceParams> </Context>
放在xml这部分代码
<!-- Define the default virtual host --> <Host name="localhost" debug="0" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false" >
之后吗?
我这样放了,还是不行.
我不知有没有理解错?
盼答复!谢谢!!!
| | TOP |
回复人:jFresH_MaN(TM) 两星(中级) 信誉:158 2005-4-9 13:20:14 得分:10
|
| <GlobalNamingResources>
| | TOP |
回复人:is02hua(萝卜) 一级(初级) 信誉:100 2005-4-9 13:23:36 得分:0
|
| 我的 <resource-ref> 放在</web-app>之前, </welcome-file-list>之后,不知对否?
<resource-ref> <description>SqlServer Datasource example</description> <res-ref-name>jdbc/SqlServerDB</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref>
| | TOP |
回复人:zhutouzip(Speak out!-shyboy) 一星(中级) 信誉:112 2005-4-9 13:29:31 得分:2
|
| <name>maxWait</name> <value>-1</value> 把这个value值改大一点!试试
| | TOP |
回复人:is02hua(萝卜) 一级(初级) 信誉:100 2005-4-9 13:31:29 得分:0
|
| jFresH_MaN(TM)大哥,我用了二种方法
1.把我们的代码剪切到<GlobalNamingResources>中间
<GlobalNamingResources>
<!-- Test entry for demonstration purposes --> <Environment name="simpleValue" type="java.lang.Integer" value="30"/>
<!-- Editable user database that can also be used by UserDatabaseRealm to authenticate users --> <Resource name="UserDatabase" auth="Container" type="org.apache.catalina.UserDatabase" description="User database that can be updated and saved"> </Resource> <ResourceParams name="UserDatabase"> <parameter> <name>factory</name> <value>org.apache.catalina.users.MemoryUserDatabaseFactory</value> </parameter> <parameter> <name>pathname</name> <value>conf/tomcat-users.xml</value> </parameter> </ResourceParams> <Host name="localhost" debug="0" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false" >
<Resource name="jdbc/SqlServerDB" auth="Container" type="javax.sql.DataSource"/> <ResourceParams name="jdbc/SqlServerDB"> <parameter>
<name>factory</name> <value>org.apache.commons.dbcp.BasicDataSourceFactory</value> </parameter> <parameter>
<name>driverClassName</name> <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value> </parameter>
<parameter> <name>url</name> <value>jdbc:microsoft:sqlserver://192.168.1.6:1433;databaseName=pubs</value> </parameter>
<parameter> <name>username</name> <value>sa</value> </parameter> <parameter> <name>password</name> <value>1111</value> </parameter> <parameter> <name>maxActive</name> <value>20</value> </parameter> <parameter> <name>maxIdle</name> <value>20</value> </parameter> <parameter> <name>maxWait</name> <value>-1</value> </parameter> </ResourceParams> </Context>
</GlobalNamingResources>
2.在我们的代码前面和后面添加<GlobalNamingResources>和</GlobalNamingResources>,都不行,不知怎么办了?
真的麻烦你了!非常感谢!!
| | TOP |
回复人:jFresH_MaN(TM) 两星(中级) 信誉:158 2005-4-9 13:32:44 得分:10
|
| 现在是什么异常? 还是java.sql.SQLException: cannot get Connection pool.?
| | TOP |
回复人:is02hua(萝卜) 一级(初级) 信誉:100 2005-4-9 13:33:19 得分:0
|
| zhutouzip(Speak out!-shyboy) :
多谢!
不过我改大了,也是不行.
可否再帮忙查一下?
| | TOP |
回复人:is02hua(萝卜) 一级(初级) 信誉:100 2005-4-9 13:34:07 得分:0
|
| jFresH_MaN(TM)大哥 :
现在是什么异常? 还是java.sql.SQLException: cannot get Connection pool.?
----------------------------------
是啊
| | TOP |
回复人:jFresH_MaN(TM) 两星(中级) 信誉:158 2005-4-9 13:35:06 得分:10
|
| <GlobalNamingResources> 中间只要<Resource>和<Resource-Params> 你别把<host>还有最后的</contex>写进去啊 这样tomcat启动解析就有问题
| | TOP |
回复人:jFresH_MaN(TM) 两星(中级) 信誉:158 2005-4-9 13:37:12 得分:10
|
| 是<ResourceParams>
你重新启动一下tomcat 我觉得不可能啊 我这样为什么能行 我已经仔细看了你的配置了
| | TOP |
回复人:is02hua(萝卜) 一级(初级) 信誉:100 2005-4-9 13:50:46 得分:0
|
| 我重新启动了一下,发现那个tomcat没有写"服务器已成功启动"而是一列英文,闪了一下就过去了,不知有没有问题??
还是老样子.
| | TOP |
回复人:is02hua(萝卜) 一级(初级) 信誉:100 2005-4-9 13:58:55 得分:0
|
| jFresH_MaN(TM):
我重新安装和配置一下,再向你请教吧,非常感谢你的帮忙!!
| | TOP |
回复人:temptation81(向左.向右.向前) 一级(初级) 信誉:100 2005-4-9 14:00:01 得分:5
|
| 好象大家都把注意力集中在配置文件上了,我有个比较笨的办法,那就是在配置环境变量classpath时,把你的sqlserver驱动一起加在classpath后面就可以了 或者也可以把这些驱动压缩文件直接放在tomcat/common/bin下(具体路径我记的不太清楚了,只要放在bin目录下就可以了)
| | TOP |
回复人:is02hua(萝卜) 一级(初级) 信誉:100 2005-4-9 14:15:30 得分:0
|
| jFresH_MaN(TM):
你好!
我重新安装了一遍,tomcat启动后能够看到一个dos界面,我便用test.jsp连接本地服务器,结果tomcat的dos界面说No suitable driver.
我现在该怎么办呢?我已经将D:\Program Files\Microsoft SQL Server 2000 Driver for JDBC\lib目录下的jar文件全部拷贝到E:\Program Files\Apache Group\Tomcat 4.1\common\lib里面了啊!
| | TOP |
回复人:jFresH_MaN(TM) 两星(中级) 信誉:158 2005-4-9 14:18:54 得分:15
|
| 呵呵,你的问题比较大啊 这样吧,给我你的QQ,我帮你解决你的问题
| | TOP |
回复人:is02hua(萝卜) 一级(初级) 信誉:100 2005-4-9 14:18:58 得分:0
|
| temptation81(向左.向右.向前):
你说的驱动压缩文件是那些jar文件吗?thx!
| | TOP |
回复人:is02hua(萝卜) 一级(初级) 信誉:100 2005-4-9 14:19:30 得分:0
|
回复人:is02hua(萝卜) 一级(初级) 信誉:100 2005-4-9 22:31:10 得分:0
|
| 解决的办法:
原来是path没有设置,后来在jFresH_MaN(TM)指导下,将path和docBase设置成绝对路径之后,并将一些代码移动到恰当位置,所有问题就都解决了。
jFresH_MaN(TM)的解决方法不仅可以用DriverManage()连接,也可以用连接池连接。
在此再次感谢jFresH_MaN(TM)。
| | TOP |
该问题已经结贴 ,得分记录:jFresH_MaN(5)、jianghuxing(5)、jFresH_MaN(10)、zhutouzip(5)、zhutouzip(3)、jFresH_MaN(10)、jFresH_MaN(10)、zhutouzip(2)、jFresH_MaN(10)、jFresH_MaN(10)、jFresH_MaN(10)、temptation81(5)、jFresH_MaN(15)、
|