Tomcat6.0连接池配置

    QQ拼音生成的时间 2012年7月24日 23:59:11  

    今天算是比较顺利赶在明天来临,解决了Web开发中Tomcat连接池配置的问题。

网上关于连接池配置的文章千篇一律,而且大多数都是将Tomcat的帮助文档晦涩的翻译了一下就草草了事,很多代码中包含有中文字符,空格,格式不完整,注释添加错误位置。不知道写文章的人,究竟为何为文,以后即便自己用到也会出问题。

    还有很多问题,既然配置Tomcat,就因该标注配置的Tomcat是那一个版本,配置的信息添加在什么地方,什么位置都应该一一说清楚。

    自己动手亲自配置了一下。这里是基于Tomcat目录下的配置,属于全局的数据库连接池的配置。

 1.   在Tomcat1.6.x的按照目录下的conf文件夹下打开server.xml文件

    配置*.xml文件不管配置信息是否正确,必须书写xml文件的格式一定要正确。

    

 
  
  
  
  
  1. <GlobalNamingResources> 
  2.     <!-- Editable user database that can also be used by 
  3.          UserDatabaseRealm to authenticate users 
  4.     --> 
  5.     <Resource name="UserDatabase" auth="Container" 
  6.               type="org.apache.catalina.UserDatabase" 
  7.               description="User database that can be updated and saved" 
  8.               factory="org.apache.catalina.users.MemoryUserDatabaseFactory" 
  9.               pathname="conf/tomcat-users.xml" /> 
  10.                
  11.                
  12.     <Resource 
  13.         name="jdbc/poolmssql" 
  14.         auth="Container" 
  15.         type="javax.sql.DataSource" 
  16.         driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" 
  17.         url="jdbc:sqlserver://localhost:5140;databaseName=ext" 
  18.         username="sa" 
  19.         password="shszfdbz" 
  20.         maxActive="100" 
  21.         maxIdle="30" 
  22.         maxWait="10000" 
  23.     /> 
  24.  

 
  
  
  
  
  1.   </GlobalNamingResources> 

第二个Resource是配置数据源的信息

2.在在Tomcat1.6.x的按照目录下的conf文件夹下打开context.xml文件

在Context标签之间添加如下内容。

 
  
  
  
  
  1.  

 
  
  
  
  
  1. <ResourceLink name="jdbc/poolmssql" global="jdbc/poolmssql" type="javax.sql.DataSource"/> 

各种信息不解释,Tomcat帮助文档解释很清楚。

3.在当前的应用程序的WEB-INF目录下的web.xml文件中添加如下信息

 

 
  
  
  
  
  1. <description>Mircosoft SQLServer 2005</description> 
  2.     <resource-ref> 
  3.         <description>DB Connection</description> 
  4.         <res-ref-name>jdbc/poolmssql</res-ref-name> 
  5.         <res-type>javax.sql.DataSource</res-type> 
  6.         <res-auth>Container</res-auth> 
  7.  

 
  
  
  
  
  1.     </resource-ref> 

