JDBCUtil.java 文件package com.accp.util;import java.sql.Connection;import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
public class JDBCUtil {
private static JDBCUtil instance;
private JDBCUtil(){ 
}public static synchronized JDBCUtil getInstance(){
if (instance == null) {
instance = new JDBCUtil();
}
return instance;
}public Connection openConnection() throws Exception{
Context context=new InitialContext();
DataSource ds=(DataSource)context.lookup("java:comp/env/jdbc/myPool");
Connection conn=ds.getConnection();
return conn;
}
}
TestServlet.java文件package com.accp.servlet;import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import com.accp.util.JDBCUtil;public class TestServlet extends HttpServlet {public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Connection con =null;
try {
JDBCUtil util = JDBCUtil.getInstance();con = util.openConnection();
if (con != null) {
System.out.println("SUCCESS!");
} else {
System.out.println("ERROR!");
}
} catch (Exception e) {
e.printStackTrace();}
finally
{
try {
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}}}context.xml 配置文件
<Resource
name="jdbc/myPool"
type="javax.sql.DataSource"
auth="Container"
url="jdbc:oracle:thin:@localhost:1521:orcl"
driverClassName="oracle.jdbc.driver.OracleDriver"
username="scott"
password="tiger"
maxActive="10"
maxIdle="2"
maxWait="1000"/>
web.xml配置文件  <servlet>
  <servlet-name>TestServlet</servlet-name>  
  <servlet-class>com.accp.servlet.TestServlet</servlet-class>  
  </servlet>
  <servlet-mapping>
  <servlet-name>TestServlet</servlet-name>  
  <url-pattern>/TestServlet</url-pattern>  
  </servlet-mapping>
报错信息HTTP Status 500 -  --------------------------------------------------------------------------------type Exception reportmessage  description The server encountered an internal error () that prevented it from fulfilling this request.exception  java.lang.NullPointerException
com.accp.servlet.TestServlet.service(TestServlet.java:35)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
note The full stack trace of the root cause is available in the Apache Tomcat/6.0.13 logs.空指针异常,出错信息在TestServlet.jsp的
con.close();
这句。在线等,谢谢!

解决方案 »

  1.   

    显然,你的util.openConnection();
    方法返回的Connection实例为空,导致close的时候抛出空指针异常。
    我看到你的代码里有
    if (con != null) {
    System.out.println("SUCCESS!");
    } else {
    System.out.println("ERROR!");
    }
    的判断,先看看是不是成功初始化了conn,如果没有,就是从连接池获取数据源的时候出错了。
    再详细看看异常stackTrace,应该可以找到问题