这几天在tomcat下配置mysql的数据库连接池,再使用servlet进行数据访问。碰到不少问题,百度查了不少资料,不是很完整,试了很久,总算调通了。记录下来,供大家参考。
Tomcat和MySQL的安装就不追溯,很简单。
一、配置数据库连接池
这块网上很多材料有误导,搞一大堆参数。实际上,在Tomcat的首页上就有相关配置的说明:
https://img-blog.csdn.net/20131026230453281?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZnVzaHVu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
1、进入Tomcat首页,如上图。
2、找到JDBC DataSources,点击进入。
打开tomcat\conf\Context.xml,将这句话拷贝进去,修改成你自己的MySQL的配置即可:
<Resource name="jdbc/你的数据库别名" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="MySQL用户名" password="MySQL用户密码" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/test"/>
标黄的是要按照你的mysql的配置进行修改,其他不用动。
MySQL的资料上有另外一种写法,但创建JNDI时,DataSource总是空的,误人不浅:Chapter 11. Using Connector/J with Tomcat。
3、打开tomcat\conf\web.xml,将以下信息加入,放在</web-app>之前即可。
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/你的数据库别名</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
4、很重要的一步,就是要将MySQL的JDBC引擎拷贝到tomcat\lib下。
二、配置Servlet
Servlet的配置有时不小心,也容易造成出错。
1、打开tomcat\conf\web.xml,参考其他Servlet的写法,将以下信息加入。
<servlet-mapping>
<servlet-name>DataServiceServlet</servlet-name>
<url-pattern>/DataServiceServlet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>DataServiceServlet</servlet-name>
<servlet-class>com.xxx.DataServiceServlet</servlet-class>
</servlet>
值得注意的是,以上的servlet-class就是你创建的Servlet,要包含路径。
不写servlet-mapping,就会老找不到servlet类:The requested resource is not available.。机关重重。
三、在Servlet中使用数据库连接池
有了以上两步,数据库连接池的使用就很简单了。
import javax.servlet.http.*;
import javax.servlet.*;
import java.io.*;
import java.sql.*;
import javax.sql.*;
import javax.naming.*;
。。。。。。
InitialContext ctx = null;
DataSource ds = null;
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
String sql = "SELECT t1,t2 FROM test where t1=?";
try {
ctx = new InitialContext();
ds = (DataSource) ctx.lookup("java:comp/env/jdbc/你的数据库别名");
conn = ds.getConnection();
ps = conn.prepareStatement(sql);
} catch (SQLException se) {
System.out.println("SQLException: " + se.getMessage());
} catch (NamingException ne) {
System.out.println("NamingException: " + ne.getMessage());
}
这里有点变态的是lookup中的java:comp/env/jdbc/千万别少了,否则就无法定位到数据库配置,很是郁闷
四、访问Servlet
在你的HTML中,随便写个form,action中的内容就是你的servlet。
<form action="DataServiceServlet" method="POST">
<input type="text" name="t1"/>
<input type="submit" value="Submit" />
</form>
OK,大功告成,恭喜你成为一个伟大的程序员。
注:本人使用的是MySQL 5.6.14,Tomcat 7.0.42,Eclipse Version: Kepler Service Release 1