4.编写一个测试类

 

 
  
  
  
  
  1. public class PoolDB { 
  2.  
  3.      
  4.     public static Connection getConnection() { 
  5.         // 初始化查找命名空间 
  6.         Context initContext = null
  7.         // 找到 DataSource 
  8.         DataSource ds = null
  9.         Context envContext = null
  10.         Connection conn = null
  11.         PreparedStatement pstmt=null
  12.         ResultSet rs=null
  13.         try { 
  14.             initContext = new InitialContext(); 
  15.             envContext = (Context) initContext.lookup("java:/comp/env"); 
  16.             ds = (DataSource) envContext.lookup("jdbc/poolmssql"); 
  17.             conn = ds.getConnection(); 
  18.             System.out.println(conn); 
  19.             String sql="select * from Student"
  20.  
  21.             pstmt=conn.prepareStatement(sql); 
  22.             rs=pstmt.executeQuery(); 
  23.             Student s=null
  24.             List list=new ArrayList(); 
  25.             while(rs.next()){ 
  26.                 s=new Student(); 
  27.                 s.setSno(rs.getString("sno")); 
  28.                 s.setAge(rs.getInt("age")); 
  29.                 s.setSex(rs.getString("sex")); 
  30.                 s.setManame(rs.getString("maname")); 
  31.                 s.setNation(rs.getString("nation")); 
  32.                 s.setSname(rs.getString("sname")); 
  33.                 s.setPlace(rs.getString("place")); 
  34.                 list.add(s); 
  35.             } 
  36.              
  37.             for (Object st : list) { 
  38.                 System.out.println(st.toString()); 
  39.             } 
  40.         } catch (NamingException e) { 
  41.             // TODO Auto-generated catch block 
  42.             e.printStackTrace(); 
  43.         } catch (SQLException e) { 
  44.             // TODO Auto-generated catch block 
  45.             e.printStackTrace(); 
  46.         } 
  47.         return conn; 
  48.  
  49.     } 

这是获得数据库连接的类,这里用到了一个实体类Student,属性可以看出,数据库中已经存在一张表Student并且存有数据。

接下来进行测试,在获得数据库连接的类PoolDB写上main方法:

 

 
  
  
  
  
  1. public static void main(String[] args) { 
  2.  
  3.         System.out.println(PoolDB.getConnection()); 
  4.  
  5.     } 

 

既然是在Tomcat下配置的数据库连接池那么就应该启动Tomcat;接下来运行应用程序,错误直接发生了。

 

public class InitialContext
   

   

   
    
    
    
    
extends Object
implements Context
 

此类是执行命名操作的初始上下文。

所有命名操作都相对于某一上下文。该初始上下文实现 Context 接口并提供解析名称的起始点

应为执行的是PoolDB类,并没有相对于上下文的操作所以抛出异常。

5.编写一个*.jsp文件


 
  
  
  
  
  1. <
  2.     Connection conn=PoolDB.getConnection(); 
  3.  
  4.  

 
  
  
  
  
  1.  %> 

使用到PoolDB类。

然后在通过浏览器来访问义页面,执行正常,查询到数据库表Student中的内容。


 
  
  
  
  
  1. jdbc:sqlserver://localhost:5140;selectMethod=direct;lastUpdateCount=true;databaseName=ext;, UserName=sa, Microsoft SQL Server 2005 JDBC Driver 
  2. Student [age=21maname=计算机科学与技术, nation=CHINAplace=西安, sex=男, sname=Aiilivesno=200907010100
  3. Student [age=22maname=软件设计, nation=CHINAplace=西安, sex=男, sname=Secondriversno=200907010101
  4. Student [age=19maname=翰林儒学, nation=唐, place=兰若镇, sex=男, sname=宁采臣, sno=200907010102
  5. Student [age=45maname=擒妖科学与技术, nation=道山, place=兰若镇, sex=男, sname=燕赤霞, sno=200907010103
  6. Student [age=27maname=大唐时尚, nation=天庭, place=高老庄, sex=男, sname=猪八戒, sno=200907010104
  7. Student [age=21maname=自由文艺, nation=唐, place=兰若寺, sex=女, sname=聂小倩, sno=200907010105
  8. Student [age=18maname=塔与塔文化研究, nation=唐, place=西湖, sex=女, sname=白娘子, sno=200907010106
  9. Student [age=21maname=翰林儒学, nation=唐, place=长安, sex=男, sname=许仙, sno=200907010107


6.接下来根据自己亲自在Tomcat1.6.x版本下的操作,去除掉在WEB-INF下的web.xml的配置信息,仍然可以获得第5条中查询的结果

7.如图可以看到真相。


Tomcat6.0连接池配置

眼睛一亮就可以看到,这里的sqljdbc2005.jar驱动包绝对不是很多网上的文章所说的那样放在Tomcat的common文件夹下,可惜Tomcat1.6.就只用lib文件。

如上图:itext-5.2.1.zip是通过引用的包,这里仅仅体现sqljdbc2005.jar绝对是放在Web工程的lib目录下面的。

8.在Tomcat安装目录的conf文件夹下的context.xml文件中的资源连接必须写


 
  
  
  
  
  1. <ResourceLink name="jdbc/poolmssql" global="jdbc/poolmssql" type="javax.sql.DataSource"/> 

不然将会产生如下问题。


 
  
  
  
  
  1. javax.naming.NameNotFoundException: Name jdbc is not bound in this Context 
  2.     at org.apache.naming.NamingContext.lookup(NamingContext.java:770) 
  3.     at org.apache.naming.NamingContext.lookup(NamingContext.java:153) 
  4.     at xiao.zhang.dbc.PoolDB.getConnection(PoolDB.java:33) 
  5.     at org.apache.jsp.index_jsp._jspService(index_jsp.java:111) 

错误信息提示很清楚所配置的数据库连接池没能子会话中找到。

9.还用一些给单独的工程配置,所要做的操作和添加的配置信息是相同的只是在不同的位置。

本文出自 “野马红尘” 博客,谢绝转载!

你可能感兴趣的:(Tomcat1.6,数据库连接池配置)