主要使用jndi对tomcat中的 env 以及 source 进行调用
问题:
.注意 jdbc驱动需要放在 ${CATALINA_HOME}/common/lib 目录下
在tomcat的配置文件中需要注意 标签的次序问题
#server.xml的配置如下
<Context path="/tomtest" reloadable="true" docBase="E:/admin/workspace/javaWS/tomtest" workDir="E:/admin/workspace/javaWS/tomtest/work/org/apache/jsp" >
<!--Loader className="org.apache.catalina.loader.DevLoader" reloadable="true" debug="1"/-->
<!--server level Environment-->
<Environment name="greetings" type="java.lang.Integer" value="15"/>
<Resource name="jdbc/ds" scope="Shareable" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/ds">
<!-- use dbcp pool-->
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<!-- DBCP database connection settings -->
<!-- MS SQL Server -->
<parameter>
<name>url</name>
<value>jdbc:jtds:sqlserver://HOST:1433/Northwind</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>net.sourceforge.jtds.jdbc.Driver</value>
</parameter>
<parameter>
<name>username</name>
<value>sa</value>
</parameter>
<parameter>
<name>password</name>
<value>******</value>
</parameter>
<!-- DBCP connection pooling options -->
<parameter>
<name>maxWait</name>
<value>3000</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>100</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>10</value>
</parameter>
</ResourceParams>
</Context>
#web.xml配置如下
<!--resource reference for datasource... it use "source" in server.xml-->
<resource-env-ref>
<description> data source entry test</description>
<resource-env-ref-name>jdbc/ds</resource-env-ref-name>
<resource-env-ref-type>javax.sql.DataSource</resource-env-ref-type>
</resource-env-ref>
<!-- Web level Environment-->
<env-entry>
<description>test entry</description>
<env-entry-name>webEnv</env-entry-name>
<env-entry-value>i am environment in web.xml...</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
#JSP测试使用如下
<%@page contentType="text/html;charset=gb2312"
import="javax.naming.*,java.sql.*,javax.sql.*"
%>
<%
//建立一个context 作为查找源 这里为myenv ctx为初始源
Context ctx =new InitialContext();
//注意 tomcat中的对配置的查找都在java:comp/env下面
Context myenv =(Context)ctx.lookup("java:comp/env");
//这里得到一个 server级的环境变量
Integer greetings= (Integer)myenv.lookup("greetings");
out.println("serverEnv is: "+greetings+"<br/>");
//这里的是web级的环境变量
out.println("WebEnv is:"+(String)myenv.lookup("webEnv")+"<br/>");
/*
使用tomcat中配置的datasource 进行数据库操作
*/
Connection conn=null;
DataSource ds=null;
Statement stat=null;
ResultSet res=null;
try{
//Class.forName("net.sourceforge.jtds.jdbc.Driver");
//得到tomcat配置的datasource引指
ds=(DataSource)myenv.lookup("jdbc/ds");
//使用datasource得到connection
if(ds!=null){
conn=ds.getConnection();
out.println("had data source ...");
}
stat=conn.createStatement();
//执行语句并返回一个ResultSet
res=stat.executeQuery("select distinct top 20 * from Orders");
//打印ResultSet
out.print("<br/>");
while(res.next())
{
out.print(res.getInt(1)+":"+res.getString(2)+"<br/>");
}
}
catch(Exception e){
out.println(e);
}
finally{
if(res!=null)
res.close();
if(stat!=null)
stat.close();
if(conn!=null)
conn.close();
}
//关闭context 据说context最好关了
ctx.close();
myenv.close();
%>
#显示结果如下
serverEnv is: 15
WebEnv is:i am environment in web.xml...
conn
10248:VINET
10249:TOMSP
10250:HANAR
10251:VICTE
10252:SUPRD
10253:HANAR
10254:CHOPS
10255:RICSU
10256:WELLI
10257:HILAA
10258:ERNSH
10259:CENTC
10260:OTTIK
10261:QUEDE
10262:RATTC
10263:ERNSH
10264:FOLKO
10265:BLONP
10266:WARTH
10267:FRANK