??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲精品久久久久久久久,91九色精品,精品电影一区二区http://www.aygfsteel.com/dorydoo/category/12565.htmlAction Action Actionzh-cnWed, 28 Feb 2007 21:11:43 GMTWed, 28 Feb 2007 21:11:43 GMT60JSTL(1.1)之Core tag Librayhttp://www.aygfsteel.com/dorydoo/archive/2006/07/04/56525.html多力宇扬多力宇扬Tue, 04 Jul 2006 05:47:00 GMThttp://www.aygfsteel.com/dorydoo/archive/2006/07/04/56525.htmlhttp://www.aygfsteel.com/dorydoo/comments/56525.htmlhttp://www.aygfsteel.com/dorydoo/archive/2006/07/04/56525.html#Feedback0http://www.aygfsteel.com/dorydoo/comments/commentRss/56525.htmlhttp://www.aygfsteel.com/dorydoo/services/trackbacks/56525.htmlJavaServer Pages Standard Tag Libray(1.1),其中文名字ؓJSP标准标签函数库。JSTL是一个标准的?br />制定好的标签库,可以应用于各U领域,?基本输入输出Q流E控Ӟ循环QXML文g剖析Q数据库?br />询以及国际化和文字格式标准化的应用等。JSTL所提供的标{ֺ分ؓ以下五大c?
 核心标签?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
                                                                          param
                                                                       url
                                 URL操作                          param
                                                                     redirect
                                                                           param
