我的tomcat5.0下的server.xml文件配置如下:(我数据库名为:jspdev,工程名为:Test)
<Context path="/Test" docBase="Test" debug="0" reloadable="true" crossContext="true">
<Resoure name="jdbc/bn" auth="Container" type="javax.sql.DataSource"/>
<ResoureParams name="jdbc/bn">
<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://127.0.0.1:1433;DatabaseName=jspdev</value>
</parameter>
<parameter>
<name>username</name>
<value>bn</value>
</parameter>
<parameter>
<name>password</name>
<value>bn</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>20</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>10</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>-1</value>
</parameter>
</ResoureParams>
</Context>我的测试程序如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page contentType="text/html; charset=gb2312" %>
<%@ page import="javax.naming.Context" %>
<%@ page import="javax.sql.DataSource"%>
<%@ page import="javax.naming.InitialContext"%>
<%@ page import="java.sql.*"%> <%
DataSource ds = null;
try{
Context initCtx = new InitialContext();
System.out.print("aaa");
Context envCtx = (Context) initCtx.lookup("java:comp/env");
//从Context中lookup数据源。
System.out.print("bbb");
ds = (DataSource)envCtx.lookup("jdbc/bn");
System.out.print("ccc");
if(ds!=null)
{
out.println("已经获得DataSource!");
out.println("<br>");
Connection conn = ds.getConnection();
Statement stmt=conn.createStatement();
ResultSet rst=stmt.executeQuery("select * from Book");
out.println("以下是从数据库中读取出来的数据");
while(rst.next())
{
out.println("bookName:"+rst.getString("bookName"));
out.println("<br>");
}
}
else
out.println("连接失败!");
}
catch(Exception ne)
{
out.println(ne);
}
%> 我的问题是:测试程序没有正常运行,我添加的三个打印语句中aaabbb输出了,ccc没输出。抛出的异常是:javax.naming.NameNotFoundException: Name jdbc is not bound in this Context。
请高手指教,到底是怎么了?郁闷中。。
<Context path="/Test" docBase="Test" debug="0" reloadable="true" crossContext="true">
<Resoure name="jdbc/bn" auth="Container" type="javax.sql.DataSource"/>
<ResoureParams name="jdbc/bn">
<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://127.0.0.1:1433;DatabaseName=jspdev</value>
</parameter>
<parameter>
<name>username</name>
<value>bn</value>
</parameter>
<parameter>
<name>password</name>
<value>bn</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>20</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>10</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>-1</value>
</parameter>
</ResoureParams>
</Context>我的测试程序如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page contentType="text/html; charset=gb2312" %>
<%@ page import="javax.naming.Context" %>
<%@ page import="javax.sql.DataSource"%>
<%@ page import="javax.naming.InitialContext"%>
<%@ page import="java.sql.*"%> <%
DataSource ds = null;
try{
Context initCtx = new InitialContext();
System.out.print("aaa");
Context envCtx = (Context) initCtx.lookup("java:comp/env");
//从Context中lookup数据源。
System.out.print("bbb");
ds = (DataSource)envCtx.lookup("jdbc/bn");
System.out.print("ccc");
if(ds!=null)
{
out.println("已经获得DataSource!");
out.println("<br>");
Connection conn = ds.getConnection();
Statement stmt=conn.createStatement();
ResultSet rst=stmt.executeQuery("select * from Book");
out.println("以下是从数据库中读取出来的数据");
while(rst.next())
{
out.println("bookName:"+rst.getString("bookName"));
out.println("<br>");
}
}
else
out.println("连接失败!");
}
catch(Exception ne)
{
out.println(ne);
}
%> 我的问题是:测试程序没有正常运行,我添加的三个打印语句中aaabbb输出了,ccc没输出。抛出的异常是:javax.naming.NameNotFoundException: Name jdbc is not bound in this Context。
请高手指教,到底是怎么了?郁闷中。。
解决方案 »
- tomcat的filter,完全新手求解答
- ibatis Unable to translate SQLException with SQL state 'null', error code '0, will now try the fallback translator
- 一个简单的乱码问题。大家来讨论一下
- javax.servlet.jsp.JspException:请问大家是怎么回事?
- JSF高级编程问题
- 谁能把这个视频下载下来??
- 帮忙看这段代码有什么安全问题没有.
- 留言簿的BUG,请高手明指,谢谢,新人感激不尽!
- mysql读写分离
- 主动刷新页面的话 是执行什么操作?? 重新请求Action吗?如果有表单数据也要重新提交一遍吗?
- 如何能够在action类中获取国际化信息
- 急~~数据表的求和问题!!
2、WEB-INF目录下的web.xml文件里在</web-app>之前加上
<resource-ref>
<description>Sql Server Datasource</description>
<res-ref-name>jdbc/bn</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<Context>
<ResourceLink global="jdbc/bn" name="jdbc/bn" type="javax.sql.DataSource"/>
</Context>
我确定我的sql server 2000已经启动,tomcat也重起了。数据库是jspdev 访问名是bn 密码是bn
都没错啊。难道还要在server.xml里面再设置点什么吗?在线等。大哥们支招 啊。
查找数据源就用:InitialContext ctx=new InitialContext();ds=(DataSource)ctx.lookup("java:comp/env/jdbc/bn");//这就是根据名字来查找数据源Connection conn = ds.getConnection();
<ResoureParams <ResourceParams
放到我自己的Tomcat测试,才发现你是这么不细心。
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/bn</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
我已经加到web.xml里面了。我在%TOMCAT_HOME%\conf\Catalina\localhost下,没有找到我的Test.xml文件,只有三个文件admin.xml balancer.xml manager.xml 。怎么回事啊?我用的是sql server2000,下面这句话是不是要改点什么?
<ResourceLink name="jdbc/mysql" global="jdbc/mysql" type="javax.sql.DataSourcer"/>
<resource-ref> <description>DB Connection</description> <res-ref-name>jdbc/bn</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref>
回:wsk_228(qing_feng)
谢谢你的批评,我这个人其实还是比较仔细的,你指出了我这个程序至命的错误,我改了之后能成功运行了。在此表示感谢!
getConnection()这一行上呀!?