﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-行动创造奇迹-随笔分类-View tier</title><link>http://www.blogjava.net/dorydoo/category/12565.html</link><description>Action Action Action</description><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 21:11:43 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 21:11:43 GMT</pubDate><ttl>60</ttl><item><title>JSTL(1.1)之Core tag Libray</title><link>http://www.blogjava.net/dorydoo/archive/2006/07/04/56525.html</link><dc:creator>多力宇扬</dc:creator><author>多力宇扬</author><pubDate>Tue, 04 Jul 2006 05:47:00 GMT</pubDate><guid>http://www.blogjava.net/dorydoo/archive/2006/07/04/56525.html</guid><wfw:comment>http://www.blogjava.net/dorydoo/comments/56525.html</wfw:comment><comments>http://www.blogjava.net/dorydoo/archive/2006/07/04/56525.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dorydoo/comments/commentRss/56525.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dorydoo/services/trackbacks/56525.html</trackback:ping><description><![CDATA[
		<p>JavaServer Pages Standard Tag Libray(1.1),其中文名字为JSP标准标签函数库。JSTL是一个标准的已<br />制定好的标签库，可以应用于各种领域，如:基本输入输出，流程控制，循环，XML文件剖析，数据库查<br />询以及国际化和文字格式标准化的应用等。JSTL所提供的标签库分为以下五大类:<br /> 核心标签库(Core tag Liabry)<br /> I18N格式标签库(I18N-capable formatting tag libary)<br /> SQL标签库(SQL tag Libary)<br /> XML标签库(XML tag Libary)<br /> 函数标签库(Functions tag Libary)</p>
		<p>核心标签库(Core tag Liabry)主要有:基本输入输出，流程控制，迭代操作和URL操作。<br /> ----------------------------------------------------------------------------<br />      分类            功能分类                 标签分类<br />                                                             out<br />                                                              set<br />                          表达式操作                     remove<br />                                                                   catch<br />   <br />     Core                                                      if<br />                                                                   choose<br />                           流程控制                            when<br />                                                                       outherwise</p>
		<p>                                                                    forEach<br />                              迭代操作                      forTokens </p>
		<p>                                                                       import<br />                                                                          param<br />                                                                       url<br />                                 URL操作                          param<br />                                                                     redirect<br />                                                                           param<br />------------------------------------------------------------------------------------------<br />在JSP中使用JSTL中的标签库时，必须使用&lt;<a href="mailto:%@taglib%">%@taglib%</a>&gt;指令，并且设定prefix和uri的值得，通常设定:<br />&lt;<a href="mailto:%@taglib">%@taglib</a> prefix="c" uri="<a href="http://java.sun.com/jsp/jstl/core&quot;%">http://java.sun.com/jsp/jstl/core"%</a>&gt;<br />这样就可以使用核心标签库了。</p>
		<p>.表达式操作<br /> 表达式操作分类中包含四个标签: &lt;c:out&gt;,&lt;c:set&gt;,&lt;c:remove&gt;和&lt;c:catch&gt;<br />&lt;c:out&gt;：重要用来显示数据的内容，类似与&lt;%=scripting-language%&gt;。它的语法如下:<br />语法1: 没有body内容<br />&lt;c:out value="value" [escapeXml="{true|false}"] [default="defaultValue"]/&gt;</p>
		<p>语法2: 有body内容<br />&lt;c:out value="value"  [escapeXml="{true|false}"]&gt;<br />  default value<br />&lt;/c:out&gt;</p>
		<p>Attribute<br />-----------------------------------------------------------------------------------------------------------------------<br /> 名称                      说明                                                               EL     类型     必须       默认值<br />value                  需要显示的值                                                     Y      Object    是          无<br />default               如果value值为null,则显示default的值                  Y      Object    否          无<br />escapeXml        是否转换特殊字符，如: &lt;转换为&amp;It                 Y      Object    否          true<br />----------------------------------------------------------------------------------------------------------------------<br />Null和错误说明<br />假若value为null,会显示default的值；假若没有设定default的值，则会显示一个空的字符串。</p>
		<p>&lt;c:set&gt;:主要用来把变量存储至JSP范围或是JavaBean的属性中。<br />语法1: 没有body<br />将value的值存储至范围为scope的varName变量之中<br />&lt;c:set value="value" var="varName" [scope="{page|request|session|application}"]/&gt;</p>
		<p>语法2: 有body<br />将body内容存储至范围为scope的varName变量之中<br />&lt;c:set value="value" [scope="{page|request|session|application}"]&gt;<br />  body.....<br />&lt;/c:set&gt;</p>
		<p>语法3: 将value的值存储至target对象属性中<br />&lt;c:set value="value" target="target" property="propertyNmae"/&gt;</p>
		<p>语法4: 将body内容的数据存储至target对象属性中<br />&lt;c:set target="target" property="propertyNmae"&gt;<br /> body....<br />&lt;/c:set&gt;</p>
		<p>Attribute<br />----------------------------------------------------------------------------------------<br /> 名称                    说明                                              EL     类型      必须      默认值<br />value             要被存储的值                                      Y      Object      否          无<br />var                欲存入的变量名                                  N      String        否          无<br />scope            var变量的JSP范围                               N      String        否         page<br />target            为一JavaBean或java.util.Map对象        Y      Object       否          无<br />property        指定target对象属性                              Y      String        否          无<br />------------------------------------------------------------------------------------------<br />Null 和 错误处理:<br />语法3和语法4会产生异常错误,有以下两种情况:<br /> .target 为null<br /> .target 不是java.util.Map或JavaBean对象<br />假若value为null时:将由存储变量改为移除变量<br /> .语法1: 由var和scope所定义的变量，将被移除<br />    .若scope已指定时，则PageContext.removeAttribute(varName,scope);<br />    .若scope未指定时，则PageContext.removeAttribute(varName);<br /> .语法3: <br />    .假若target为Map时，则Map.remove(property);<br />    .假若target为JavaBean时，propertye指定的属性为null<br />注意: var和scope这两个属性不能使用表达式来表示，我们不能写成 scope="${ourScope}"或var="${a}"</p>
		<p>&lt;c:remove&gt;:主要用来移除变量。<br />语法:<br />&lt;c:remove var="varName" [scope="{page|request|session|application}"]/&gt;</p>
		<p>Attribute<br />----------------------------------------------------------------------------------------<br /> 名称                 说明                                     EL     类型     必须       默认值<br /> var             欲移除变量的名称                     N      String     是              无<br /> scope           var变量的JSP范围                    N      String     否             page<br />----------------------------------------------------------------------------------------<br />说明:<br />&lt;c:remove&gt;必须要有var属性，即要被移除的属性名称，scope则可有可无，如:<br />&lt;c:remove var="username" scope="session"/&gt;<br />将username变量从session范围移除。若我们不设定scope，则&lt;c:remove&gt;会移除所有范围名称为username<br />的数据。</p>
		<p>&lt;c:catch&gt;:主要用来处理产生错误的异常情况，并且将信息保存起来。<br />语法:<br />&lt;c:catch [var="varName"]&gt;<br /> ...欲抓取错误的部分...<br />&lt;/c:catch&gt;</p>
		<p>Attribute<br />----------------------------------------------------------------------------------------<br /> 名称                 说明                                           EL     类型     必须       默认值<br /> var           用来存储错误信息的变量                 N      String       否          无<br />-----------------------------------------------------------------------------------------<br />说明:<br />&lt;c:catch&gt;主要将可能发生错误的部分放在&lt;c:catch&gt;和&lt;/c:catch&gt;之间。如果真的发生错误，可将错误<br />信息保存至变量varName标量中，如:<br />&lt;c:catch var="message"&gt;<br />    //可能发生错误的部分<br />&lt;/catch&gt;<br />另外，当错误发生&lt;c:catch&gt;和&lt;/c:catch&gt;之间时，只有&lt;c:catch&gt;和&lt;/c:catch&gt;之间的程序会被中止忽<br />略，但整个网页不会被中止。</p>
		<p>流程控制<br />流程控制分类中包含四个标签:&lt;c:if&gt;,&lt;c:choose&gt;,&lt;c:when&gt;和&lt;c:otherwise&gt;。</p>
		<p>&lt;c:if&gt;:的用途和我们在一般程序中写的if一样。<br />语法:<br />语法1：没有body<br />&lt;c:if test="testCondition" var="varName" [scope="{page|request|session|application}"]/&gt;</p>
		<p>语法2: 有body<br />&lt;c:if test="testCondition" [var="varName"] [scope="{page|request|session|appliation}"]&gt;<br />  ...body....<br />&lt;/c:if&gt;</p>
		<p>Attribute<br />------------------------------------------------------------------------------------------------------------------------<br /> 名称                           说明                                                                           EL     类型        必须       默认值<br />test                   如果表达式的结果为true则执行body,false则相反              Y      boolean       是           无<br />var                   用来存储test运算后的结果，即true或false                           N     String          否           无<br />scope               var变量的JSP范围                                                                  N     String          否          page<br />------------------------------------------------------------------------------------------------------------------------<br />说明:<br />&lt;c:if&gt;标签必须要有test属性，body里除了能是静态文本之外可以是任何JSP代码，标签或HTML代码。</p>
		<p>&lt;c:choose&gt;:本身只当作&lt;c:when&gt;和&lt;c:otherwise&gt;的父标签。<br />语法:<br />&lt;c:choose&gt;<br />  body(&lt;when&gt;和&lt;otherwise&gt;)<br />&lt;/c:choose&gt;<br />限制:<br />&lt;c:choose&gt;的本地内容只能有:<br /> .空白<br /> .1或多个&lt;c:when&gt;<br /> .0或多个&lt;c:otherwise&gt;<br />如:<br />&lt;c:choose&gt;</p>
		<p> &lt;c:when test="${condition1}"&gt;<br />   condition1 为 true<br /> &lt;/c:when&gt;</p>
		<p> &lt;c:when test="${condition2}"&gt;<br />   condition2 为 true<br /> &lt;/c:when&gt;</p>
		<p> &lt;c:otherwise&gt;<br />   condition1和conditon2都为false<br /> &lt;/&lt;c:otherwise &gt;<br /> <br />&lt;/c:choose&gt;<br />说明:<br />在同一个&lt;c:choose&gt;中，假如所有的&lt;c:when&gt;的test都不为true时，则执行&lt;c:otherwise&gt;的本体内容。<br />在同一个&lt;c:choose&gt;中，假若有好几个&lt;c:when&gt;都会true时，只能有一个&lt;c:when&gt;成立。</p>
		<p>迭代操作<br />迭代(Iterator)操作主要包含两个标签: &lt;c:forEach&gt;和&lt;c:forTokens&gt;。</p>
		<p>&lt;c:forEach&gt;为循环控制，它可以将集合(Collection)中的成员循序浏览一遍。运做方式为当条件符合<br />时，就会持续重复执行&lt;c:forEach&gt;的body内容。<br />语法:<br />语法1: 迭代一集合对象之所有成员<br />&lt;c:forEach [var="varName"] items="collection" [varStatus="varStatusName"]<br />           [begin="begin"] [end="end"] [step="step"]&gt;<br /> ...body内容.....<br />&lt;c:forEach&gt;</p>
		<p>语法2: 迭代指定的次数<br />&lt;c:forEach [var="varName"] [varStatus="varStatusName"]<br />           begin="begin" end="end" [step="step"]&gt;<br /> ...body内容.....<br />&lt;c:forEach&gt;</p>
		<p>Attribute<br />--------------------------------------------------------------------------------------------------------------------------<br /> 名称                 说明                                                   EL     类型             必须       默认值<br /> var          用来存放现在指到的成员                          N      String               否           无</p>
		<p>                                                                                               Arrays<br />                                                                                              Collection<br />                                                                                               Iterator             否           无<br />items         被迭代的集合对象                                    Y        Enumeration            <br />                                                                                               Map<br />                                                                                                String</p>
		<p>varStatus     用来存放到指到的相关成员信息          N        String               否           无<br />begin           开始的位置                                             Y          int                    否           0<br />end              结束的位置                                             Y          int                   否           最后一个成员<br />setp             每次迭代的间隔数                                 Y          int                   否            1<br />-------------------------------------------------------------------------------------------------------------------------<br />Null 和 错误处理<br />.假若items为null时，则表示为一空的集合对象<br />.假若begin大于或等于items时，则迭代不运算<br />注意:<br />varName的范围只存在&lt;c:forEach&gt;的本体中，如果超出了本题，则不能取得varName的值。如:<br />&lt;c:forEach items="${atts}" var="item"&gt;<br />&lt;/c:forEach&gt;<br />${item}&lt;/br&gt;<br />${item}则不会显示item的内容。&lt;c:forEach&gt;除了支持数组之外，还有标准的J2SE的结合类型，例如:<br />ArrayList,List,LinkedList,Vector,Stack和Set等等；另外包括java.util.Map类的对象，例如:<br />HashMap,Hashtable,Properties,Provider和Attributes。</p>
		<p>另外&lt;c:forEach&gt;还提供了varStatus属性，主要用来存放现在指到成员的相关信息。例如：我们写成<br />varStatus="s",那么就会把信息存放到名称为s的属性当中。varStatus属性还提供另外四个属性:index,<br />count,fist和last，它们个自的意义如下:<br />------------------------------------------------------------------------------------------<br />   属性                    类型                                   意义<br />   index                   number                      现在指到成员的索引<br />   count                   number                      总共指到成员的总和<br />   first                     boolean                     现在指到成员是否为第一个<br />   last                     boolean                     现在指到成员是否为最后一个<br />-------------------------------------------------------------------------------------------<br />如下例子:<br />&lt;<a href="mailto:%@page">%@page</a> contentType="text/html;charset=gb2312"%&gt;<br />&lt;<a href="mailto:%@taglib">%@taglib</a> prefix="c" uri="<a href="http://java.sun.com/jsp/jstl/core&quot;%">http://java.sun.com/jsp/jstl/core"%</a>&gt;<br />&lt;%<br /> String atts[] = new String[5];<br /> atts[0]="hello";<br /> atts[1]="this";<br /> atts[2]="is";<br /> atts[3]="a";<br /> atts[4]="girl";<br /> request.setAttritue("atts",atts);<br />%&gt;<br />&lt;c:forEach items="${atts}" var="item" varStatus="s"&gt;<br />&lt;h2&gt;&lt;c:out value="${item}"/&gt;的四种属性&gt;&lt;/h2&gt;<br /> index: ${s.index}&lt;/br&gt;<br /> count: ${s.count}&lt;/br&gt;<br /> first: ${s.first}&lt;/br&gt;<br /> last:  ${s.last}&lt;/br&gt; <br />&lt;/c:forEach&gt;</p>
		<p>&lt;c:forTokens&gt;<br />&lt;c:forTokens&gt;:用来浏览一字符串中所有的成员，起成员是由定义符号(delimiters)所分隔的。<br />语法:<br />&lt;c:forTokens items="stringFoTokens" delims="delimmmmiters" [var="varName"]<br />             [varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"]&gt;<br /> ...body内容....<br />&lt;/c:forTokens&gt;</p>
		<p>Attribute<br />--------------------------------------------------------------------------------------------------------------------<br /> 名称                                    说明                                               EL     类型      必须       默认值<br /> var                   用来存放现在指到的成员                                Y      String       否          无<br /> items                被迭代的字符串                                                Y      String       是          无<br /> delims              定义用来分割字符串的字符                            N      String       是          无<br /> varStatus          用来存放现在指到的相关成员信息                N      String       否          无<br /> begin               开始的位置                                                         Y       int           否           0<br /> end                 结束的位置                                                          Y       int          否           最后一个成员<br /> step                每次迭代间隔数                                                  Y       int           否           1<br />---------------------------------------------------------------------------------------------------------------------<br />限制:<br />.假若有begin属性时，begin必须大于等于0<br />.假若有end属性时，必须大于begin<br />.假若有step属性时，step必须大于等于1</p>
		<p>Null 和 错误处理<br />.假如itmes为null时,则表示为有空的集合对象<br />.假若begin大于等于items的大小时，则迭代不运算</p>
		<p>例子:<br />&lt;c:forToken items="A,B,C,D,E,F,G" delims="," var="item&gt;<br />${item}<br />&lt;/c:forToken&gt;<br />items属性也可以用EL，例如:<br />&lt;%<br /> String phonenumber="123-456-7899";<br /> request.setAttribute("userPhone",phonenumber);<br />%&gt;<br />&lt;c:forTokens items="${userPhone}" delims="-" var="item"&gt;<br />${item}<br />&lt;/c:forTokens&gt;</p>
		<p>URL操作<br />JSTL包含三个URL操作有关的标签,分别是: &lt;c:import&gt;,&lt;c:redirect&gt;和&lt;c:url&gt;。它们的主要功能是：<br />用来将其他文件的内容包含起来，网页的向导，还有url的产生。</p>
<img src ="http://www.blogjava.net/dorydoo/aggbug/56525.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dorydoo/" target="_blank">多力宇扬</a> 2006-07-04 13:47 <a href="http://www.blogjava.net/dorydoo/archive/2006/07/04/56525.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>连接池-Proxool </title><link>http://www.blogjava.net/dorydoo/archive/2006/06/28/55470.html</link><dc:creator>多力宇扬</dc:creator><author>多力宇扬</author><pubDate>Wed, 28 Jun 2006 01:51:00 GMT</pubDate><guid>http://www.blogjava.net/dorydoo/archive/2006/06/28/55470.html</guid><wfw:comment>http://www.blogjava.net/dorydoo/comments/55470.html</wfw:comment><comments>http://www.blogjava.net/dorydoo/archive/2006/06/28/55470.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dorydoo/comments/commentRss/55470.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dorydoo/services/trackbacks/55470.html</trackback:ping><description><![CDATA[
		<div class="postText">  Tomcat从5.x开始就可以在server.xml里配置数据源,后来用到了Proxool对比了一下觉得Proxool更方便更好用,它提供了更多的方法,简单,推荐大家使用.<br />  下载地址:http://proxool.sourceforge.net/ 最新版本为: Proxool 0.9.0RC2<br />  下载后解压缩Proxool 0.9.0RC2后,把Proxool 0.9.0RC2/lib下的.jar文件部署到WEB-INF/lib下.<br />  看看下面的范例(example for Oracle):<br />  Proxool.jsp<br /><br />&lt;%@ page import="java.sql.*"%&gt;<br />&lt;%@ page contentType="text/html;charset=gb2312"%&gt;<br /><br />&lt;html&gt;<br />    &lt;head&gt;<br />        &lt;title&gt;Proxool.jsp&lt;/title&gt;<br />    &lt;/head&gt;<br />    &lt;body&gt;<br />        &lt;h2&gt;使用Proxool.jsp&lt;/h2&gt;<br />        &lt;%<br />           Connection con=null;<br />           Statement stmt=null;<br />           ResultSet rs=null;<br />           <br />           String ename="";<br />           <br />           try<br />           {<br />             Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");<br />             con=DriverManager.getConnection("proxool.JSPBook:oracle.jdbc.driver.OracleDriver:<br />                       jdbc:oracle:thin:@yang:1521:orcl","scott","ss");             <br />             stmt=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,<br />                                      ResultSet.CONCUR_UPDATABLE);<br />             String query="select * from emp";<br />             rs=stmt.executeQuery(query);<br />             while(rs.next())<br />             {<br />               ename=rs.getString("ename");<br />      %&gt;<br />        从emp表中取出姓名&lt;%=ename%&gt;&lt;br&gt;<br />      &lt;%<br />             }<br />             stmt.close();<br />             con.close();<br />           }<br />           catch(SQLException e)<br />           {<br />             out.println("发生异常"+e);<br />           }<br />           finally<br />           {<br />             try<br />             {<br />               if(con!=null)<br />               {<br />                 con.close();<br />               }<br />             }<br />             catch(SQLException ne)<br />             {<br />               out.println("SQLException:"+ne);<br />             }<br />           }<br />        %&gt;<br />    &lt;/bdoy&gt;<br />&lt;/html&gt;<br />Proxool.jsp通过Proxool连接池取得Connection,然后显示emp表格中的ename.<br />首先动态加载Proxool的driver:<br />  Class.forName("org.logicalcobwebs.proxool.ProxoolDriver);<br />然后将Proxool URL分为三个部分: 连接池的别名,JDBC驱动程序(DataBase JDBC Drivers),连接URL.<br /><br />设定Proxool<br />proxool提供了许多连接池的参数,例如:连接池最多有几个Connection,最少有几个Connection,Connection生命期限等等。<br />Proxool主要有以下四种设定方式:<br />(一) 通过java.util.Properties对象来设定,例如:<br />Properties info=new Properties();<br />info.setProperty("proxool.maximum-connection-count","20");<br />info.setProperty("proxool.house-keeping-test-sql","select CURRENT_DATE");<br />info.setProperty("user","your DB username");<br />info.setProperty("password","your DB prassword");<br />String alias="Develop"; //Proxool连接池的别名,根据自己喜好随便写^_^<br />String driverClass="oracle.jdbc.driver.OracleDriver";<br />String driverUrl="jdbc:oracle:thin:@127.0.0.1:1521:DatabaseName";<br />String url="proxool."+alias+":"+drvierClass+":"+driverUrl;<br />connection=DrvierManager.getConnection(rul,info);<br /><br />(二) 通过XML文件来设定,例如:<br />&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;<br />&lt;!--the proxool configuration can be embedded within your own application's. Anything outside the "proxool" tag is ignored.--&gt;<br />&lt;proxool&gt;<br />  &lt;alias&gt;Develop&lt;/alias&gt;<br />  &lt;driver-url&gt;<br />    jdbc:oracle:thin:@127.0.0.1:1521:DatabaseName<br />  &lt;/driver-url&gt;<br />  &lt;driver-class&gt;oracle.jdbc.driver.OracleDriver&lt;/driver-class&gt;<br />  &lt;driver-properties&gt;<br />    &lt;property name="user" value="your database name"/&gt;<br />    &lt;property name="password" value="your DB password"/&gt;<br />  &lt;/driver-properties&gt;<br />  &lt;maximum-connection-count&gt;10&lt;/maximum-connection-count&gt;<br />  &lt;house-keeping-test-sql&gt;select CURRENT_DATE&lt;/house-keeping-test-sql&gt;<br />&lt;/proxool&gt;<br />然后通过JAXPConfiguration读取XML文件:<br />JAXPConfigurator.configure("/WEB-INF/classes/proxool.xml",false);<br /><br />(三) 先通过Properties文件来设定,例如:<br />jdbc-0.proxool.alias=Develop<br />jdbc-0.proxool.drvier-url=jdbc:oracle:thin:@127.0.0.1:1521:DatabaseName<br />jdbc-0.proxool.driver-class=oracle.jdbc.driver.OracleDriver;<br />jdbc-0.user=your database username<br />jdbc-0.password=your database password<br />jdbc-0.proxool.maximum-connection-count=10<br />jdbc-0.proxool.house-keeping-test-sql=select CURRENT_DATE<br />然后通过PropertyConfigurator读取Properties文件:<br />PropertyConfigurator.configure("/WEB-INF/classes/Proxool.properties");<br /><br />(四)在web.xml中,通过servlet来设定.方法又有三种,前两种是按照格式来的:<br />1.XML文件<br />&lt;servlet&gt;<br />  &lt;servlet-name&gt;ServletConfigurator&lt;/servlet-name&gt;<br />  &lt;servlet-class&gt;<br />     org.logicalcobwebs.proxool.configuration.ServletConfigurator<br />  &lt;/servlet-class&gt;<br />  &lt;init-param&gt;<br />     &lt;param-name&gt;xmlFile&lt;/param-name&gt;<br />     &lt;param-value&gt;WEB-INF/classes/Proxool.xml&lt;/param-value&gt;<br />  &lt;/init-param&gt;<br />  &lt;load-on-start&gt;1&lt;/load-on-start&gt;<br />&lt;/servlet&gt;<br /><br />2.Properties文件<br />&lt;servlet&gt;<br />  &lt;servlet-name&gt;ServletConfigurator&lt;/servlet-name&gt;<br />  &lt;servlet-class&gt;<br />     org.logicalcobwebs.proxool.configuration.ServletConfigurator<br />  &lt;/servlet-class&gt;<br />  &lt;init-param&gt;<br />     &lt;param-name&gt;propertyFile&lt;/param-name&gt;<br />     &lt;param-value&gt;WEB-INF/classes/Proxool.properties&lt;/param-value&gt;<br />  &lt;/init-param&gt;<br />  &lt;load-on-start&gt;1&lt;/load-on-start&gt;<br />&lt;/servlet&gt;<br /><br />3.Init Prameter<br />&lt;servlet&gt;<br />  &lt;servlet-name&gt;ServletConfigurator&lt;/servlet-name&gt;<br />  &lt;servlet-class&gt;<br />     org.logicalcobwebs.proxool.configuration.ServletConfigurator<br />  &lt;/servlet-class&gt;<br />  &lt;init-param&gt;<br />     &lt;init-name&gt;jdbc-0.proxool.alias&lt;/init-param&gt;<br />     &lt;init-value&gt;Develop&lt;/init-value&gt;<br />  &lt;/init-param&gt;<br />  &lt;init-param&gt;<br />     &lt;init-name&gt;jdbc-0.proxool.driver-rul&lt;/init-param&gt;<br />     &lt;init-value&gt;<br />        jdbc:oracle:thin:@127.0.0.1:1521:DatabaseName<br />     &lt;/init-value&gt;<br />  &lt;/init-param&gt;<br />  &lt;init-param&gt;<br />     &lt;init-name&gt;jdbc-0.proxool.driver-class&lt;/init-param&gt;<br />     &lt;init-value&gt;oracle.jdbc.driver.OracleDriver&lt;/init-value&gt;<br />  &lt;init-param&gt;<br />&lt;/servlet&gt;<br /><br />建议大家使用第四种方法,好处在于当Container启动时,Proxool的参数会自动设定加载到内存中,原因在于:<br />&lt;servlet&gt;<br />......略<br />&lt;load-on-start&gt;1&lt;/load-on-start&gt;<br /><br />一个完整的示例如下:<br />web.xml<br />&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;<br />&lt;web-app xmlns="http://java.sun.com/xml/ns/j2ee"<br />         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"<br />         version="2.4"&gt;<br />.......略<br />  &lt;servlet&gt;<br />     &lt;servlet-name&gt;ServletConfigurator&lt;/servlet-name&gt;<br />     &lt;servlet-class&gt;<br />       org.logicalcobwebs.proxool.configuration.ServletConfigurator<br />     &lt;/servlet-class&gt;<br />     &lt;init-param&gt;<br />       &lt;param-name&gt;propertyFile&lt;/param-name&gt;<br />       &lt;param-value&gt;WEB-INF/classes/Proxool.properties&lt;/param-value&gt;<br />     &lt;/init-param&gt;<br />     &lt;load-on-start&gt;1&lt;/load-on-start&gt;<br />  &lt;/servlet&gt;<br />.......略<br />&lt;/web-app&gt;<br /><br />Proxool.proterties<br />jdbc-0.proxool.alias=Develop<br />jdbc-0.proxool.driver-class=oracle.jdbc.driver.OracleDriver<br />jdbc-0.proxool.driver.url=jdbc:oracle:thin:@127.0.0.1:1521:DatabaseName<br />jdbc-0.proxool.maximum-connection-count=10<br />jdbc-0.proxool.prototype-count=4<br />jdbc-0.proxool.house-keeping-test-sql=select CURRENT_DATE<br />jdbc=0.proxool.verbose=true<br /><br />我们可以用下面的Test Page来进行测试<br />Proxool-config.jsp<br />____________________________________________________<br />&lt;%@ page import="java.sql.*"%&gt;<br />&lt;%@ page contentType="text/html;charset=gb2312"%&gt;<br /><br />&lt;html&gt;<br />    &lt;head&gt;<br />        &lt;title&gt;Proxool.jsp&lt;/title&gt;<br />    &lt;/head&gt;<br />    &lt;body&gt;<br />        &lt;h2&gt;使用Proxool.jsp&lt;/h2&gt;<br />        &lt;%<br />           Connection con=null;<br />           Statement stmt=null;<br />           ResultSet rs=null;<br />           <br />           String ename="";<br />           <br />           try<br />           {<br />             con=DriverManager.getConnection("proxool.Develop");             <br />             stmt=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,<br />                                      ResultSet.CONCUR_UPDATABLE);<br />             String query="select * from emp";<br />             rs=stmt.executeQuery(query);<br />             while(rs.next())<br />             {<br />               ename=rs.getString("ename");<br />      %&gt;<br />        从emp表中取出姓名&lt;%=ename%&gt;&lt;br&gt;<br />      &lt;%<br />             }<br />             stmt.close();<br />             con.close();<br />           }<br />           catch(SQLException e)<br />           {<br />             out.println("发生异常"+e);<br />           }<br />           finally<br />           {<br />             try<br />             {<br />               if(con!=null)<br />               {<br />                 con.close();<br />               }<br />             }<br />             catch(SQLException ne)<br />             {<br />               out.println("SQLException:"+ne);<br />             }<br />           }<br />        %&gt;<br />    &lt;/bdoy&gt;<br />&lt;/html&gt;<br />测试结果为:<br />=====================================<br />使用Proxool.jsp<br />从emp表中取出姓名SMITH<br />从emp表中取出姓名ALLEN<br />从emp表中取出姓名WARD<br />从emp表中取出姓名JONES<br />从emp表中取出姓名MARTIN<br />从emp表中取出姓名BLAKE<br />从emp表中取出姓名CLARK<br />从emp表中取出姓名SCOTT<br />从emp表中取出姓名KING<br />从emp表中取出姓名TURNER<br />从emp表中取出姓名ADAMS<br />从emp表中取出姓名JAMES<br />从emp表中取出姓名FORD<br />从emp表中取出姓名MILLER<br />从emp表中取出姓名feiyang<br />从emp表中取出姓名yang<br />从emp表中取出姓名feifei<br />从emp表中取出姓名fei </div>
<img src ="http://www.blogjava.net/dorydoo/aggbug/55470.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dorydoo/" target="_blank">多力宇扬</a> 2006-06-28 09:51 <a href="http://www.blogjava.net/dorydoo/archive/2006/06/28/55470.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JDNI---数据来源(Data Source) </title><link>http://www.blogjava.net/dorydoo/archive/2006/06/28/55469.html</link><dc:creator>多力宇扬</dc:creator><author>多力宇扬</author><pubDate>Wed, 28 Jun 2006 01:48:00 GMT</pubDate><guid>http://www.blogjava.net/dorydoo/archive/2006/06/28/55469.html</guid><wfw:comment>http://www.blogjava.net/dorydoo/comments/55469.html</wfw:comment><comments>http://www.blogjava.net/dorydoo/archive/2006/06/28/55469.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/dorydoo/comments/commentRss/55469.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/dorydoo/services/trackbacks/55469.html</trackback:ping><description><![CDATA[
		<font color="#0000ff">Tomcat下JNDI的配置</font>
		<br />
		<br />    JNDI全名为Java Naming and Directory Interface.JNDI主要提供应用程序所需要资源上命名与目录服务.在Java EE环境中,JNDI扮演了一个很重要的角色,<br />它提供了一个接口让用户在不知道资源所在位置的情形下,取得该资源服务.<br />    就好比网络磁盘驱动器的功能一样。如果有人事先将另一台机器上的磁盘驱动器接到用户的机器上,用户在使用的时候根本就分辨不出现在的驱动器是存在本端,<br />还是在另一端的机器上,用户只需取得资源来用,根本就不知道资源在什么地方。<br />    JNDI这个接口基本上是LDAP,LDAP全名为Lightweight Directory Access Protocol.<br />    <br />    要设定JNDI的JDBC数据源和DBCP连接池需要做以下的工作:(for example Oracle DataBase)<br /><br />    一. 安装JDBC Driver<br />    将你DB的JDBC Driver部署到{Tomcat_Install]\common\lib目录下。<br />    二. 设定Tomcat下的server.xml<br />    修改{Tomcat_Install|\conf\server.xml文件中你的站台标签里的&lt;Host&gt;&lt;/Host&gt;之间的内容.如下:<br />    server.xml<br />     &lt;Host&gt;<br />        &lt;Context path="/Develop" docBase="Develop" debug="0" reloadable="true"               crossContext="true"&gt;<br />        &lt;Resource name="jdbc/dy" auth="Container" type="javax.sql.DataSource"/&gt;<br />            &lt;ResourceParams name="jdbc/dy"&gt;<br />               &lt;parameter&gt;<br />                  &lt;name&gt;factory&lt;/name&gt;<br />                  &lt;value&gt;<font color="#0000ff">org.apache.commons.dbcp.BasicDataSourceFactory</font>&lt;/value&gt;<br />               &lt;/parameter&gt;<br />               &lt;parameter&gt;<br />                  &lt;name&gt;driverClassName&lt;/name&gt;<br />                  &lt;value&gt;<font color="#ffa500">oracle.jdbc.driver.OracleDriver</font>&lt;/value&gt;<br />               &lt;/parameter&gt;<br />               &lt;parameter&gt;<br />                  &lt;name&gt;url&lt;/name&gt;<br />                  &lt;value&gt;<font color="#ffa500">jdbc:oracle:thin:@yang:1521:orcl</font>&lt;/value&gt;<br />               &lt;/parameter&gt;               <br />               &lt;parameter&gt;<br />                  &lt;name&gt;username&lt;/name&gt;<br />                  &lt;value&gt;scott&lt;/value&gt;<br />               &lt;/parameter&gt;<br />               &lt;parameter&gt;<br />                  &lt;name&gt;password&lt;/name&gt;<br />                  &lt;value&gt;ss&lt;/value&gt;<br />               &lt;/parameter&gt;<br />               &lt;parameter&gt;<br />                  &lt;name&gt;maxActive&lt;/name&gt;<br />                  &lt;value&gt;20&lt;/value&gt;<br />               &lt;/parameter&gt;<br />               &lt;parameter&gt;<br />                  &lt;name&gt;maxIdle&lt;/name&gt;<br />                  &lt;value&gt;10&lt;/value&gt;<br />               &lt;/parameter&gt;<br />               &lt;parameter&gt;<br />                  &lt;name&gt;maxWait&lt;/name&gt;<br />                  &lt;value&gt;-1&lt;/value&gt;<br />               &lt;/parameter&gt;                                                                 <br />            &lt;/ResourceParams&gt;<br />        &lt;/Context&gt;<br />      &lt;/Host&gt;<br />  上述社定所表示的意思是在Develop站台中,定义一个JDBC数据来源,名称为jdbc/dy.<br />  通过以下的代码来设置的这个jdbc/dy的数据来源和DBCP连接池:<br />  &lt;parameter&gt;<br />     &lt;name&gt;factory&lt;/name&gt;<br />     &lt;value&gt;org.apache.commons.dbcp.BasicDataSourceFactory&lt;/value&gt;<br />  &lt;/parameter&gt;<br />  设定使用DBCP连接池,这是有Jakarta Project组织所制定的连接池程序,它一样是OpenSource的.<br />参数说明:<br />     &lt;Context&gt;&lt;/Context&gt;用于设置你的站台.<br />     &lt;Context&gt;标签中的path="/Develop"代表网站名称,即: http://IP_DomaninName/Develop; docBase="Develop"代表站台的目录位置,debug则是设定debug level<br />     ,0表示提供最少的信息,9表示提供最都多的信息;reloadable则表示Tomcat执行时,当class,web.xml被更新时,都会自动重新加载,不需要重新启动Tomcat;<br />     maxActive表示连接池的最大数据库连接数;设为0表示无限制;maxIdle表示设定连接池中最小能有几个Connection,若为0表示不限制;maxWait 最大建立连接等待时间。<br />    如果超过此时间将接到异常,设为－1表示无限制,单位为ms;driverClassName JDBC驱动程序;url表示数据库连接字符串.<br /><br /> 三. 设定应用站台中的web.xml<br /> eg:设定Develop的web.xml如下:<br />  &lt;resource-ref&gt;<br />     &lt;description&gt;JNDI JDBC DataSource of Develop&lt;/description&gt;   //一个描述<br />     &lt;res-ref-name&gt;jdbc/dy&lt;/res-ref-name&gt;                        //这里必须为你之前指定的&lt;ResourceParams name="jdbc/dy"&gt;<br />     &lt;res-type&gt;javax.sql.DataSource&lt;/res-type&gt;<br />     &lt;res-auth&gt;Container&lt;/res-auth&gt;<br />  &lt;/resource-ref&gt;<br /><br /> 四. 使用JDBC数据来源获得Connection对象<br />   Context initContext=new InitialContext();<br />   Context envContext=(Context)initContext.lookup("<font color="#0000ff">java:/comp/env</font>");<br />   或者<br />   Context envContext=(Context)initContext.lookup("<font color="#0000ff">java:comp/env</font>");<br />   DataSourceds conn=(DataSource)envContext.lookup("jdbc/dy");<br />   conn=ds.getConnection();<br /><br />按照这四个步骤做下来后,那么你就可以写个Test Page来测试一下了.<br />Test Page1:<br />_________________________________________________________________________________________________________<br />testpool.jsp<br />&lt;!--测试JNID数据源的配置--&gt;<br />&lt;%@ page contentType="text/html;charset=gb2312"%&gt;<br />&lt;%@ page import="javax.naming.Context"%&gt;<br />&lt;%@ page import="javax.sql.DataSource"%&gt;<br />&lt;%@ page import="javax.naming.InitialContext"%&gt;<br />&lt;%@ page import="java.sql.*"%&gt;<br />&lt;%<br />  DataSource ds=null;<br />  try<br />  {<br />      Context initCtx=new InitialContext();<br />      Context envCtx=(Context)initCtx.lookup("java:comp/env");<br />      //从Context中loopup 数据源<br />      ds=(DataSource)envCtx.lookup("jdbc/dy");<br />      if(ds!=null)<br />      {<br />        out.println("已经获得DataSource!");<br />        out.println("&lt;br&gt;");<br />        Connection conn=ds.getConnection();<br />        Statement stmt=conn.createStatement();<br />        ResultSet rst=stmt.executeQuery("select * from emp");<br />        out.println("以下是从数据库里读出来的数据");<br />        out.println("&lt;hr&gt;");<br />        while(rst.next())<br />        {<br />          out.println("empName:"+rst.getString("ename"));<br />          out.println("&lt;br&gt;");<br />        }<br />      }<br />    else<br />        out.println("连接失败");<br />  }<br />  catch(Exception e)<br />  {<br />      out.println(e);<br />  }<br />%&gt;<br />如果成功那么输出结果:<br />========================================<br />已经获得DataSource!<br />以下是从数据库里读出来的数据:<br />empName:SMITH<br />empName:ALLEN<br />empName:WARD<br />empName:JONES<br />empName:MARTIN<br />empName:BLAKE<br />empName:CLARK<br />empName:SCOTT<br />empName:KING<br />empName:TURNER<br />empName:ADAMS<br />empName:JAMES<br />empName:FORD<br />empName:MILLER<br />empName:feiyang<br />empName:yang<br />empName:feifei<br />empName:fei <br /><img src ="http://www.blogjava.net/dorydoo/aggbug/55469.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/dorydoo/" target="_blank">多力宇扬</a> 2006-06-28 09:48 <a href="http://www.blogjava.net/dorydoo/archive/2006/06/28/55469.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>