官网地址
http://tomcat.apache.org/tomcat-6.0-doc/jndi-datasource-examples-howto.html
========================================================================
我用的是apache-tomcat-6.0.16 mysql6.0.12
========================================================================
1.先从Mysql中新建数据库javatest,插入表testdata中数据
create database javatest;
use javatest;
create table testdata (id int not null auto_increment primary key,foo varchar(25), bar int);
insert into testdata values(null, 'hello', 12345);
====================================
context.xml
<Context path="/DBTest" docBase="D:/myeclipse_workspace/DBTest/WebRoot"
debug="5" reloadable="true" crossContext="true">
<Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="root" password="pain" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/javatest?autoReconnect=true"/>
</Context>
====================================
web.xml
<web-app 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"
version="2.4">
<description>MySQL Test App</description>
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/TestDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
====================================
test.jsp
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<sql:query var="rs" dataSource="jdbc/TestDB">
select id, foo, bar from testdata
</sql:query>
<html>
<head>
<title>DB Test</title>
</head>
<body>
<h2>Results</h2>
<c:forEach var="row" items="${rs.rows}">
Foo ${row.foo}<br/>
Bar ${row.bar}<br/>
</c:forEach>
</body>
</html>
====================================
需要用到jstl.jar、mysql-connector-java-5.1.8-bin.jar、standard.jar包
http://localhost:8080/DBTest/test.jsp
====================================
最后JSP显示结果:
----------
Results
Foo hello
Bar 12345
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
此段是写给自己的,可以不看
不知道为何,不用Myeclipse可以显示正确,一用Myeclipse会出错,麻烦我两天的问题,竟然出现在Myeclipse身上。先改一下JRE环境,排除一下,看看是不是这个问题
1、window->preference->java-compiler->compiler compliance 设置compiler compliance level:为 1.6
2、window ->preference ->java ->Installed JRES里面把MYECLIPSE自带的删除,添加你自己的JDK
3、项目上右键/Preferences/Java Compiler 里改为1.5以上
至于为何为Myeclipse会出错,再找找看吧
========================================================================
用另一种JSP方法亦可
test2.jsp
<%@ page contentType="text/html;charset=utf-8"%>
<%@ page import="java.sql.*,javax.sql.*,javax.naming.*,com.DBConnection.*" %>
<%
try
{
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/TestDB");
Connection conn = ds.getConnection();
} catch (NamingException e) {
System.out.println(e.getMessage());
} catch (SQLException e) {
e.printStackTrace();
}
out.println("connection pool connected !!haha");
%>
========================================================================
dataSource="jdbc/TestDB" 和 (DataSource)ctx.lookup("java:comp/env/jdbc/TestDB") 是两种获得JNDI不同的方法,同样是可行的,不同之处,前者是硬连接,后者是虚拟的,后者可移植性比较好。
========================================================================
mysql-connector-java-5.1.8-bin.jar 放到D:/Program Files/apache-tomcat-6.0.16/lib下,我用的是tomcat6.总之放到lib下即可。jstl.jar,stand.jar放到DBTest/WEB-INF/lib下
context.xml中的docBase目录要可能改一下,改成test.jsp所在的实际目录。
还要修改context.xml中的username="root" password="root",把用户名和密码改成你自己Mysql的用户名和密码
其中名字的更改请看我的csdn博客painrthur:http://blog.csdn.net/paincupid/archive/2009/08/23/4474586.aspx
虽然这个小例子搞了整整两天,才搞定,不过也学到不少东西,真的快要吐了,不过也学到不少东西。希望以后能进步快一些。
实例下载:http://download.csdn.net/source/1598723
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
注意事项:
1. 把Myeclipse里的Tomcat的JDK设成现在的Java JDK路径。
我用的Myeclipse7:window-Perference-Myeclispe Enterprise Workbench-Servers-Tomcat-Tomcat 6.x-JDK设一下。
2. 把项目WEB-INF/lib下多余的包去掉,否则Tomcat重复加载会报以下错误:
An error occurred at line: 25 in the generated java file The method getJspApplicationContext(ServletContext) is undefined for the type JspFactory
改完这两项后,以前的项目能运行了,不知道为何。也不知道是不是这两处的原因,至少现在不会报错了。满足了......
============================================================================
============================================================================
============================================================================
网上还有一种配置context.xml的方法:
<Context>
<Resource
name="jdbc/TestDB"
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="root"
password="pain"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/javatest?autoReconnect=true&useUnicode=true&characterEncoding=utf-8&mysqlEncoding=utf8"/>
</Context>
这样写的好处是不用指定test.jsp的路径!