Tomcat6.0连接池配置

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

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

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

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

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

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

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

    


  
<GlobalNamingResources>      <!-- Editable user database that can also be used by           UserDatabaseRealm to authenticate users      -->      <Resource name="UserDatabase" auth="Container"                type="org.apache.catalina.UserDatabase"                description="User database that can be updated and saved"                factory="org.apache.catalina.users.MemoryUserDatabaseFactory"                pathname="conf/tomcat-users.xml" />                                      <Resource          name="jdbc/poolmssql"          auth="Container"          type="javax.sql.DataSource"          driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"          url="jdbc:sqlserver://localhost:5140;databaseName=ext"          username="sa"          password="shszfdbz"          maxActive="100"          maxIdle="30"          maxWait="10000"      />   


  
  </GlobalNamingResources> 

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

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

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


  
 


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

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

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

 


  
<description>Mircosoft SQLServer 2005</description>      <resource-ref>          <description>DB Connection</description>          <res-ref-name>jdbc/poolmssql</res-ref-name>          <res-type>javax.sql.DataSource</res-type>          <res-auth>Container</res-auth>   


  
    </resource-ref> 

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 InitialContext
   

   

   

    
    
 
    
 
    
 
     extends 
    
 
    
 
    
 
     Object
   

   

   

    
   

   

   

    
    
 
    
 
    
 
     implements 
    
 
    
 
    
 
     Context
   

   

   

    
 

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

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

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

5.编写一个*.jsp文件



  
<%      Connection conn=PoolDB.getConnection();     


  
 %> 

使用到PoolDB类。

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



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


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

7.如图可以看到真相。


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

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

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



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

不然将会产生如下问题。



  
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.还用一些给单独的工程配置,所要做的操作和添加的配置信息是相同的只是在不同的位置。

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

转载于:https://my.oschina.net/aiilive/blog/507260

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值