Tomcat6.0连接池配置
QQ拼音生成的时间 2012年7月24日 23:59:11今天算是比较顺利赶在明天来临,解决了Web开发中Tomcat连接池配置的问题。
网上关于连接池配置的文章千篇一律,而且大多数都是将Tomcat的帮助文档晦涩的翻译了一下就草草了事,很多代码中包含有中文字符,空格,格式不完整,注释添加错误位置。不知道写文章的人,究竟为何为文,以后即便自己用到也会出问题。
还有很多问题,既然配置Tomcat,就因该标注配置的Tomcat是那一个版本,配置的信息添加在什么地方,什么位置都应该一一说清楚。
自己动手亲自配置了一下。这里是基于Tomcat目录下的配置,属于全局的数据库连接池的配置。
1. 在Tomcat1.6.x的按照目录下的conf文件夹下打开server.xml文件
配置*.xml文件不管配置信息是否正确,必须书写xml文件的格式一定要正确。
[*]
[*]
[*]
[*]
[*]
[*]
[*]
[*]
第二个Resource是配置数据源的信息
2.在在Tomcat1.6.x的按照目录下的conf文件夹下打开context.xml文件
在Context标签之间添加如下内容。
[*]
[*]
各种信息不解释,Tomcat帮助文档解释很清楚。
3.在当前的应用程序的WEB-INF目录下的web.xml文件中添加如下信息
[*]Mircosoft SQLServer 2005
[*]
[*] DB Connection
[*] jdbc/poolmssql
[*] javax.sql.DataSource
[*] Container
[*]
[*]
4.编写一个测试类
[*]public class PoolDB {
[*]
[*]
[*] public static Connection getConnection() {
[*] // 初始化查找命名空间
[*] Context initContext = null;
[*] // 找到 DataSource
[*] DataSource ds = null;
[*] Context envContext = null;
[*] Connection conn = null;
[*] PreparedStatement pstmt=null;
[*] ResultSet rs=null;
[*] try {
[*] initContext = new InitialContext();
[*] envContext = (Context) initContext.lookup("java:/comp/env");
[*] ds = (DataSource) envContext.lookup("jdbc/poolmssql");
[*] conn = ds.getConnection();
[*] System.out.println(conn);
[*] String sql="select * from Student";
[*]
[*] pstmt=conn.prepareStatement(sql);
[*] rs=pstmt.executeQuery();
[*] Student s=null;
[*] List list=new ArrayList();
[*] while(rs.next()){
[*] s=new Student();
[*] s.setSno(rs.getString("sno"));
[*] s.setAge(rs.getInt("age"));
[*] s.setSex(rs.getString("sex"));
[*] s.setManame(rs.getString("maname"));
[*] s.setNation(rs.getString("nation"));
[*] s.setSname(rs.getString("sname"));
[*] s.setPlace(rs.getString("place"));
[*] list.add(s);
[*] }
[*]
[*] for (Object st : list) {
[*] System.out.println(st.toString());
[*] }
[*] } catch (NamingException e) {
[*] // TODO Auto-generated catch block
[*] e.printStackTrace();
[*] } catch (SQLException e) {
[*] // TODO Auto-generated catch block
[*] e.printStackTrace();
[*] }
[*] return conn;
[*]
[*] }
这是获得数据库连接的类,这里用到了一个实体类Student,属性可以看出,数据库中已经存在一张表Student并且存有数据。
接下来进行测试,在获得数据库连接的类PoolDB写上main方法:
[*]public static void main(String[] args) {
[*]
[*] System.out.println(PoolDB.getConnection());
[*]
[*] }
既然是在Tomcat下配置的数据库连接池那么就应该启动Tomcat;接下来运行应用程序,错误直接发生了。
public class InitialContextextends Objectimplements Context
此类是执行命名操作的初始上下文。
所有命名操作都相对于某一上下文。该初始上下文实现 Context 接口并提供解析名称的起始点
应为执行的是PoolDB类,并没有相对于上下文的操作所以抛出异常。
5.编写一个*.jsp文件
[*]
使用到PoolDB类。
然后在通过浏览器来访问义页面,执行正常,查询到数据库表Student中的内容。
[*]jdbc:sqlserver://localhost:5140;selectMethod=direct;lastUpdateCount=true;databaseName=ext;, UserName=sa, Microsoft SQL Server 2005 JDBC Driver
[*]Student
[*]Student
[*]Student
[*]Student
[*]Student
[*]Student
[*]Student
[*]Student
6.接下来根据自己亲自在Tomcat1.6.x版本下的操作,去除掉在WEB-INF下的web.xml的配置信息,仍然可以获得第5条中查询的结果
7.如图可以看到真相。
http://blog.运维网.com/attachment/201207/003651484.png
眼睛一亮就可以看到,这里的sqljdbc2005.jar驱动包绝对不是很多网上的文章所说的那样放在Tomcat的common文件夹下,可惜Tomcat1.6.就只用lib文件。
如上图:itext-5.2.1.zip是通过引用的包,这里仅仅体现sqljdbc2005.jar绝对是放在Web工程的lib目录下面的。
8.在Tomcat安装目录的conf文件夹下的context.xml文件中的资源连接必须写
[*]
不然将会产生如下问题。
[*]javax.naming.NameNotFoundException: Name jdbc is not bound in this Context
[*] at org.apache.naming.NamingContext.lookup(NamingContext.java:770)
[*] at org.apache.naming.NamingContext.lookup(NamingContext.java:153)
[*] at xiao.zhang.dbc.PoolDB.getConnection(PoolDB.java:33)
[*] at org.apache.jsp.index_jsp._jspService(index_jsp.java:111)
错误信息提示很清楚所配置的数据库连接池没能子会话中找到。
9.还用一些给单独的工程配置,所要做的操作和添加的配置信息是相同的只是在不同的位置。
页:
[1]