第二次配JNDI 报了个让人疯狂了三小时的错误 麻烦高手给瞅瞅大概功能就是 使用JNDI 获取 数据源/*
* dong.jndi.GetDataBean.java
* 功能:使用JNDI获取数据源
*
* Cannot create JDBC driver of class '' for connect URL 'jdbc:sqlserver://localhost:1433;DataBaseName=restrant' 数据库异常
*/
package dong.jndi;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.*;// 导入使用JNDI和数据源所需要的包
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;import ch03.FoodBean;public class GetDataBean {
private Connection connection; private PreparedStatement titlesQuery; private ResultSet results; // 返回FoodBeans列表
public List getFoods() { List foodsList = new ArrayList(); // 获取餐品列表
try {
// 用JNDI读取 tomcat安装目录/conf/context.xml文件中的数据源
Context ic = new InitialContext();
DataSource source = (DataSource) ic
.lookup("java:comp/env/jdbc/restrant"); // 通过JNDI读取的数据源建立数据库连接
connection = source.getConnection();
titlesQuery = connection
.prepareStatement("SELECT foodID, foodName, re, "
+ "foodPrice, description, foodImage "
+ "FROM foodInfo ORDER BY foodID");
ResultSet results = titlesQuery.executeQuery(); // 读取行数据
while (results.next()) {
FoodBean food = new FoodBean(); food.setFoodId(results.getString("foodID"));
food.setFoodName(results.getString("foodName"));
food.setRe(results.getString("re"));
food.setFoodPrice(results.getDouble("foodPrice"));
food.setDescription(results.getString("description"));
food.setFoodImage(results.getString("foodImage")); foodsList.add(food);
}
} // 处理数据库异常
catch (SQLException exception) {
System.out.println(exception.getMessage() +" 数据库异常");
exception.printStackTrace();
} // 处理JNDI查找异常
catch (NamingException namingException) {
System.out.println("JNDI " + namingException.getMessage());
namingException.printStackTrace();
}
// 释放资源
finally {
// 关闭结果集
try {
if (results != null) {
results.close();
results = null;
}
// 处理结果集关闭异常
} catch (SQLException e) {
e.printStackTrace();
}
// 关闭数据库连接
try {
if (connection != null && (!connection.isClosed())) {
connection.close();
}
// 处理数据库连接关闭异常
} catch (SQLException sqlEx) {
sqlEx.printStackTrace();
}
}
return foodsList; }
}Web-INF 下 web.xml :
<?xml version="1.0" encoding="UTF-8"?>
<web-app 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">
<servlet>
<description>描述</description>
<display-name>显示的名字</display-name>
<!-- servlet-name要与下面servlet-mapping下的servlet-name保持一致 -->
<servlet-name>Welcome</servlet-name>
<!-- servlet-class对应着servlet类文件在程序中的位置 -->
<servlet-class>ch02.Welcome</servlet-class>
</servlet>
<servlet>
<description>描述</description>
<display-name>显示的名字</display-name>
<servlet-name>AddFoodToCart</servlet-name>
<servlet-class>ch03.AddFoodToCart</servlet-class>
</servlet>
<servlet>
<description>描述</description>
<display-name>显示的名字</display-name>
<servlet-name>OrderServlet</servlet-name>
<servlet-class>ch03.OrderServlet</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>Welcome</servlet-name>
<!-- url-pattern设定当前Servlet在浏览器运行的url -->
<url-pattern>/Welcome</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AddFoodToCart</servlet-name>
<url-pattern>/servlet/AddFoodToCart</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>OrderServlet</servlet-name>
<url-pattern>/servlet/OrderServlet</url-pattern>
</servlet-mapping>
<resource-ref>
<res-ref-name>jdbc/restrant</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<welcome-file-list>
<welcome-file>/ch06/login.jsp</welcome-file>
</welcome-file-list>
</web-app>Tomcat 6.0 conf下 context.xml:
<Resource name="jdbc/restrant"
auth="Container" type="javax.sql.DataSource" maxActive="100" maxldle="30"
maxWait="1000" username="sa" password="0123"
diverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://localhost:1433;DataBaseName=restrant"/>lib下 加 sql server 2005数据库驱动 正常高手期待中。。
* dong.jndi.GetDataBean.java
* 功能:使用JNDI获取数据源
*
* Cannot create JDBC driver of class '' for connect URL 'jdbc:sqlserver://localhost:1433;DataBaseName=restrant' 数据库异常
*/
package dong.jndi;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.*;// 导入使用JNDI和数据源所需要的包
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;import ch03.FoodBean;public class GetDataBean {
private Connection connection; private PreparedStatement titlesQuery; private ResultSet results; // 返回FoodBeans列表
public List getFoods() { List foodsList = new ArrayList(); // 获取餐品列表
try {
// 用JNDI读取 tomcat安装目录/conf/context.xml文件中的数据源
Context ic = new InitialContext();
DataSource source = (DataSource) ic
.lookup("java:comp/env/jdbc/restrant"); // 通过JNDI读取的数据源建立数据库连接
connection = source.getConnection();
titlesQuery = connection
.prepareStatement("SELECT foodID, foodName, re, "
+ "foodPrice, description, foodImage "
+ "FROM foodInfo ORDER BY foodID");
ResultSet results = titlesQuery.executeQuery(); // 读取行数据
while (results.next()) {
FoodBean food = new FoodBean(); food.setFoodId(results.getString("foodID"));
food.setFoodName(results.getString("foodName"));
food.setRe(results.getString("re"));
food.setFoodPrice(results.getDouble("foodPrice"));
food.setDescription(results.getString("description"));
food.setFoodImage(results.getString("foodImage")); foodsList.add(food);
}
} // 处理数据库异常
catch (SQLException exception) {
System.out.println(exception.getMessage() +" 数据库异常");
exception.printStackTrace();
} // 处理JNDI查找异常
catch (NamingException namingException) {
System.out.println("JNDI " + namingException.getMessage());
namingException.printStackTrace();
}
// 释放资源
finally {
// 关闭结果集
try {
if (results != null) {
results.close();
results = null;
}
// 处理结果集关闭异常
} catch (SQLException e) {
e.printStackTrace();
}
// 关闭数据库连接
try {
if (connection != null && (!connection.isClosed())) {
connection.close();
}
// 处理数据库连接关闭异常
} catch (SQLException sqlEx) {
sqlEx.printStackTrace();
}
}
return foodsList; }
}Web-INF 下 web.xml :
<?xml version="1.0" encoding="UTF-8"?>
<web-app 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">
<servlet>
<description>描述</description>
<display-name>显示的名字</display-name>
<!-- servlet-name要与下面servlet-mapping下的servlet-name保持一致 -->
<servlet-name>Welcome</servlet-name>
<!-- servlet-class对应着servlet类文件在程序中的位置 -->
<servlet-class>ch02.Welcome</servlet-class>
</servlet>
<servlet>
<description>描述</description>
<display-name>显示的名字</display-name>
<servlet-name>AddFoodToCart</servlet-name>
<servlet-class>ch03.AddFoodToCart</servlet-class>
</servlet>
<servlet>
<description>描述</description>
<display-name>显示的名字</display-name>
<servlet-name>OrderServlet</servlet-name>
<servlet-class>ch03.OrderServlet</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>Welcome</servlet-name>
<!-- url-pattern设定当前Servlet在浏览器运行的url -->
<url-pattern>/Welcome</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AddFoodToCart</servlet-name>
<url-pattern>/servlet/AddFoodToCart</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>OrderServlet</servlet-name>
<url-pattern>/servlet/OrderServlet</url-pattern>
</servlet-mapping>
<resource-ref>
<res-ref-name>jdbc/restrant</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<welcome-file-list>
<welcome-file>/ch06/login.jsp</welcome-file>
</welcome-file-list>
</web-app>Tomcat 6.0 conf下 context.xml:
<Resource name="jdbc/restrant"
auth="Container" type="javax.sql.DataSource" maxActive="100" maxldle="30"
maxWait="1000" username="sa" password="0123"
diverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://localhost:1433;DataBaseName=restrant"/>lib下 加 sql server 2005数据库驱动 正常高手期待中。。
Cannot create JDBC driver of class '' for connect URL 'jdbc:sqlserver://localhost:1433;DataBaseName=restrant' 数据库异常
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'jdbc:sqlserver://localhost:1433;DataBaseName=restrant'
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1150)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:880)
at ch06.jndi.GetDataBean.getFoods(GetDataBean.java:45)
at org.apache.jsp.ch06.show_jsp._jspService(show_jsp.java:62)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:630)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
at ch02.Welcome.doGet(Welcome.java:52)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
Caused by: java.sql.SQLException: No suitable driver
at java.sql.DriverManager.getDriver(Unknown Source)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1143)
... 30 more
信息: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: D:\myeclipse\binary\com.sun.java.jdk.win32.x86_1.6.0.013\bin;D:\tomcat\Tomcat 6.0\bin
2011-7-30 2:40:06 org.apache.coyote.http11.Http11Protocol init
信息: Initializing Coyote HTTP/1.1 on http-8080
2011-7-30 2:40:06 org.apache.catalina.startup.Catalina load
信息: Initialization processed in 672 ms
2011-7-30 2:40:06 org.apache.catalina.core.StandardService start
信息: Starting service Catalina
2011-7-30 2:40:06 org.apache.catalina.core.StandardEngine start
信息: Starting Servlet Engine: Apache Tomcat/6.0.16
log4j:WARN No appenders could be found for logger (org.apache.struts.util.PropertyMessageResources).
log4j:WARN Please initialize the log4j system properly.
2011-7-30 2:40:11 org.apache.coyote.http11.Http11Protocol start
信息: Starting Coyote HTTP/1.1 on http-8080
2011-7-30 2:40:11 org.apache.jk.common.ChannelSocket init
信息: JK: ajp13 listening on /0.0.0.0:8009
2011-7-30 2:40:11 org.apache.jk.server.JkMain start
信息: Jk running ID=0 time=0/15 config=null
2011-7-30 2:40:11 org.apache.catalina.startup.Catalina start
信息: Server startup in 4962 ms
2011-7-30 2:43:32 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet jsp threw exception
java.lang.NullPointerException
at sun.jdbc.odbc.JdbcOdbcDriver.getProtocol(JdbcOdbcDriver.java:507)
at sun.jdbc.odbc.JdbcOdbcDriver.knownURL(JdbcOdbcDriver.java:476)
at sun.jdbc.odbc.JdbcOdbcDriver.acceptsURL(JdbcOdbcDriver.java:307)
at java.sql.DriverManager.getDriver(DriverManager.java:253)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1143)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:880)
at org.apache.jsp.index_jsp._jspService(index_jsp.java:79)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)这种错怎么解决了
type="javax.sql.DataSource" maxActive="100"
maxIdle="30" maxWait="10000" username="sa"
password="123"
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://localhost:1433;DatabaseName=epai"/>
<resource-ref>
<res-ref-name>jdbc/epai</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>