Tomcat6.0 :

 在$CATALINA_HOME/conf/server.xml文件中的<Host></Host>標簽之間加入如下的Context代碼
    <Context path="/articlesystem" docBase="articlesystem" debug="5" reloadable="true" crossContext="true">
       
<Resource name="jdbc/StrutsArticle" auth="Container" type="javax.sql.DataSource"
          maxActive
="100" maxIdle="30" maxWait="10000"
          username
="root" password="root" driverClassName="com.mysql.jdbc.Driver"
          url
="jdbc:mysql://localhost:3306/strutsaritclecharacterEncoding=GBK&amp;useUnicode=TRUE&amp;autoReconnect=true"/>
    
</Context>
注意要把這段代碼配置到Host></Host>標簽之間。

完成以上工作后,數據庫就配置成功了。。也不必像官方文檔說的那樣在、在web應用的web.xml中配置<resource-ref>標簽的屬性了。

另. Context元素代表一個web應用,運行在某個特定的虛擬主機上。你可以在一個Host元素中嵌套任意多的Context元素。每個Context的路徑必須是惟一的,由path屬性定義。

所有Context的實現支持如下屬性:

屬性 描述
backgroundProcessorDelay 這個值代表在context及其子容器(包括所有的wrappers)上調用backgroundProcess方法的延時,以秒為單位。如果延時值非負,子容器不會被調用,也就是說子容器使用自己的處理線程。如果該值為正,會創建一個新的線程。在等待指定的時間以后,該線程在主機及其 子容器上調用backgroundProcess方法。context利用后臺處理session過期,監測類的變化用于重新載入。如果沒有指定,該屬性的缺省值是-1,說明context依賴其所屬的Host的后臺處理。
className 實現的Java類名。該類必須實現org.apache.catalina.Context接口。如果沒有指定,使用標準實現(在下面定義)。
cookies

如果想利用cookies來傳遞session identifier(需要客戶端支持cookies),設為ture。否則為false,這種情況下只能依靠URL Rewriting傳遞session identifier。

 

crossContext

如果想在應用內調用ServletContext.getContext()來返回在該虛擬主機上運行的其他web application的request dispatcher,設為true。在安全性很重要的環境中,設為false,使得getContext()總是返回null。缺省值為false。

docBase

該web應用的文檔基準目錄(Document Base,也稱為Context Root),或者是WAR文件的路徑。可以使用絕對路徑,也可以使用相對于context所屬的Host的appBase路徑。

 

override

如果想利用該Context元素中的設置覆蓋DefaultContext中相應的設置,設為true。缺省情況下使用DefaultContext中的設置。

privileged

設為true,允許context使用container servlets,比如manager servlet。

 

path

web應用的context路徑。catalina將每個URL的起始和context path進行比較,選擇合適的web應用處理該請求。特定Host下的context path必須是惟一的。如果context path為空字符串(""),這個context是所屬Host的缺省web應用,用來處理不能匹配任何context path的請求。

 

reloadable 如果希望Catalina監視/WEB-INF/classes/和/WEB-INF/lib下面的類是否發生變化,在發生變化的時候自動重載web application,設為true。這個特征在開發階段很有用,但也大大增加了服務器的開銷。因此,在發布以后,不推薦使用。但是,你可以使用Manager應用在必要的時候觸發應用的重載。
wrapperClass

org.apache.catalina.Wrapper實現類的名稱,用于該Context管理的servlets。如果沒有指定,使用標準的缺省值。




 java代碼得到連接:

 Context initCtx = new InitialContext();
         Context ctx 
= (Context)initCtx.lookup("java:comp/env");
         Object obj 
= (Object) ctx.lookup("jdbc/sqlserver");
         javax.sql.DataSource ds 
= (javax.sql.DataSource)obj;
         conn 
= ds.getConnection();


 Hibernate得到連接:

在hibernate-cfg.xml中
<property name="connection.datasource">java:comp/env/jdbc/sqlserver</property>


 Spring中得到連接:
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
               
<property name="jndiName"><value>java:comp/env/jdbc/dermis</value></property>
 
</bean>

 如果你用的是jboss服務器:
           把java:comp/env 改成java:就足夠了

           如果你用的是apache的dbcp包:
           1.type="org.apache.commons.dbcp.BasicDataSouce"
           2.driverClassName="net.sourceforge.jtds.jdbc.Driver"
           3.url="jdbc:jtds:sqlserver://127.0.0.1:1433/dataBasename"

 如果你用的是MySQL:
            1.driverClassName="com.mysql.jdbc.Driver"
            2.url="jdbc:mysql://127.0.0.1:3306/dbname"
 如果是Oracle:
    
            1.driverClassName="oracel.jdbc.driver.OracleDriver"
            2.url="jdbc:oracle:thin://127.0.0.1:1521/dbname" 

Tomcat 5.5

首先編輯Server.xml,添加數據源代碼

<Context path="/StudentManager" docbase="StudentManager" debug="5" reload="true" crossContext="true">
         
<Resource name="jdbc/StudentManager" auth="Container" type="javax.sql.DataSource"/>
            
<ResourceParams name="jdbc/StudentManager">
                
<parameter>
                  
<name>factory</name>
                  
<values>org.apache.commons.dbcp.BasicDataSourceFactory</values> 
                
</parameter>
                
<parameter>
                  
<name>url</name>
                  
<values>jdbc:mysql://localhost:3306/studentmanager</values>
                
</parameter>
                
<parameter>
                  
<name>driverclassname</name>
                  
<values>com.mysql.jdbc.Driver</values>
                
</parameter> 
                
<parameter>
                  
<name>username</name>
                  
<values>root</values> 
                
</parameter>
                
<parameter>
                  
<name>password</name>
                  
<values>root</values>
                
</parameter>
                
<parameter>
                  
<name>maxWait</name>
                  
<values>3000</values>
                
</parameter>
                
<parameter>
                  
<name>maxIdle</name>
                  
<values>10</values>
                
</parameter>
                
<parameter>
                  
<name>maxActive</name>
                  
<values>100</values>
                
</parameter>

            
</ResourceParams>                    
      
</Context>

在Web.xml中加入對jndi的引用

<resource-ref>   
      
<description>SqlServer   Datasource   example</description>   
      
<res-ref-name>jdbc/StudentManager</res-ref-name>   
      
<res-type>javax.sql.DataSource</res-type>   
      
<res-auth>Container</res-auth>   
  
</resource-ref>

 

測試代碼:


 

<%
    
String jndi="java:comp/env/jdbc/StudentManager";
    DataSource ds
=null
     try{  
          
          Context initCtx
=new InitialContext();   //初始化上下文,可以讀配置文件如:web.xml   
          
if(initCtx==null)   
                  throw 
new Exception("Initial   Failed!");       
          Context ctx
=(Context)initCtx.lookup("java:comp/env");   
          
if(ctx!=null)   
               ds
=(DataSource)ctx.lookup("jdbc/StudentManager"); 
          
if(ds==null)   
                  throw 
new Exception("Look   up   DataSource   Failed!");   
  }   
  catch(Exception e){   
          System.out.println(e.getMessage());   
  }
    System.out.println(ds);
 
%>