软件版本myeclispe8.0,自带tomcat6.0.13。

 jdbc:mysql-connector-java-5.1.13-bin.jar


 第一步:建立工程。

 在Myeclipse中file->new->web project。

 因为在测试数据源(jsp)时用到了标签库,所以可以在这里选上jsdl支持,当然也可以在工程建好后右键工程文件夹->myeclipse->add JSTL

 Libraries…实现同样的功能。


 第二步:导入jdbc的jar包。

 要直接将mysql-connector-java-3.1.7-bin.jar复制到“工程文件夹/WebRoot/WEB-INF/lib”文件夹下。这时,myeclipse会自动生成一个

 Referenced Libraries,不用管。


 第三步:建立context.xml文件。

 在“工程文件夹/WebRoot/META-INF”下,新建context.xml文件。文件内容如下:



[html]  view plaincopy
<?xml version="1.0" encoding="UTF-8"?>
 <Context debug="5" reloadable="true">
 <Resource
 name="jdbc/mysql"
 auth="Container"
 type="javax.sql.DataSource"
 maxActive="100"
 maxIdle="30"
 maxWait="10000"
 username="root"
 password=""
 driverClassName="com.mysql.jdbc.Driver"
 url="jdbc:mysql://localhost:3306/javatest?autoReconnect=true" />
 </Context>

 解释:
 name="jdbc/mysql"   //连接名,jndi中使用。具在JSP中用<sql:query var="rs" dataSource="jdbc/mysql">调用,servlet用 DataSource ds

 = (DataSource)ctx.lookup("java:comp/env/jdbc/mysql");调用。这里是tomcat的格式,不同的服务器可能有所不同。

 auth="Container"    
 type="javax.sql.DataSource"    
 maxActive="100"
 maxIdle="30"
 maxWait="10000"
 username="root"    //mysql的用户名
 password=""        //mysql的用户密码,我这里是空  
 driverClassName="com.mysql.jdbc.Driver"   //驱动类名,一般确定
 url="jdbc:mysql://localhost:3306/javatest?autoReconnect=true" //javatest是mysql中要使用的数据库名

 第四步:修改web.xml文件。

 在web.xml文件中添加以下内容: //重要一定添加进去

 <resource-ref>
       <description>DB Connection</description>
       <res-ref-name>jdbc/mysql</res-ref-name>
       <res-type>javax.sql.DataSource</res-type>
       <res-auth>Container</res-auth>
 </resource-ref>

 这部分内容一般是确定的。

 OK,现在可以测试数据源是否好了。下面是JSP测试文件:

 <%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
 <%@ taglib uri="  http://java.sun.com/jsp/jstl/sql " prefix="sql" %>
 <%@ taglib uri="  http://java.sun.com/jsp/jstl/core " prefix="c" %>
 <%
 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>My JSP 'MyJsp.jsp' starting page</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">
     -->
 <sql:query var="rs" dataSource="jdbc/mysql">
 select id, username, password from user
 </sql:query>
 </head>

 <body>
    <h2>Results</h2>

 <c:forEach var="row" items="${rs.rows}">
     Foo ${row.username}<br/>
     Bar ${row.password}<br/>
 </c:forEach> <br>
 </body>
 </html>

 当然,如果你用servlet测试数据源也是可以的,下面是一个servlet测试例子:

 package fx;

 import java.io.IOException;
 import java.io.PrintWriter;
 import java.sql.Connection;
 import java.sql.ResultSet;
 import java.sql.SQLException;

 import javax.naming.Context;
 import javax.naming.InitialContext;
 import javax.naming.NamingException;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.sql.DataSource;

 public class DsTest extends HttpServlet
 {

     /**
      * Constructor of the object.
      */
     public DsTest()
     {
         super();
     }

     /**
      * Destruction of the servlet. <br>
      */
     public void destroy()
     {
         super.destroy(); // Just puts "destroy" string in log
         // Put your code here
     }

     /**
      * The doGet method of the servlet. <br>
      *
      * This method is called when a form has its tag value method equals to get.
      *  
      * @param request the request send by the client to the server
      * @param response the response send by the server to the client
      * @throws ServletException if an error occurred
      * @throws IOException if an error occurred
      */
     public void doGet(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException
     {

         doPost(request,response);
     }

     /**
      * The doPost method of the servlet. <br>
      *
      * This method is called when a form has its tag value method equals to post.
      *  
      * @param request the request send by the client to the server
      * @param response the response send by the server to the client
      * @throws ServletException if an error occurred
      * @throws IOException if an error occurred
      */
     public void doPost(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException
     {

         response.setContentType("text/html");
         PrintWriter out = response.getWriter();
         out
                 .println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
         out.println("<HTML>");
         out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
         out.println(" <BODY>");
         out.print("    This is ");
         out.print(this.getClass());
         out.println(", using the POST method");
         try
         {

            Context ctx = new InitialContext();
            DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/mysql");
            Connection conn = ds.getConnection();
            ResultSet rs=conn.createStatement().executeQuery("select * from user");
            rs.next();
            out.print(rs.getString(2));
         } catch (NamingException e) {
             e.printStackTrace(out);
            System.out.println(e.getMessage());
         } catch (SQLException e) {
            e.printStackTrace(out);
         }
         out.println("connection pool connected !!haha");  
         out.println(" </BODY>");
         out.println("</HTML>");
         out.flush();
         out.close();
     }

     /**
      * Initialization of the servlet. <br>
      *
      * @throws ServletException if an error occurs
      */
     public void init() throws ServletException
     {
         // Put your code here
     }

 }


 我的mysql数据库名为javatest,表名为user,有三列"id","username","password"。servlet运行结果将打印出user表中的第一个用户名。

 注意:如果你新建servlet,myeclipse会自动帮你在web.xml中生成相应的mapping,而这部分内容可能“插”进

 <resource-ref>
       <description>DB Connection</description>
       <res-ref-name>jdbc/mysql</res-ref-name>
       <res-type>javax.sql.DataSource</res-type>
       <res-auth>Container</res-auth>
 </resource-ref>

 中,造成错误。注意自己手动调整。 //要看一下,因为我的好像没有这段代码

 别外,注意myeclipse中的servlet映射为“服务器ip:端口/工程文件名/servlet/servlet名”。





 还有就是最好使用外部自己配置的Tomcat,并将mysql-connector-java-5.1.13-bin.jar包放到Tomcat的lib目录下。

 最好不要用MyEclipse自带的Tomcat,因为我的MyEclipse提示org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot load JDBC driver class 'com.mysql.jdbc.Driver'

 即Tomcat出现异常,找不到jdbc驱动包