使用JNDI连接数据库连接池问题,救命啊!!!!
1、环境:myeclipse9.0tomcat6.0MySQL5.52、在myeclipse里面创建了一个web项目,然后新建了一个JSP文件,代码如下<%@pagela...
1、环境:myeclipse9.0 tomcat6.0 MySQL5.5
2、在myeclipse里面创建了一个web项目,然后新建了一个JSP文件,代码如下
<%@ page language="java" import="java.sql.*,javax.sql.*,javax.naming.*" pageEncoding="GBK"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>数据连接池</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<center>
<%Context ctx=null;
DataSource ds=null;
java.sql.Connection con=null;
Statement stmt=null;
ResultSet rs=null;
try{
ctx=new InitialContext();
Context Envctx = (Context) ctx.lookup("java:comp/env");
ds=(DataSource)Envctx.lookup("dataSource");
con=ds.getConnection();
stmt=con.createStatement();
String sql="select * from student";
rs=stmt.executeQuery(sql);
}catch(SQLException se)
{
se.printStackTrace();
}catch(NamingException ne)
{
ne.printStackTrace();
}
%><br><br><br>
<table border="1" borderColorDark="#ffffec" borderColorLight="#5e5e00"
cellPadding="1" cellPadding="0" width=50%>
<tr><th>学号</th><th>姓名</th><th>年龄</th></tr>
<%
while (rs.next())
{
%>
<tr>
<td><%=rs.getString(1) %></td>
<td><%=rs.getString(2) %></td>
<td><%=rs.getInt(3) %></td>
</tr>
<%
}
rs.close();
stmt.close();
con.close();
%>
</table>
</center>
</body>
</html>
3、tomcat下server.xml的配置如下:
<Context reloadable="true" debug="0">
<Resource name="dataSource" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000" userName="root"
password="123456" driverClassName="org.jgt.mm.mysql.Driver"
url="jdbc:mysql://localhost/test"/>
</Context>
使用MySQL创建的数据库为student.源文件为:
use test;
drop table student;
create table student(sno varchar(10),sname varchar(10),sage int);
insert into student("1001","AAA",21);
4、网上查有人说在tomcat下的web.xml中加入以下配置:
<resource-ref>
<description>DB Connection</description>
<res-ref-name>dataSource</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
但是我加过之后还是不行。。。。
哪位大侠肯帮帮我,好几天了,不知道哪里有错。。。
5错误信息:
exception
org.apache.jasper.JasperException: java.lang.NullPointerException 展开
2、在myeclipse里面创建了一个web项目,然后新建了一个JSP文件,代码如下
<%@ page language="java" import="java.sql.*,javax.sql.*,javax.naming.*" pageEncoding="GBK"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>数据连接池</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<center>
<%Context ctx=null;
DataSource ds=null;
java.sql.Connection con=null;
Statement stmt=null;
ResultSet rs=null;
try{
ctx=new InitialContext();
Context Envctx = (Context) ctx.lookup("java:comp/env");
ds=(DataSource)Envctx.lookup("dataSource");
con=ds.getConnection();
stmt=con.createStatement();
String sql="select * from student";
rs=stmt.executeQuery(sql);
}catch(SQLException se)
{
se.printStackTrace();
}catch(NamingException ne)
{
ne.printStackTrace();
}
%><br><br><br>
<table border="1" borderColorDark="#ffffec" borderColorLight="#5e5e00"
cellPadding="1" cellPadding="0" width=50%>
<tr><th>学号</th><th>姓名</th><th>年龄</th></tr>
<%
while (rs.next())
{
%>
<tr>
<td><%=rs.getString(1) %></td>
<td><%=rs.getString(2) %></td>
<td><%=rs.getInt(3) %></td>
</tr>
<%
}
rs.close();
stmt.close();
con.close();
%>
</table>
</center>
</body>
</html>
3、tomcat下server.xml的配置如下:
<Context reloadable="true" debug="0">
<Resource name="dataSource" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000" userName="root"
password="123456" driverClassName="org.jgt.mm.mysql.Driver"
url="jdbc:mysql://localhost/test"/>
</Context>
使用MySQL创建的数据库为student.源文件为:
use test;
drop table student;
create table student(sno varchar(10),sname varchar(10),sage int);
insert into student("1001","AAA",21);
4、网上查有人说在tomcat下的web.xml中加入以下配置:
<resource-ref>
<description>DB Connection</description>
<res-ref-name>dataSource</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
但是我加过之后还是不行。。。。
哪位大侠肯帮帮我,好几天了,不知道哪里有错。。。
5错误信息:
exception
org.apache.jasper.JasperException: java.lang.NullPointerException 展开
2个回答
展开全部
最起码的是要在web根目录的meta-inf下建立context.xml文件让tomcat启动的时候读取,帮你建立jndi名称到数据源对象的映射啊,
比如说
<Context>
<!-- Default set of monitored resources -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<!-- Uncomment this to disable session persistence across Tomcat restarts -->
<!--
<Manager pathname="" />
-->
<Resource name="jdbc/mysql"
auth="Container"
type="javax.sql.DataSource"
factory="org.apache.commons.dbcp.BasicDataSourceFactory"
maxActive="20"
maxIdel="10"
maxWait="1000"
username="root"
password="root"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/mldn">
</Resource>
</Context>
将上面文件放在web目录的meta-inf下面,还有你的测试代码要在同一个web容器下运行啊,不要随便写个main方法就测试,那是在不同的jvm下,怎么可能获取到jndi对象呢,
你在问问Google老师,应该能够解决,还有在tomcat下的lib下放置相关jar包,比如数据源,dbcp那个,还有驱动
比如说
<Context>
<!-- Default set of monitored resources -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<!-- Uncomment this to disable session persistence across Tomcat restarts -->
<!--
<Manager pathname="" />
-->
<Resource name="jdbc/mysql"
auth="Container"
type="javax.sql.DataSource"
factory="org.apache.commons.dbcp.BasicDataSourceFactory"
maxActive="20"
maxIdel="10"
maxWait="1000"
username="root"
password="root"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/mldn">
</Resource>
</Context>
将上面文件放在web目录的meta-inf下面,还有你的测试代码要在同一个web容器下运行啊,不要随便写个main方法就测试,那是在不同的jvm下,怎么可能获取到jndi对象呢,
你在问问Google老师,应该能够解决,还有在tomcat下的lib下放置相关jar包,比如数据源,dbcp那个,还有驱动
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询