??xml version="1.0" encoding="utf-8" standalone="yes"?>
核心标签?Core tag Liabry)
I18N格式标签?I18N-capable formatting tag libary)
SQL标签?SQL tag Libary)
XML标签?XML tag Libary)
函数标签?Functions tag Libary)
核心标签?Core tag Liabry)主要?基本输入输出Q流E控Ӟq代操作和URL操作?br /> ----------------------------------------------------------------------------
分类 功能分类 标签分类
out
set
表达式操作 ?remove
catch
Core if
choose
程控制 when
outherwise
forEach
q代操作 forTokens
import .表达式操?br /> 表达式操作分cM包含四个标签: <c:out>,<c:set>,<c:remove>?lt;c:catch> 语法2: 有body内容 Attribute <c:set>:主要用来把变量存储至JSP范围或是JavaBean的属性中?br />语法1: 没有body 语法2: 有body 语法3: value的值存储至target对象属性中 语法4: body内容的数据存储至target对象属性中 Attribute <c:remove>:主要用来U除变量?br />语法: Attribute <c:catch>:主要用来处理产生错误的异常情况,q且信息保存v来?br />语法: Attribute 程控制 <c:if>:的用途和我们在一般程序中写的if一栗?br />语法: 语法2: 有body Attribute <c:choose>:本n只当?lt;c:when>?lt;c:otherwise>的父标签?br />语法: <c:when test="${condition1}"> <c:when test="${condition2}"> <c:otherwise> q代操作 <c:forEach>为@环控Ӟ它可以将集合(Collection)中的成员循序览一遍。运做方式ؓ当条件符?br />Ӟ׃持箋重复执行<c:forEach>的body内容?br />语法: 语法2: q代指定的次?br /><c:forEach [var="varName"] [varStatus="varStatusName"] Attribute Arrays varStatus 用来存放到指到的相关成员信息 N String 否 ??br />begin 开始的位置 Y int 否 ? 0 另外<c:forEach>q提供了varStatus属性,主要用来存放现在指到成员的相关信息。例如:我们写成 <c:forTokens> Attribute Null ?错误处理 例子: URL操作
param
url
URL操作 param
redirect
param
------------------------------------------------------------------------------------------
在JSP中用JSTL中的标签库时Q必M?lt;%@taglib%>指oQƈ且设定prefix和uri的值得Q通常讑֮:
<%@taglib prefix="c" uri=">
q样可以用核心标{ֺ了?/p>
<c:out>Q重要用来显C数据的内容Q类g<%=scripting-language%>。它的语法如?
语法1: 没有body内容
<c:out value="value" [escapeXml="{true|false}"] [default="defaultValue"]/>
<c:out value="value" [escapeXml="{true|false}"]>
default value
</c:out>
-----------------------------------------------------------------------------------------------------------------------
名称 说明 EL cd 必须 默认?br />value 需要显C的值 ? Y Object 是 ??br />default 如果valuegؓnull,则显Cdefault的值 ? Y Object 否 ??br />escapeXml 是否转换Ҏ字符Q如: <转换?amp;It Y Object 否 ?true
----------------------------------------------------------------------------------------------------------------------
Null和错误说?br />假若value为null,会显Cdefault的|假若没有讑֮default的|则会昄一个空的字W串?/p>
value的值存储至范围为scope的varName变量之中
<c:set value="value" var="varName" [scope="{page|request|session|application}"]/>
body内容存储臌围ؓscope的varName变量之中
<c:set value="value" [scope="{page|request|session|application}"]>
body.....
</c:set>
<c:set value="value" target="target" property="propertyNmae"/>
<c:set target="target" property="propertyNmae">
body....
</c:set>
----------------------------------------------------------------------------------------
名称 说明 EL cd 必须 默认?br />value 要被存储的值 ?Y Object 否 ??br />var Ʋ存入的变量名 N String 否 ??br />scope var变量的JSP范围 N String 否 ?page
target ZJavaBean或java.util.Map对象 Y Object 否 ??br />property 指定target对象属性 Y String 否 ??br />------------------------------------------------------------------------------------------
Null ?错误处理:
语法3和语?会生异帔R?有以下两U情?
.target 为null
.target 不是java.util.Map或JavaBean对象
假若value为null?由存储变量改ؓU除变量
.语法1: 由var和scope所定义的变量,被U除
.若scope已指定时Q则PageContext.removeAttribute(varName,scope);
.若scope未指定时Q则PageContext.removeAttribute(varName);
.语法3:
.假若target为MapӞ则Map.remove(property);
.假若target为JavaBeanӞpropertye指定的属性ؓnull
注意: var和scopeq两个属性不能用表辑ּ来表C,我们不能写成 scope="${ourScope}"或var="${a}"
<c:remove var="varName" [scope="{page|request|session|application}"]/>
----------------------------------------------------------------------------------------
名称 说明 EL cd 必须 默认?br /> var Ʋ移除变量的名称 N String 是 ? ?br /> scope var变量的JSP范围 N String 否 ?page
----------------------------------------------------------------------------------------
说明:
<c:remove>必须要有var属性,卌被移除的属性名Uͼscope则可有可无,?
<c:remove var="username" scope="session"/>
username变量从session范围U除。若我们不设定scopeQ则<c:remove>会移除所有范围名UCؓusername
的数据?/p>
<c:catch [var="varName"]>
...Ʋ抓取错误的部分...
</c:catch>
----------------------------------------------------------------------------------------
名称 说明 EL cd 必须 默认?br /> var 用来存储错误信息的变量 ?N String 否 ??br />-----------------------------------------------------------------------------------------
说明:
<c:catch>主要可能发生错误的部分攑֜<c:catch>?lt;/c:catch>之间。如果真的发生错误,可将错误
信息保存臛_量varName标量中,?
<c:catch var="message">
//可能发生错误的部?br /></catch>
另外Q当错误发生<c:catch>?lt;/c:catch>之间Ӟ只有<c:catch>?lt;/c:catch>之间的程序会被中止忽
略,但整个网不会被中止?/p>
程控制分类中包含四个标{?<c:if>,<c:choose>,<c:when>?lt;c:otherwise>?/p>
语法1Q没有body
<c:if test="testCondition" var="varName" [scope="{page|request|session|application}"]/>
<c:if test="testCondition" [var="varName"] [scope="{page|request|session|appliation}"]>
...body....
</c:if>
------------------------------------------------------------------------------------------------------------------------
名称 说明 EL cd 必须 默认?br />test 如果表达式的l果为true则执行body,false则相反 ?Y boolean 是 ? ?br />var 用来存储testq算后的l果Q即true或false N String 否 ? ?br />scope var变量的JSP范围 N String 否 ? page
------------------------------------------------------------------------------------------------------------------------
说明:
<c:if>标签必须要有test属性,body里除了能是静态文本之外可以是MJSP代码Q标{或HTML代码?/p>
<c:choose>
body(<when>?lt;otherwise>)
</c:choose>
限制:
<c:choose>的本地内容只能有:
.I白
.1或多?lt;c:when>
.0或多?lt;c:otherwise>
?
<c:choose>
condition1 ?true
</c:when>
condition2 ?true
</c:when>
condition1和conditon2都ؓfalse
</<c:otherwise >
</c:choose>
说明:
在同一?lt;c:choose>中,假如所有的<c:when>的test都不为trueӞ则执?lt;c:otherwise>的本体内宏V?br />在同一?lt;c:choose>中,假若有好几个<c:when>都会trueӞ只能有一?lt;c:when>成立?/p>
q代(Iterator)操作主要包含两个标签: <c:forEach>?lt;c:forTokens>?/p>
语法1: q代一集合对象之所有成?br /><c:forEach [var="varName"] items="collection" [varStatus="varStatusName"]
[begin="begin"] [end="end"] [step="step"]>
...body内容.....
<c:forEach>
begin="begin" end="end" [step="step"]>
...body内容.....
<c:forEach>
--------------------------------------------------------------------------------------------------------------------------
名称 说明 EL cd 必须 默认?br /> var 用来存放现在指到的成员 ?N String 否 ? ?/p>
Collection
Iterator 否 ? ?br />items 被P代的集合对象 Y Enumeration
Map
String
end l束的位| ?Y int 否 ? 最后一个成?br />setp 每次q代的间隔数 Y int 否 ? 1
-------------------------------------------------------------------------------------------------------------------------
Null ?错误处理
.假若items为nullӞ则表CZؓ一I的集合对象
.假若begin大于或等于itemsӞ则P代不q算
注意:
varName的范围只存在<c:forEach>的本体中Q如果超Z本题Q则不能取得varName的倹{如:
<c:forEach items="${atts}" var="item">
</c:forEach>
${item}</br>
${item}则不会显Citem的内宏V?lt;c:forEach>除了支持数组之外Q还有标准的J2SE的结合类型,例如:
ArrayList,List,LinkedList,Vector,Stack和Set{等Q另外包括java.util.Mapcȝ对象Q例?
HashMap,Hashtable,Properties,Provider和Attributes?/p>
varStatus="s",那么׃把信息存攑ֈ名称为s的属性当中。varStatus属性还提供另外四个属?index,
count,fist和lastQ它们个自的意义如下:
------------------------------------------------------------------------------------------
属性 ?cd 意义
index number 现在指到成员的烦?br /> count number d指到成员的d
first boolean 现在指到成员是否为第一?br /> last boolean 现在指到成员是否为最后一?br />-------------------------------------------------------------------------------------------
如下例子:
<%@page contentType="text/html;charset=gb2312"%>
<%@taglib prefix="c" uri=">
<%
String atts[] = new String[5];
atts[0]="hello";
atts[1]="this";
atts[2]="is";
atts[3]="a";
atts[4]="girl";
request.setAttritue("atts",atts);
%>
<c:forEach items="${atts}" var="item" varStatus="s">
<h2><c:out value="${item}"/>的四U属?gt;</h2>
index: ${s.index}</br>
count: ${s.count}</br>
first: ${s.first}</br>
last: ${s.last}</br>
</c:forEach>
<c:forTokens>:用来览一字符串中所有的成员Qv成员是由定义W号(delimiters)所分隔的?br />语法:
<c:forTokens items="stringFoTokens" delims="delimmmmiters" [var="varName"]
[varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"]>
...body内容....
</c:forTokens>
--------------------------------------------------------------------------------------------------------------------
名称 说明 EL cd 必须 默认?br /> var 用来存放现在指到的成员 ? Y String 否 ??br /> items 被P代的字符串 ? Y String 是 ??br /> delims 定义用来分割字符串的字符 N String 是 ??br /> varStatus 用来存放现在指到的相x员信息 ? N String 否 ??br /> begin 开始的位置 Y int 否 ? 0
end l束的位| ?Y int 否 ?最后一个成?br /> step 每次q代间隔敊W ? Y int 否 ?1
---------------------------------------------------------------------------------------------------------------------
限制:
.假若有begin属性时Qbegin必须大于{于0
.假若有end属性时Q必d于begin
.假若有step属性时Qstep必须大于{于1
.假如itmes为null?则表CZؓ有空的集合对?br />.假若begin大于{于items的大时Q则q代不运?/p>
<c:forToken items="A,B,C,D,E,F,G" delims="," var="item>
${item}
</c:forToken>
items属性也可以用ELQ例?
<%
String phonenumber="123-456-7899";
request.setAttribute("userPhone",phonenumber);
%>
<c:forTokens items="${userPhone}" delims="-" var="item">
${item}
</c:forTokens>
JSTL包含三个URL操作有关的标{?分别? <c:import>,<c:redirect>?lt;c:url>。它们的主要功能是:
用来其他文件的内容包含hQ网늚向导Q还有url的生?/p>
下蝲地址:http://proxool.sourceforge.net/ 最新版本ؓ: Proxool 0.9.0RC2
下蝲后解压羃Proxool 0.9.0RC2?把Proxool 0.9.0RC2/lib下的.jar文g部v到WEB-INF/lib?
看看下面的范?example for Oracle):
Proxool.jsp
<%@ page import="java.sql.*"%>
<%@ page contentType="text/html;charset=gb2312"%>
<html>
<head>
<title>Proxool.jsp</title>
</head>
<body>
<h2>使用Proxool.jsp</h2>
<%
Connection con=null;
Statement stmt=null;
ResultSet rs=null;
String ename="";
try
{
Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
con=DriverManager.getConnection("proxool.JSPBook:oracle.jdbc.driver.OracleDriver:
jdbc:oracle:thin:@yang:1521:orcl","scott","ss");
stmt=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
String query="select * from emp";
rs=stmt.executeQuery(query);
while(rs.next())
{
ename=rs.getString("ename");
%>
从emp表中取出姓名<%=ename%><br>
<%
}
stmt.close();
con.close();
}
catch(SQLException e)
{
out.println("发生异常"+e);
}
finally
{
try
{
if(con!=null)
{
con.close();
}
}
catch(SQLException ne)
{
out.println("SQLException:"+ne);
}
}
%>
</bdoy>
</html>
Proxool.jsp通过Proxoolq接池取得Connection,然后昄emp表格中的ename.
首先动态加载Proxool的driver:
Class.forName("org.logicalcobwebs.proxool.ProxoolDriver);
然后Proxool URL分ؓ三个部分: q接池的别名,JDBC驱动E序(DataBase JDBC Drivers),q接URL.
讑֮Proxool
proxool提供了许多连接池的参?例如:q接池最多有几个Connection,最有几个Connection,Connection生命期限{等?br />Proxool主要有以下四U设定方?
(一) 通过java.util.Properties对象来设?例如:
Properties info=new Properties();
info.setProperty("proxool.maximum-connection-count","20");
info.setProperty("proxool.house-keeping-test-sql","select CURRENT_DATE");
info.setProperty("user","your DB username");
info.setProperty("password","your DB prassword");
String alias="Develop"; //Proxoolq接池的别名,Ҏ自己喜好随便写^_^
String driverClass="oracle.jdbc.driver.OracleDriver";
String driverUrl="jdbc:oracle:thin:@127.0.0.1:1521:DatabaseName";
String url="proxool."+alias+":"+drvierClass+":"+driverUrl;
connection=DrvierManager.getConnection(rul,info);
(? 通过XML文g来设?例如:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!--the proxool configuration can be embedded within your own application's. Anything outside the "proxool" tag is ignored.-->
<proxool>
<alias>Develop</alias>
<driver-url>
jdbc:oracle:thin:@127.0.0.1:1521:DatabaseName
</driver-url>
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<driver-properties>
<property name="user" value="your database name"/>
<property name="password" value="your DB password"/>
</driver-properties>
<maximum-connection-count>10</maximum-connection-count>
<house-keeping-test-sql>select CURRENT_DATE</house-keeping-test-sql>
</proxool>
然后通过JAXPConfigurationdXML文g:
JAXPConfigurator.configure("/WEB-INF/classes/proxool.xml",false);
(? 先通过Properties文g来设?例如:
jdbc-0.proxool.alias=Develop
jdbc-0.proxool.drvier-url=jdbc:oracle:thin:@127.0.0.1:1521:DatabaseName
jdbc-0.proxool.driver-class=oracle.jdbc.driver.OracleDriver;
jdbc-0.user=your database username
jdbc-0.password=your database password
jdbc-0.proxool.maximum-connection-count=10
jdbc-0.proxool.house-keeping-test-sql=select CURRENT_DATE
然后通过PropertyConfiguratordProperties文g:
PropertyConfigurator.configure("/WEB-INF/classes/Proxool.properties");
(?在web.xml?通过servlet来设?Ҏ又有三种,前两U是按照格式来的:
1.XML文g
<servlet>
<servlet-name>ServletConfigurator</servlet-name>
<servlet-class>
org.logicalcobwebs.proxool.configuration.ServletConfigurator
</servlet-class>
<init-param>
<param-name>xmlFile</param-name>
<param-value>WEB-INF/classes/Proxool.xml</param-value>
</init-param>
<load-on-start>1</load-on-start>
</servlet>
2.Properties文g
<servlet>
<servlet-name>ServletConfigurator</servlet-name>
<servlet-class>
org.logicalcobwebs.proxool.configuration.ServletConfigurator
</servlet-class>
<init-param>
<param-name>propertyFile</param-name>
<param-value>WEB-INF/classes/Proxool.properties</param-value>
</init-param>
<load-on-start>1</load-on-start>
</servlet>
3.Init Prameter
<servlet>
<servlet-name>ServletConfigurator</servlet-name>
<servlet-class>
org.logicalcobwebs.proxool.configuration.ServletConfigurator
</servlet-class>
<init-param>
<init-name>jdbc-0.proxool.alias</init-param>
<init-value>Develop</init-value>
</init-param>
<init-param>
<init-name>jdbc-0.proxool.driver-rul</init-param>
<init-value>
jdbc:oracle:thin:@127.0.0.1:1521:DatabaseName
</init-value>
</init-param>
<init-param>
<init-name>jdbc-0.proxool.driver-class</init-param>
<init-value>oracle.jdbc.driver.OracleDriver</init-value>
<init-param>
</servlet>
大家使用W四U方?好处在于当Container启动?Proxool的参C自动讑֮加蝲到内存中,原因在于:
<servlet>
......?br /><load-on-start>1</load-on-start>
一个完整的CZ如下:
web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
.......?br /> <servlet>
<servlet-name>ServletConfigurator</servlet-name>
<servlet-class>
org.logicalcobwebs.proxool.configuration.ServletConfigurator
</servlet-class>
<init-param>
<param-name>propertyFile</param-name>
<param-value>WEB-INF/classes/Proxool.properties</param-value>
</init-param>
<load-on-start>1</load-on-start>
</servlet>
.......?br /></web-app>
Proxool.proterties
jdbc-0.proxool.alias=Develop
jdbc-0.proxool.driver-class=oracle.jdbc.driver.OracleDriver
jdbc-0.proxool.driver.url=jdbc:oracle:thin:@127.0.0.1:1521:DatabaseName
jdbc-0.proxool.maximum-connection-count=10
jdbc-0.proxool.prototype-count=4
jdbc-0.proxool.house-keeping-test-sql=select CURRENT_DATE
jdbc=0.proxool.verbose=true
我们可以用下面的Test Page来进行测?br />Proxool-config.jsp
____________________________________________________
<%@ page import="java.sql.*"%>
<%@ page contentType="text/html;charset=gb2312"%>
<html>
<head>
<title>Proxool.jsp</title>
</head>
<body>
<h2>使用Proxool.jsp</h2>
<%
Connection con=null;
Statement stmt=null;
ResultSet rs=null;
String ename="";
try
{
con=DriverManager.getConnection("proxool.Develop");
stmt=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
String query="select * from emp";
rs=stmt.executeQuery(query);
while(rs.next())
{
ename=rs.getString("ename");
%>
从emp表中取出姓名<%=ename%><br>
<%
}
stmt.close();
con.close();
}
catch(SQLException e)
{
out.println("发生异常"+e);
}
finally
{
try
{
if(con!=null)
{
con.close();
}
}
catch(SQLException ne)
{
out.println("SQLException:"+ne);
}
}
%>
</bdoy>
</html>
试l果?
=====================================
使用Proxool.jsp
从emp表中取出姓名SMITH
从emp表中取出姓名ALLEN
从emp表中取出姓名WARD
从emp表中取出姓名JONES
从emp表中取出姓名MARTIN
从emp表中取出姓名BLAKE
从emp表中取出姓名CLARK
从emp表中取出姓名SCOTT
从emp表中取出姓名KING
从emp表中取出姓名TURNER
从emp表中取出姓名ADAMS
从emp表中取出姓名JAMES
从emp表中取出姓名FORD
从emp表中取出姓名MILLER
从emp表中取出姓名feiyang
从emp表中取出姓名yang
从emp表中取出姓名feifei
从emp表中取出姓名fei
]]>
JNDI全名为Java Naming and Directory Interface.JNDI主要提供应用E序所需要资源上命名与目录服?在Java EE环境?JNDI扮演了一个很重要的角?
它提供了一个接口让用户在不知道资源所在位|的情Ş?取得该资源服?
好比网l磁盘驱动器的功能一栗如果有Z先将另一台机器上的磁盘驱动器接到用户的机器上,用户在用的时候根本就分L不出现在的驱动器是存在本?
q是在另一端的机器?用户只需取得资源来用,Ҏ׃知道资源在什么地斏V?br /> JNDIq个接口基本上是LDAP,LDAP全名为Lightweight Directory Access Protocol.
要设定JNDI的JDBC数据源和DBCPq接池需要做以下的工?(for example Oracle DataBase)
一. 安装JDBC Driver
你DB的JDBC Driver部v到{Tomcat_Install]\common\lib目录下?br /> ? 讑֮Tomcat下的server.xml
修改{Tomcat_Install|\conf\server.xml文g中你的站台标{N?lt;Host></Host>之间的内?如下:
server.xml
<Host>
<Context path="/Develop" docBase="Develop" debug="0" reloadable="true" crossContext="true">
<Resource name="jdbc/dy" auth="Container" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/dy">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>oracle.jdbc.driver.OracleDriver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:oracle:thin:@yang:1521:orcl</value>
</parameter>
<parameter>
<name>username</name>
<value>scott</value>
</parameter>
<parameter>
<name>password</name>
<value>ss</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>20</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>10</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>-1</value>
</parameter>
</ResourceParams>
</Context>
</Host>
上述C֮所表示的意思是在Develop站台?定义一个JDBC数据来源,名称为jdbc/dy.
通过以下的代码来讄的这个jdbc/dy的数据来源和DBCPq接?
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
讑֮使用DBCPq接?q是有Jakarta Projectl织所制定的连接池E序,它一hOpenSource?
参数说明:
<Context></Context>用于讄你的站台.
<Context>标签中的path="/Develop"代表|站名称,? http://IP_DomaninName/Develop; docBase="Develop"代表站台的目录位|?debug则是讑֮debug level
,0表示提供最的信息,9表示提供最都多的信?reloadable则表CTomcat执行?当class,web.xml被更新时,都会自动重新加蝲,不需要重新启动Tomcat;
maxActive表示q接池的最大数据库q接?设ؓ0表示无限?maxIdle表示讑֮q接池中最能有几个Connection,若ؓ0表示不限?maxWait 最大徏立连接等待时间?br /> 如果过此时间将接到异常,设ؓQ?表示无限?单位为ms;driverClassName JDBC驱动E序;url表示数据库连接字W串.
? 讑֮应用站台中的web.xml
eg:讑֮Develop的web.xml如下:
<resource-ref>
<description>JNDI JDBC DataSource of Develop</description> //一个描q?br /> <res-ref-name>jdbc/dy</res-ref-name> //q里必须Z之前指定?lt;ResourceParams name="jdbc/dy">
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
? 使用JDBC数据来源获得Connection对象
Context initContext=new InitialContext();
Context envContext=(Context)initContext.lookup("java:/comp/env");
或?br /> Context envContext=(Context)initContext.lookup("java:comp/env");
DataSourceds conn=(DataSource)envContext.lookup("jdbc/dy");
conn=ds.getConnection();
按照q四个步骤做下来?那么你就可以写个Test Page来测试一下了.
Test Page1:
_________________________________________________________________________________________________________
testpool.jsp
<!--试JNID数据源的配置-->
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="javax.naming.Context"%>
<%@ page import="javax.sql.DataSource"%>
<%@ page import="javax.naming.InitialContext"%>
<%@ page import="java.sql.*"%>
<%
DataSource ds=null;
try
{
Context initCtx=new InitialContext();
Context envCtx=(Context)initCtx.lookup("java:comp/env");
//从Context中loopup 数据?br /> ds=(DataSource)envCtx.lookup("jdbc/dy");
if(ds!=null)
{
out.println("已经获得DataSource!");
out.println("<br>");
Connection conn=ds.getConnection();
Statement stmt=conn.createStatement();
ResultSet rst=stmt.executeQuery("select * from emp");
out.println("以下是从数据库里d来的数据");
out.println("<hr>");
while(rst.next())
{
out.println("empName:"+rst.getString("ename"));
out.println("<br>");
}
}
else
out.println("q接p|");
}
catch(Exception e)
{
out.println(e);
}
%>
如果成功那么输出l果:
========================================
已经获得DataSource!
以下是从数据库里d来的数据:
empName:SMITH
empName:ALLEN
empName:WARD
empName:JONES
empName:MARTIN
empName:BLAKE
empName:CLARK
empName:SCOTT
empName:KING
empName:TURNER
empName:ADAMS
empName:JAMES
empName:FORD
empName:MILLER
empName:feiyang
empName:yang
empName:feifei
empName:fei
]]>