------------------------------------------------------------------------------------------
在JSP中用JSTL中的标签库时Q必M?lt;%@taglib%>指oQƈ且设定prefix和uri的值得Q通常讑֮:
<%@taglib prefix="c" uri=">
q样可以用核心标{ֺ了?/p>

.表达式操?br /> 表达式操作分cM包含四个标签: <c:out>,<c:set>,<c:remove>?lt;c:catch>
<c:out>Q重要用来显C数据的内容Q类g<%=scripting-language%>。它的语法如?
语法1: 没有body内容
<c:out value="value" [escapeXml="{true|false}"] [default="defaultValue"]/>

语法2: 有body内容
<c:out value="value"  [escapeXml="{true|false}"]>
  default value
</c:out>

Attribute
-----------------------------------------------------------------------------------------------------------------------
 名称                      说明                                                               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>

<c:set>:主要用来把变量存储至JSP范围或是JavaBean的属性中?br />语法1: 没有body
value的值存储至范围为scope的varName变量之中
<c:set value="value" var="varName" [scope="{page|request|session|application}"]/>

语法2: 有body
body内容存储臌围ؓscope的varName变量之中
<c:set value="value" [scope="{page|request|session|application}"]>
  body.....
</c:set>

语法3: value的值存储至target对象属性中
<c:set value="value" target="target" property="propertyNmae"/>

语法4: body内容的数据存储至target对象属性中
<c:set target="target" property="propertyNmae">
 body....
</c:set>

Attribute
----------------------------------------------------------------------------------------
 名称                    说明                                              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>:主要用来U除变量?br />语法:
<c:remove var="varName" [scope="{page|request|session|application}"]/>

Attribute
----------------------------------------------------------------------------------------
 名称                 说明                                     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>:主要用来处理产生错误的异常情况,q且信息保存v来?br />语法:
<c:catch [var="varName"]>
 ...Ʋ抓取错误的部分...
</c:catch>

Attribute
----------------------------------------------------------------------------------------
 名称                 说明                                           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>

<c:if>:的用途和我们在一般程序中写的if一栗?br />语法:
语法1Q没有body
<c:if test="testCondition" var="varName" [scope="{page|request|session|application}"]/>

语法2: 有body
<c:if test="testCondition" [var="varName"] [scope="{page|request|session|appliation}"]>
  ...body....
</c:if>

Attribute
------------------------------------------------------------------------------------------------------------------------
 名称                           说明                                                                           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>:本n只当?lt;c:when>?lt;c:otherwise>的父标签?br />语法:
<c:choose>
  body(<when>?lt;otherwise>)
</c:choose>
限制:
<c:choose>的本地内容只能有:
 .I白
 .1或多?lt;c:when>
 .0或多?lt;c:otherwise>
?
<c:choose>

 <c:when test="${condition1}">
   condition1 ?true
 </c:when>

 <c:when test="${condition2}">
   condition2 ?true
 </c:when>

 <c:otherwise>
   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代操作
q代(Iterator)操作主要包含两个标签: <c:forEach>?lt;c:forTokens>?/p>

<c:forEach>为@环控Ӟ它可以将集合(Collection)中的成员循序览一遍。运做方式ؓ当条件符?br />Ӟ׃持箋重复执行<c:forEach>的body内容?br />语法:
语法1: q代一集合对象之所有成?br /><c:forEach [var="varName"] items="collection" [varStatus="varStatusName"]
           [begin="begin"] [end="end"] [step="step"]>
 ...body内容.....
<c:forEach>

语法2: q代指定的次?br /><c:forEach [var="varName"] [varStatus="varStatusName"]
           begin="begin" end="end" [step="step"]>
 ...body内容.....
<c:forEach>

Attribute
--------------------------------------------------------------------------------------------------------------------------
 名称                 说明                                                   EL     cd             必须       默认?br /> var          用来存放现在指到的成员                        ?N      String               否        ? ?/p>

                                                                                               Arrays
                                                                                              Collection
                                                                                               Iterator             否        ? ?br />items         被P代的集合对象                                    Y        Enumeration            
                                                                                               Map
                                                                                                String

varStatus     用来存放到指到的相关成员信息          N        String               否         ??br />begin           开始的位置                                             Y          int                    否        ? 0
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>

另外<c:forEach>q提供了varStatus属性,主要用来存放现在指到成员的相关信息。例如:我们写成
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>
<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>

Attribute
--------------------------------------------------------------------------------------------------------------------
 名称                                    说明                                               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

Null ?错误处理
.假如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>

URL操作
JSTL包含三个URL操作有关的标{?分别? <c:import>,<c:redirect>?lt;c:url>。它们的主要功能是:
用来其他文件的内容包含hQ网늚向导Q还有url的生?/p>

多力宇扬 2006-07-04 13:47 发表评论
]]>
q接?Proxool http://www.aygfsteel.com/dorydoo/archive/2006/06/28/55470.html多力宇扬多力宇扬Wed, 28 Jun 2006 01:51:00 GMThttp://www.aygfsteel.com/dorydoo/archive/2006/06/28/55470.htmlhttp://www.aygfsteel.com/dorydoo/comments/55470.htmlhttp://www.aygfsteel.com/dorydoo/archive/2006/06/28/55470.html#Feedback0http://www.aygfsteel.com/dorydoo/comments/commentRss/55470.htmlhttp://www.aygfsteel.com/dorydoo/services/trackbacks/55470.html  Tomcat?.x开始就可以在server.xml里配|数据源,后来用到了ProxoolҎ了一下觉得Proxool更方便更好用,它提供了更多的方??推荐大家使用.
  下蝲地址: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

多力宇扬 2006-06-28 09:51 发表评论
]]>
JDNI---数据来源(Data Source) http://www.aygfsteel.com/dorydoo/archive/2006/06/28/55469.html多力宇扬多力宇扬Wed, 28 Jun 2006 01:48:00 GMThttp://www.aygfsteel.com/dorydoo/archive/2006/06/28/55469.htmlhttp://www.aygfsteel.com/dorydoo/comments/55469.htmlhttp://www.aygfsteel.com/dorydoo/archive/2006/06/28/55469.html#Feedback0http://www.aygfsteel.com/dorydoo/comments/commentRss/55469.htmlhttp://www.aygfsteel.com/dorydoo/services/trackbacks/55469.htmlTomcat下JNDI的配|?/font>

    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


多力宇扬 2006-06-28 09:48 发表评论
]]>
վ֩ģ壺 ɽ| ½| | | | | | | ɽ| Ѩ| ڳ| ޻| | ˷| ɽ| ۰| Դ| Т| | | ˱| | | | | ʯ| ʯ| û| | | ¡Ң| ʡ| ɽ| Ӱ| | ±| ͨ| | ˫Ѽɽ| Т| |