我遇到这个问题比较繁琐web.xml listener
package com.domain;import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;import javax.naming.Context;
import javax.sql.DataSource;
public  class ConnDB { private static DataSource ds;
private static Context context;
public static Context getContext() {
return context;
}
public static void setContext(Context context) {
ConnDB.context = context;
}
public static DataSource getDs() {
return ds;
}
public static void setDs(DataSource ds) {
ConnDB.ds = ds;
}
private Connection conn;
private Statement sta;
private ResultSet rs;
boolean flag = false;
public Connection getConn()  { try {
System.out.println(ConnDB.getDs());
this.conn=ConnDB.getDs().getConnection();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

return conn;
}
//查询
public ResultSet executeQuery(String sql) {
this.getConn();
try {
this.sta = this.conn.createStatement();
this.rs = sta.executeQuery(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return rs;
}
//更改
public boolean executeUpdate(String sql){
this.getConn();
try {
this.sta = conn.createStatement();
int i = sta.executeUpdate(sql);
if(i>0){
flag = true;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return flag;
} //关闭连接
public void getClose(){
try {
if(rs!=null)
rs.close();
if(sta!=null)
    sta.close();
if(conn!=null||!conn.isClosed())
conn.close(); } catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}数据库链接类
package com.domain;import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;import javax.naming.Context;
import javax.sql.DataSource;
public  class ConnDB { private static DataSource ds;
private static Context context;
public static Context getContext() {
return context;
}
public static void setContext(Context context) {
ConnDB.context = context;
}
public static DataSource getDs() {
return ds;
}
public static void setDs(DataSource ds) {
ConnDB.ds = ds;
}
private Connection conn;
private Statement sta;
private ResultSet rs;
boolean flag = false;
public Connection getConn()  { try {
System.out.println(ConnDB.getDs());
this.conn=ConnDB.getDs().getConnection();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

return conn;
}
//查询
public ResultSet executeQuery(String sql) {
this.getConn();
try {
this.sta = this.conn.createStatement();
this.rs = sta.executeQuery(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return rs;
}
//更改
public boolean executeUpdate(String sql){
this.getConn();
try {
this.sta = conn.createStatement();
int i = sta.executeUpdate(sql);
if(i>0){
flag = true;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return flag;
} //关闭连接
public void getClose(){
try {
if(rs!=null)
rs.close();
if(sta!=null)
    sta.close();
if(conn!=null||!conn.isClosed())
conn.close(); } catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}局部数据源<?xml version="1.0" encoding="UTF-8"?>
   <Context>
<Resource 
name="xuning" 
type="javax.sql.DataSource" 
driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
url="jdbc:microsoft:sqlserver://PC-201002061027\\中国在线:1433;databasename=word1"
username="sa"
password="sa"
maxActive="50"
maxIdle="20"
maxWait="5000"
>
</Resource>
   </Context>
web.xml
 <listener>
  <listener-class>com.domain.ContextListener</listener-class>
 </listener>jsp调用                           
                           ConnDB conn=new ConnDB();
    Connection c=conn.getConn();
    response.getWriter().println("成功链接");
    response.getWriter().println();
    conn.getClose();为什么这样不出错呢 ConnDB conn=new ConnDB(); 重新定义了一个类,里面的datasouce,context都为空,问什么还能获取到连接而不出错呢?