飛翔的起點(diǎn)

          從這里出發(fā)

          導(dǎo)航

          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          統(tǒng)計(jì)

          常用鏈接

          留言簿(5)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          #

          文檔樹doc的介紹

          先來看一張簡單的文檔樹
          click for full size
          很明顯樹的頂層節(jié)點(diǎn)是NodeA節(jié)點(diǎn),接下來可以通過指定的合適節(jié)點(diǎn)移動到樹中的任何點(diǎn),結(jié)合以下的代碼你可以更好的了解這棵樹節(jié)點(diǎn)間的相互關(guān)系:
          NodeA.firstChild = NodeA1
          NodeA.lastChild = NodeA3
          NodeA.childNodes.length = 3
          NodeA.childNodes[0] = NodeA1
          NodeA.childNodes[1] = NodeA2
          NodeA.childNodes[2] = NodeA3
          NodeA1.parentNode = NodeA
          NodeA1.nextSibling = NodeA2
          NodeA3.prevSibling = NodeA2
          NodeA3.nextSibling = null
          NodeA.lastChild.firstChild = NodeA3a
          NodeA3b.parentNode.parentNode = NodeA

          DOM定義對操作一個(gè)文檔對象的節(jié)點(diǎn)結(jié)構(gòu)提供了實(shí)用的方法,它提供了像執(zhí)行對象插入,更新,刪除,克隆等這些常用的方法。
          insertBefore()--在參考子節(jié)點(diǎn)之前插入一個(gè)新的子節(jié)點(diǎn).如果參考的子節(jié)點(diǎn)為null,則新的子節(jié)點(diǎn)將作為調(diào)用節(jié)點(diǎn)的最后一個(gè)子節(jié)點(diǎn)插入。
          replaceChild()--在childNodes集合種使用指定的newChild來代替oldChild;如果代替成功,則返回oldChild;如果newChild是null,則只需刪除oldChild即可。
          removeChild()--從節(jié)點(diǎn)的ChildNodes集合中刪除removeChild指定的節(jié)點(diǎn),如果刪除成功,則返回刪除的子節(jié)點(diǎn)。
          appendChild()--添加一個(gè)新節(jié)點(diǎn)到childNodes集合的末尾,如果成功,則返回新節(jié)點(diǎn)。
          cloneNode()--創(chuàng)建一個(gè)新的、復(fù)制的節(jié)點(diǎn),并且如果傳入的參數(shù)是true時(shí),還將復(fù)制子節(jié)點(diǎn),如果節(jié)點(diǎn)是一個(gè)元素,那么還將復(fù)制相應(yīng)屬性,返回新的節(jié)點(diǎn)。

          為了在一棵文檔樹中訪問或者建立一個(gè)新的節(jié)點(diǎn),可以用下面這些方法:
          getElementById()
          getElementsByTagName()
          createElement()
          createAttribute()
          createTextNode()
          注意:在一個(gè)頁面中只有一個(gè)文檔對象,除了getElementsByTagName()外,其它方法均只能通過document.methodName()調(diào)用。

          再看一下下面這個(gè)例子:
          <html>
          <head>
          <title></title>
          </head>
          <body>
          <p>This is a sample paragraph.</p>
          <SCRIPT LANGUAGE="JavaScript">
          <!--
          alert(document.documentElement.lastChild.firstChild.tagName);
          //-->
          </SCRIPT>
          </body>
          </html>
          結(jié)果將會顯示"P",下面是一些解釋
          document.documentElement - gives the page's HTML tag.
          lastChild - gives the BODY tag.
          firstChild - gives the first element in the BODY.
          tagName - gives that element's tag name, "P" in this case.
          另一個(gè):
          <html>
          <head>
          <title></title>
          </head>
          <body>

          <p>This is a sample paragraph.</p>
          <SCRIPT LANGUAGE="JavaScript">
          <!--
          alert(document.documentElement.lastChild.firstChild.tagName);
          //-->
          </SCRIPT>
          </body>
          </html>
          這個(gè)例子和上面并沒有什么大的區(qū)別,僅僅是多了一個(gè)空行,但是在NS中,會自動為空行加上一個(gè)節(jié)點(diǎn)所以返回值是"undefined",而在IE中將跳過空行仍然指向P標(biāo)簽。

          更常用的方法:
          <p id="myParagraph">This is a sample paragraph.</p>
          ...
          alert(document.getElementById("myParagraph").tagName);
          這種方法你不用關(guān)心節(jié)點(diǎn)在文檔樹的哪一個(gè)地方,而只要保證在頁面中它的ID號是唯一的就可以了。

          接下來一種訪問元素節(jié)點(diǎn)的方法是document.getElementsByTagName(),它的返回值是一個(gè)數(shù)組,例如你可以通過下面的例子改變整個(gè)頁面的連接:
          var nodeList = document.getElementsByTagName("A");
          for (var i = 0; i < nodeList.length; i++)
          nodeList[i].style.color = "#ff0000";

          attribute和attributes
          attribute對象和元素相關(guān),但是卻沒有被認(rèn)為是文檔樹的一部分,因此屬性不能作為子節(jié)點(diǎn)集合的一部分來使用。
          有三種方法可以為元素建立新的屬性
          1.
          var attr = document.createAttribute("myAttribute");
          attr.value = "myValue";
          var el = document.getElementById("myParagraph");
          el.setAttributeNode(attr);
          2.
          var el = document.getElementById("myParagraph");
          el.setAttribute("myAttribute", "myValue");
          3.
          var el = document.getElementById("myParagraph");
          el.myAttribute = "myValue";
          你可以在html標(biāo)簽種定義自己的屬性:
          <p id="myParagraph" myAttribute="myValue">This is a sample paragraph.</p>
          ...
          alert(document.getElementById("myParagraph").getAttribute("myAttribute"));
          返回值將是"myValue".但是請注意這里必須使用getAttribute,而不是AttributeName,因?yàn)橛幸恍g覽器并不支持自定義屬性。

          attributes也可以被輕易的從一個(gè)元素中刪除,你可以使用removeAttribute()或者將element.attributeName指向一個(gè)null值。
          通過attributes我們就可以產(chǎn)生一些動態(tài)效果:
          <p id="sample1" align="left">Text in a paragraph element.</p>
          ... code for the links ...
          document.getElementById('sample1').setAttribute('align', 'left');
          document.getElementById('sample1').setAttribute('align', 'right');
          另一種:
          <p id="sample2" style="text-align:left;">Text in a paragraph
          element.</p>
          ... code for the links ...
          document.getElementById('sample2').style.textAlign = 'left';
          document.getElementById('sample2').style.textAlign = 'right';
          跟上面的例子一樣,展示了可用通過元素修改style中的屬性,甚至是class中的.唯一要提到的是textAlign是從style中的text-align中演變而來的,有一條基本規(guī)律,就是style中的屬性如果出現(xiàn)-則在dom中將會被去掉并且隨后的一個(gè)字母將改為大寫,還有一點(diǎn)就是如果即使元素中沒有style屬性,上述例子同樣可以使用。

          text nodes:
          先看一下例子:
          <p id="sample1">This is the initial text.</p>
          ... code for the links ...
          document.getElementById('sample1').firstChild.nodeValue =
          'Once upon a time...';
          document.getElementById('sample1').firstChild.nodeValue =
          '...in a galaxy far, far away';
          首先text nodes并沒有像elements那樣具有id屬性,所有它并不能直接通過document.getElementById()或者document.getElementsByTagName()訪問
          看一下下面的結(jié)構(gòu)也許會更明白一些:
          click for full size
          可以看出通過document.getElementById('sample1').firstChild.nodeValue就可以讀取或者設(shè)置text nodes的值了。

          另一個(gè)更加復(fù)雜一點(diǎn)的例子:
          <p id="sample2">This is the <b>initial</b> text.</p>
          它的文檔結(jié)構(gòu)
          click for full size
          在這里通過document.getElementById('sample1').firstChild.nodeValue講僅僅改變"This is the"
          initial text.將不會改變.在這里大家應(yīng)該看到了它和innerHTML的不同了.當(dāng)然你也可以這樣用:
          document.getElementById('sample3').firstChild.nodeValue =
          '<b>Once</b> upon a time...';
          document.getElementById('sample3').firstChild.nodeValue =
          '...in a galaxy <i>far, far</i> away';
          其中的html代碼將不會被解釋,瀏覽器將把他們當(dāng)成普通的文本來顯示。

          創(chuàng)建和刪除text nodes:
          var myTextNode = document.createTextNode("my text");
          通過上面的代碼你可以創(chuàng)建一個(gè)新的text node,但是它并不是文檔樹的一部分,要讓它顯示在頁面上就必須讓它成為文檔樹中某一個(gè)節(jié)點(diǎn)的child,因?yàn)?br /> text nodes不能有兒子,所以你不能將它加入到一個(gè)text nodes中,attribute也不屬于文檔樹的一部分,這條路也不行,現(xiàn)在只剩下elements nodes
          了,以下的例子展示了如何添加和刪除一個(gè)text node:
          <p id="sample1">Initial text within a paragraph element.</p>
          ... code to add a text node ...
          var text = document.createTextNode(" new text " + (++counter1));
          var el = document.getElementById("sample1");
          el.appendChild(text);
          ... code to remove the last child node ...
          var el = document.getElementById("sample1");
          if (el.hasChildNodes())
          el.removeChild(el.lastChild);
          增加文本是很容易的,上面的代碼建立了一個(gè)新的text node并且通過appendChild()方法將其加入到childNodes數(shù)組的末尾,并設(shè)置了一個(gè)counter1的全局變量,利于觀察
          hasChildNodes()的返回值是true or false;用來判斷當(dāng)前節(jié)點(diǎn)是否還有child,以阻止當(dāng)其沒有child的時(shí)候調(diào)用removeChild()產(chǎn)生的錯(cuò)誤。

          創(chuàng)建element nodes
          有了上面的基礎(chǔ),應(yīng)該更容易理解了,先看一下下面的代碼
          <div id="sample1">This text is in a DIV element.</div>
          ... code for the link ...
          var paraEl, boldEl;
          paraEl = document.createElement("p");
          boldEl = document.createElement("b");
          paraEl.appendChild(document.createTextNode("This is a new paragraph with "));
          boldEl.appendChild(document.createTextNode("bold"));
          paraEl.appendChild(boldEl);
          paraEl.appendChild(document.createTextNode(" text added to the DIV"));
          document.getElementById("sample1").appendChild(paraEl);
          你還可以直接為新加的element nodes設(shè)置attribute,以下兩種都可以:
          boldEl.style.color = "#ffff00";
          paraEl.appendChild(boldEl);
          或者:
          paraEl.appendChild(boldEl);
          boldEl.style.color = "#ffff00";

          posted @ 2008-08-15 12:47 forgood 閱讀(222) | 評論 (0)編輯 收藏

          frame 和 frame屬性

          、幀標(biāo)志

              1.<frameset></frameset>

              2.<frame>

              3.<noframes></noframes>


             
          幀是由英文Frame翻譯過來的,它可以用來向?yàn)g覽器窗口中裝載多個(gè)Html文件。即每個(gè)Html文件占據(jù)一個(gè)幀,而多個(gè)幀可以同時(shí)顯示在同一個(gè)瀏覽器窗口中,它們組成了一個(gè)最大的幀,也即是一個(gè)包含多個(gè)Html文檔的Html文件(我稱它為主文檔)。幀通常的使用方法是在一個(gè)幀中放置目錄(即可供選擇的鏈接),然后將Html文件顯示在另一個(gè)幀中。



          1.<frameset></frameset>

              <frameset></frameset>標(biāo)志對放在幀的主文檔的<body></body>標(biāo)志對的外邊,也可以嵌在其他幀文檔中,并且可以嵌套使用。此標(biāo)志對用來定義主文檔中有幾個(gè)幀并且各個(gè)幀是如何排列的。它具有rowscols屬性,使用<frameset>標(biāo)志時(shí)這兩個(gè)屬性至少必須選擇一個(gè),否則瀏覽器只顯示第一個(gè)定義的幀,剩下的一概不管,<frameset></frameset>標(biāo)志對也就沒有起到任何作用了。rows用來規(guī)定主文檔中各個(gè)幀的行定位,而cols用來規(guī)定主文檔中各個(gè)幀的列定位。這兩個(gè)屬性的取值可以是百分?jǐn)?shù)、絕對像素值或星號(“*”),其中星號代表那些未被說明的空間,如果同一個(gè)屬性中出現(xiàn)多個(gè)星號則將剩下的未被說明的空間平均分配。同時(shí),所有的幀按照rows和cols的值從左到右,然后從上到下排列。示例如下:










          <frameset rows="*,*,*"> 總共有三個(gè)按列排列的幀,每個(gè)幀占整個(gè)瀏覽器窗口的1/3
          <frameset cols="40%,*,*"> 總共有三個(gè)按行排列的幀,第一個(gè)幀占整個(gè)瀏覽器窗口的40%,剩下的空間平均分配給另外兩個(gè)幀
          <frameset rows="40%,*" cols="50%,*,200"> 總共有六個(gè)幀,先是在第一行中從左到右排列三個(gè)幀,然后在第二行中從左到右再排列三個(gè)幀,即兩行三列,所占空間依據(jù)rows和cols屬性的值,其中200的單位是像素

          2.<frame>

              <frame>標(biāo)志放在<frameset></frameset>之間,用來定義某一個(gè)具體的幀。<frame>標(biāo)志具有srcname屬性,這兩個(gè)屬性都是必須賦值的。src是此幀的源Html文件名(包括網(wǎng)絡(luò)路徑,即相對路徑或網(wǎng)址),瀏覽器將會在此幀中顯示src指定的Html文件;name是此幀的名字,這個(gè)名字是用來供超文本鏈接標(biāo)志<a
          href=""
          target="">中的target屬性用來指定鏈接的Html文件將顯示在哪一個(gè)幀中。例如定義了一個(gè)幀,名字是main,在幀中顯示的Html文件名是jc.htm,則代碼是<frame
          src="jc.htm" name="main">,當(dāng)您有一個(gè)鏈接,在點(diǎn)擊了這個(gè)鏈接后,文件new.htm將要顯示在名為main的幀中,則代碼為<a
          href="new.htm"
          target="main">需要鏈接的文本</a>。這樣一來,就可以在一個(gè)幀中建立網(wǎng)站的目錄,加入一系列鏈接,當(dāng)點(diǎn)擊鏈接以后在另一個(gè)幀中顯示被鏈接的Html文件。

          此外,<frame>標(biāo)志還有scrollingnoresize屬性,scrolling用來指定是否顯示滾動軸,取值可以是“yes”(顯示)、“no”(不顯示)或“auto”(若需要?jiǎng)t會自動顯示,不需要?jiǎng)t自動不顯示)。noresize屬性直接加入標(biāo)志中即可使用,不需賦值,它用來禁止用戶調(diào)整一個(gè)幀的大小。



          3.<noframes></noframes>

              <noframes></noframes>標(biāo)志對也是放在<frameset></frameset>標(biāo)志對之間,用來在那些不支持幀的瀏覽器中顯示文本或圖像信息。在此標(biāo)志對之間先緊跟<body></body>標(biāo)志對,然后才可以使用我們在教程七以前講過的任何標(biāo)志。



              下邊是一個(gè)綜合示例:



          例8 幀標(biāo)志的綜合示例



          主文檔:

          <html>

          <head>

          <title>幀標(biāo)志的綜合示例</title>

          </head>

          <frameset cols="25%,*">

          <frame src="menu.htm" scrolling="no" name="Left">

          <frame src="page1.htm" scrolling="auto" name="Main">

          <noframes>

          <body>

          <p>對不起,您的瀏覽器不支持“幀”!</p>

          </body>

          </noframes>

          </frameset>

          </html>




          menu.htm

          <html>

          <head>

          <title>目錄</title>

          </head>

          <body>

          <p><font color="#FF0000">目錄</font></p>

          <p><a href="page1.htm" target="Main">鏈接到第一頁</a></p>

          <p><a href="page2.htm" target="Main">鏈接到第二頁</a></p>

          </body>

          </html>




          page1.htm

          <html>

          <head>

          <title>第一頁</title>

          </head>

          <body>

          <p align="center"><font color="#8000FF">這是第一頁!</font></p>

          </body>

          </html>




          page2.htm

          <html>

          <head>

          <title>第二頁</title>

          </head>

          <body>

          <p align="center"><font color="#FF0080">這是第二頁!</font></p>

          </body>

          </html>

          posted @ 2008-08-13 22:25 forgood 閱讀(6307) | 評論 (1)編輯 收藏

          詳解Eclipse+MyEclipse完全綠色版制作方法

                   現(xiàn)在在Java開發(fā)中,使用的開發(fā)工具大部分都是Eclipse,并且和Eclipse關(guān)系緊密的要數(shù)MyEclipse了,但是MyEclipse是一個(gè)EXE可執(zhí)行程序,對于沒有安裝Eclipse與MyEclilpse的電腦來說,首先得先解壓Eclipse,然后再安裝MyEclipse,這不光很麻煩,而且還很費(fèi)時(shí),對于已經(jīng)安裝好的電腦來說,如果哪天電腦出了問題或是Eclipse崩潰了,導(dǎo)致工具不能用,這時(shí)又不得不重新安裝時(shí),那可真夠郁悶滴~~~,因此,大象本著我為人人,人人為我的奉獻(xiàn)精神,在此,將Eclipse+MyEclipse的完全綠色版制作方法寫出來,和大家一起分享,讓大家都能享受到這種方便。
                  在這里,大象采用Eclipse3.3.1與MyEclipse_6.0.1GA_E3.3.1_Installer版來舉例說明,其它的版本做法與此相同。

                  第1步:下載Eclipse3.3.1和MyEclipse_6.0.1GA
                     這里我要提醒大家注意一下:下載Eclipse時(shí)不要選擇3.2的版本,因?yàn)?/span>MyEclipse6.0需要3.3版本以上的支持,另外就是下載MyEclipse時(shí)不要下完全版,而應(yīng)該只下插件版,我的這個(gè)MyEclipse6.0.1的插件版是176M。

                  2步:解壓Eclipse3.3.1 
                    將Eclipse3.3.1的壓縮包解壓到D盤根目錄下。


                    做這個(gè)綠色版,把它放在根目錄下是因?yàn)檫@樣做很方便,在這里,大象以D盤為例,來說明制作方法。
              第3步:安裝MyEclipse6.0.1GA
                     雙擊"MyEclipse_6.0.1GA_E3.3.1_Installer.exe"開始安裝MyEclipse,在第3步:"Choose Eclipse Folder"時(shí),注意 "Please Choose Existing Eclipse Installation Folder",點(diǎn)擊"Choose...",請選擇你解壓的Eclipse文件夾,選擇好之后如下圖:

                    點(diǎn)擊"Next",出現(xiàn)"Where Would You Like to Install MyEclipse 6.0.1?",點(diǎn)擊"Choose...",選擇上面的eclipse文件夾,這時(shí)記得在eclipse后面加一個(gè)目錄名,否則,MyEclipse的安裝文件就會全部放在eclipse的根目錄下,這可不是我們希望看到滴,設(shè)置好之后如下圖:

                     下面的安裝沒什么好說的,就是一路Next了。安裝結(jié)束后,可以在eclipse目錄下看到有一個(gè)"MyEclipse 6.0.1GA"這個(gè)文件夾,進(jìn)去看看,是不是有兩個(gè)文件夾,兩個(gè)文件?

                     OK,到此MyEclipse插件已經(jīng)安裝完成了,下面來進(jìn)行我們的綠色插件制作。
              第4步:插件制作
                     在eclipse目錄下,新建一個(gè)文件夾,命名為"ThirdPlugins"(你要取別的名字也可以,不過一定要和links目錄里面的配置文件中的路徑一致,后面會有說明),將"MyEclipse 6.0.1GA"這個(gè)文件夾復(fù)制到"ThirdPlugins"目錄下,別用剪切喔,這可是剛才安裝MyEclipse的目錄,等會還要缷載MyEclipse,如果這個(gè)目錄沒有了,到時(shí)缷載不了,出了什么問題可不要怪大象喔!
                     MyEclipse安裝好之后,會在eclipse目錄下生成一個(gè)links文件夾,里面有一個(gè)"com.genuitec.eclipse.MyEclipse.link"文件,我們刪除它,另外新建一個(gè)"MyEclipse 6.0.1GA.ini"文件,內(nèi)容為:path=ThirdPlugins/MyEclipse 6.0.1GA
                     保存完之后,我們的插件制作也結(jié)束了,然后就是缷載MyEclipse,千萬不要直接把那個(gè)文件夾刪掉,而應(yīng)該缷載它。


                     其實(shí)所有的插件都可以按這個(gè)方式來做,這樣做的好處就是,想用就放進(jìn)去,不想用就刪掉,如果放到eclipse的features和plugins里面,會很不好管理。
              第5步:配置參數(shù)
                     雖然插件已經(jīng)安裝好了,但是,此時(shí)我們還不能啟動它,應(yīng)該對eclipse的啟動參數(shù)設(shè)置一下,提高它的啟動速度和運(yùn)行時(shí)的穩(wěn)定性。在eclipse.exe上點(diǎn)右鍵,選擇"創(chuàng)建快捷方式",在快捷方式上點(diǎn)右鍵,選擇"屬性",在"D:\eclipse\eclipse.exe后面加上空格,將這些參數(shù)加在后面:
                     -vmargs -Xverify:none -XX:+UseParallelGC -XX:PermSize=20M -XX:MaxPermSize=128M -Xms256M -Xmx512M
                     -Xms256M -Xmx512M:這是堆,根據(jù)內(nèi)存大小來設(shè)置,比如大象的內(nèi)存是1G,我就設(shè)成256和512,這樣一般都夠用了。
                     當(dāng)然了,你也可以什么都不設(shè)置,不過大象還是建議設(shè)置這些參數(shù),可以很大程度上提升eclipse的啟動速度。在安裝完MyEclipse時(shí),還會生成一個(gè)eclipse.ini的備份文件,這個(gè)不需要,刪掉。我們可以修改下eclipse.ini文件,原始的如下:

          -showsplash
          com.genuitec.myeclipse.product
          --launcher.XXMaxPermSize
          256m
          -vmargs
          -Xms128m
          -Xmx512m
          -Dosgi.splashLocation=D:\eclipse\MyEclipse 6.0.1GA\eclipse\MyEclipseSplash.bmp
          -Duser.language=en 
          -XX:PermSize=128M 
          -XX:MaxPermSize=256M
                     其實(shí)這個(gè)文件為空都沒關(guān)系,大象試過,全部刪除,沒有錯(cuò)誤,不過我還是建議大家里面至少保留這些東東
          -vmargs
          -Xms256m
          -Xmx512m
                     我將128改成了256,如果你想在MyEclipse插件中用"MyEclipse 6.0.1"快捷方式來啟動的話,可以寫成這樣
          -vmargs
          -Xms256m
          -Xmx512m
          -Dosgi.splashLocation=D:\Eclipse-3.3.1\ThirdPlugins\MyEclipse 6.0.1GA\eclipse\MyEclipseSplash.bmp

                     最下面一行是啟動時(shí),顯示MyEclipse的圖片,如果沒有這句話運(yùn)行"MyEclipse 6.0.1"快捷方式,則會顯示eclipse的啟動畫面,其實(shí)"MyEclipse 6.0.1"快捷方式還是連接著eclipse.exe這個(gè)執(zhí)行程序,在"MyEclipse 6.0.1"上點(diǎn)右鍵,選擇屬性,在目標(biāo)里就可以看到。
              第6步:注冊MyEclipse
                     MyEclipse6.0的注冊一定要斷開網(wǎng)絡(luò),否則肯定不成功!
                     6.0.1GA注冊碼
                     Subscriber: administrator
                     Subscription Code: nLR7ZL-655342-54657656405281154
                     這里有一點(diǎn)大象要提醒大家注意,如果你電腦上現(xiàn)在正有使用的MyEclipse,就是說已經(jīng)注冊了,那么在C:\Documents and Settings\"自己的用戶名" 目錄下,會有一個(gè)".myeclipse.properties"文件,這時(shí)請先備份此文件,然后刪除它,斷開網(wǎng)絡(luò),再來注冊MyEclipse6.0.1,成功后如下:

              第7步:打包eclipse
                     到現(xiàn)在所有的工作都已經(jīng)完成,啟動eclipse的速度快不快?好了,該做最后一步操作了,將"configuration"文件夾下的內(nèi)容除"config.ini"文件外全部刪除,另外再把workspace文件夾刪除,大象一般會把workspace放在eclipse根目錄下,方法是在第一次啟動選擇路徑時(shí)把前面的目錄都刪除,只保留workspace(前面什么都不要保留)。這樣方便管理,你要放在其它的地方隨便,這個(gè)看各人喜好。做完這兩步之后,最好還是在eclipse目錄下建一個(gè)txt文本文件,把上面的注冊碼放到里面,另外加上一句話:"注冊時(shí)一定要斷開網(wǎng)絡(luò),否則肯定注冊不成功!"這樣以后用時(shí),可以提醒自己一下。里面有注冊碼,要用時(shí)很方便。
                     在eclipse文件夾上點(diǎn)右鍵,選擇"添加到eclipse.rar",等到壓縮完成,至此,終于大功告成!
              大家盡管放心按著我的方法試,大象前前后后做了不下十遍,今天又在公司的電腦上做了一遍,圖片都是剛剛截取的,嘿嘿,今天老板不在,大象小小的放松一下,寫寫博客。有了這個(gè)壓縮包,以后大家在使用時(shí)就會方便很多,特別是保存到移動硬盤里,想在哪用就在哪用。哇哈哈哈哈~~~~~~~~祝大家好運(yùn),都成功做出來!
              此帖為菠蘿大象原創(chuàng),如要轉(zhuǎn)載請注明出處。

          posted @ 2008-08-07 23:00 forgood 閱讀(440) | 評論 (0)編輯 收藏

          存款準(zhǔn)備金

          存款準(zhǔn)備金是指金融機(jī)構(gòu)為保證客戶提取存款和資金清算需要而準(zhǔn)備的在中央銀行的存款,中央銀行要求的存款準(zhǔn)備金占其存款總額的比例就是存款準(zhǔn)備金率
             存款準(zhǔn)備金,是限制金融機(jī)構(gòu)信貸擴(kuò)張和保證客戶提取存款和資金清算需要而準(zhǔn)備的資金。法定存款準(zhǔn)備金率,是金融機(jī)構(gòu)按規(guī)定向中央銀行繳納的存款準(zhǔn)備金占其存款的總額的比率。這一部分是一個(gè)風(fēng)險(xiǎn)準(zhǔn)備金,是不能夠用于發(fā)放貸款的。這個(gè)比例越高,執(zhí)行的緊縮政策力度越大。存款準(zhǔn)備金率變動對商業(yè)銀行的作用過程如下:
             當(dāng)中央銀行提高法定準(zhǔn)備金率時(shí),商業(yè)銀行可提供放款及創(chuàng)造信用的能力就下降。因?yàn)闇?zhǔn)備金率提高,貨幣乘數(shù)就變小,從而降低了整個(gè)商業(yè)銀行體系創(chuàng)造信用、擴(kuò)大信用規(guī)模的能力,其結(jié)果是社會的銀根偏緊,貨幣供應(yīng)量減少,利息率提高,投資及社會支出都相應(yīng)縮減。反之,亦然。
             打比方說,如果存款準(zhǔn)備金率為7%,就意味著金融機(jī)構(gòu)每吸收100萬元存款,要向央行繳存7萬元的存款準(zhǔn)備金,用于發(fā)放貸款的資金為93萬元。倘若將存款準(zhǔn)備金率提高到7.5%,那么金融機(jī)構(gòu)的可貸資金將減少到92.5萬元。
             在存款準(zhǔn)備金制度下,金融機(jī)構(gòu)不能將其吸收的存款全部用于發(fā)放貸款,必須保留一定的資金即存款準(zhǔn)備金,以備客戶提款的需要,因此存款準(zhǔn)備金制度有利于保證金融機(jī)構(gòu)對客戶的正常支付。隨著金融制度的發(fā)展,存款準(zhǔn)備金逐步演變?yōu)橹匾?a target="_blank">貨幣政策工具。當(dāng)中央銀行降低存款準(zhǔn)備金率時(shí),金融機(jī)構(gòu)可用于貸款的資金增加,社會的貸款總量和貨幣供應(yīng)量也相應(yīng)增加;反之,社會的貸款總量和貨幣供應(yīng)量將相應(yīng)減少。
             中央銀行通過調(diào)整存款準(zhǔn)備金率,可以影響金融機(jī)構(gòu)的信貸擴(kuò)張能力,從而間接調(diào)控貨幣供應(yīng)量。超額存款準(zhǔn)備金率是指商業(yè)銀行超過法定存款準(zhǔn)備金而保留的準(zhǔn)備金占全部活期存款的比率。從形態(tài)上看,超額準(zhǔn)備金可以是現(xiàn)金,也可以是具有高流動性的金融資產(chǎn),如在中央銀行賬戶上的準(zhǔn)備存款等。
             2006年以來,中國經(jīng)濟(jì)快速增長,但經(jīng)濟(jì)運(yùn)行中的矛盾也進(jìn)一步凸顯,投資增長過快的勢頭不減。而投資增長過快的主要原因之一就是貨幣信貸增長過快。提高存款準(zhǔn)備金率可以相應(yīng)地減緩貨幣信貸增長,保持國民經(jīng)濟(jì)健康、協(xié)調(diào)發(fā)展。
          存款準(zhǔn)備金率與利率的關(guān)系
          一般地,存款準(zhǔn)備金率上升,利率會有上升壓力,這是實(shí)行緊縮的貨幣政策的信號。存款準(zhǔn)備金率是針對銀行等金融機(jī)構(gòu)的,對最終客戶的影響是間接的;利率是針對最終客戶的,比如你存款的利息,影響是直接的。
          現(xiàn)階段上調(diào)存款準(zhǔn)備金率的背景
          1、因?yàn)?a target="_blank">流動性過剩造成的通貨膨脹,上調(diào)準(zhǔn)備金率可以有效降低流動性 。
          2、因?yàn)楝F(xiàn)在美國的信貸危機(jī),上調(diào)準(zhǔn)備金率可以保證金融系統(tǒng)的支付能力,增加銀行的抗風(fēng)險(xiǎn)能力,防止金融風(fēng)險(xiǎn)的產(chǎn)生。
          7月19日,中國經(jīng)濟(jì)半年報(bào)發(fā)布。2007年上半年,中國經(jīng)濟(jì)增長率達(dá)11.5%,消費(fèi)物價(jià)指數(shù)(CPI)則創(chuàng)下了33個(gè)月來的新高。一些投行當(dāng)天即預(yù)測,緊縮政策已近在眼前。
            我國貨幣供應(yīng)量多、貸款增長快、超額存款準(zhǔn)備金率較高、市場利率走低。這一“多”、一“快”、一“高”、一“低”,表明流動性過剩問題確實(shí)比較突出。
             始自2003年下半年的這一輪宏觀調(diào)控,一直試圖用“點(diǎn)剎”的辦法讓經(jīng)濟(jì)減速,而今看來,這列快車的“剎車”效率似乎有問題。11.9%的增速,偏離8%的預(yù)期目標(biāo)近4個(gè)百分點(diǎn)。中國經(jīng)濟(jì)不僅沒有軟著陸,反而有一發(fā)難收之勢。
          央行存款準(zhǔn)備金率歷次調(diào)整
          次數(shù) 時(shí)間 調(diào)整前 調(diào)整后 調(diào)整幅度
          26 08年06月25日 17% 17.5% 1%
          26 08年06月15日 16.5% 17%
          25 08年05月20日 16% 16.5% 0.5%
          24 08年04月25日 15.5% 16% 0.5%
          23 08年03月25日 15% 15.5% 0.5%
          22 08年01月25日 14.5% 15% 0.5%
          21 07年12月25日 13.5% 14.5% 1%
          20 07年11月26日 13% 13.5% 0.5%
          19 07年10月13日 12.5% 13% 0.5%
          18 07年09月25日 12% 12.5% 0.5%
          17 07年08月15日 11.5% 12% 0.5%
          16 07年06月5日 11% 11.5% 0.5%
          15 07年05月15日 10.5% 11% 0.5%
          14 07年04月16日 10% 10.5% 0.5%
          13 07年02月25日 9.5% 10% 0.5%
          12 07年01月15日 9% 9.5% 0.5%
          11 06年11月15日 8.5% 9% 0.5%
          10 06年08月15日 8% 8.5% 0.5%
          9 06年07月05日 7.5% 8% 0.5%
          8 04年04月25日 7% 7.5% 0.5%
          7 03年09月21日 6% 7% 1%
          6 99年11月21日 8% 6% -2%
          5 98年03月21日 13% 8% -5%
          4 88年9月 12% 13% 1%
          3 87年 10% 12% 2%
          2 85年 央行將法定存款準(zhǔn)備金率統(tǒng)一調(diào)整為10%
          1 84年 央行按存款種類規(guī)定法定存款準(zhǔn)備金率,企業(yè)存款20%,農(nóng)村存款25%,儲蓄存款40%

          posted @ 2008-06-19 11:57 forgood 閱讀(218) | 評論 (0)編輯 收藏

          集團(tuán)企業(yè)資金管理概論

          posted @ 2008-06-13 15:49 forgood 閱讀(189) | 評論 (0)編輯 收藏

          java中使用oracle的exp/imp導(dǎo)出、導(dǎo)入數(shù)據(jù)

                    今天在學(xué)習(xí)的過程中遇到了一篇關(guān)于java中使用oracle導(dǎo)入導(dǎo)出的文章,感覺還不錯(cuò),為了學(xué)習(xí)和以后工作的需要,我整理如下:
                     String[] cmds 
          = new String[3];
                  cmds[
          0= "cmd";
                  cmds[
          1= "/C";
                  cmds[
          2]=commandBuf.toString();
                  Process process
          =Runtime.getRuntime().exec(cmds);
                  
          boolean shouldClose=false;
                  
          try {
                      InputStreamReader isr 
          = new InputStreamReader(process.getErrorStream());
                      BufferedReader br 
          = new BufferedReader(isr);
                      String line 
          = null;
                      
          while ((line = br.readLine()) != null){
                          
          if(line.indexOf("錯(cuò)誤")!=-1){
                              shouldClose
          =true;
                              
          break;
                          }

                      }

                  }
           
                  
          catch (IOException ioe) {
                      shouldClose
          =true;
                  }

                  
          if(shouldClose)
                      process.destroy();
                  
          int exitVal = process.waitFor();

                  下面還有一種形式:
          exp和imp的輸出是要從ErrorStream中獲取,這是我以前寫的
          Process proc = null;
          try
          {
          proc = Runtime.getRuntime().exec(cmd.toString());
          InputStream istr = proc.getErrorStream();
          BufferedReader br = new BufferedReader(new InputStreamReader(istr));
          String str;
          while ((str=br.readLine()) != null)
          {
          errorInfo.append(str + "\n");
          }
          proc.waitFor();
          }
          catch (Exception e)
          {
          ...
          }
          if (proc.exitValue() == 0)
          {
          proc.destroy();
          return true;
          }
          else
          {
          if(logger.isDebugEnabled())
          logger.debug(errorInfo);
          proc.destroy();
          return false;

          兩者可以比較的看看
          注意:在執(zhí)行oracle的exp時(shí),出現(xiàn)了一個(gè)很怪的現(xiàn)象,就是exp在console輸出的信息沒有被放入InputStream,反而是放到了ErrorStream中(即使正確的情況也是),這就導(dǎo)致了按照正常的情況去寫這段代碼的話反而會出問題。---這是在jdk1.4環(huán)境下實(shí)現(xiàn)的。



          還有中建議是在jdk1.5環(huán)境下:可以如下實(shí)現(xiàn)
          1,把對InputStream的處理放到一個(gè)單獨(dú)Thread里面。
          2,用ProcessBuilder的redirectErrorStream來合并OutputStream和ErrorStream。注意子進(jìn)程的InputStream對應(yīng)父進(jìn)程的OutStream。如果不合并這兩個(gè)流的話則必須并行排空它們,順序的排空會導(dǎo)致思索。

          posted @ 2008-06-13 11:57 forgood 閱讀(844) | 評論 (0)編輯 收藏

          通過JDBC連接oracle數(shù)據(jù)庫的十大技巧

          Java數(shù)據(jù)庫連接(JDBC)API是一系列能夠讓Java編程人員訪問數(shù)據(jù)庫的接口,各個(gè)開發(fā)商的接口并不完全相同。在使用多年的Oracle公司的JDBC后,我積累了許多技巧,這些技巧能夠使我們更好地發(fā)揮系統(tǒng)的性能和實(shí)現(xiàn)更多的功能。

            1、在客戶端軟件開發(fā)中使用Thin驅(qū)動程序

            在開發(fā)Java軟件方面,Oracle的數(shù)據(jù)庫提供了四種類型的驅(qū)動程序,二種用于應(yīng)用軟件、applets、servlets等客戶端軟件,另外二種用于數(shù)據(jù)庫中的Java存儲過程等服務(wù)器端軟件。在客戶機(jī)端軟件的開發(fā)中,我們可以選擇OCI驅(qū)動程序或Thin驅(qū)動程序。OCI驅(qū)動程序利用Java本地化接口(JNI),通過Oracle客戶端軟件與數(shù)據(jù)庫進(jìn)行通訊。Thin驅(qū)動程序是純Java驅(qū)動程序,它直接與數(shù)據(jù)庫進(jìn)行通訊。為了獲得最高的性能,Oracle建議在客戶端軟件的開發(fā)中使用OCI驅(qū)動程序,這似乎是正確的。但我建議使用Thin驅(qū)動程序,因?yàn)橥ㄟ^多次測試發(fā)現(xiàn),在通常情況下,Thin驅(qū)動程序的性能都超過了OCI驅(qū)動程序。

            2、關(guān)閉自動提交功能,提高系統(tǒng)性能

            在第一次建立與數(shù)據(jù)庫的連接時(shí),在缺省情況下,連接是在自動提交模式下的。為了獲得更好的性能,可以通過調(diào)用帶布爾值false參數(shù)的Connection類的setAutoCommit()方法關(guān)閉自動提交功能,如下所示:
            conn.setAutoCommit(false);

            值得注意的是,一旦關(guān)閉了自動提交功能,我們就需要通過調(diào)用Connection類的commit()和rollback()方法來人工的方式對事務(wù)進(jìn)行管理。

            3、在動態(tài)SQL或有時(shí)間限制的命令中使用Statement對象

            在執(zhí)行SQL命令時(shí),我們有二種選擇:可以使用PreparedStatement對象,也可以使用Statement對象。無論多少次地使用同一個(gè)SQL命令,PreparedStatement都只對它解析和編譯一次。當(dāng)使用Statement對象時(shí),每次執(zhí)行一個(gè)SQL命令時(shí),都會對它進(jìn)行解析和編譯。這可能會使你認(rèn)為,使用PreparedStatement對象比使用Statement對象的速度更快。然而,我進(jìn)行的測試表明,在客戶端軟件中,情況并非如此。因此,在有時(shí)間限制的SQL操作中,除非成批地處理SQL命令,我們應(yīng)當(dāng)考慮使用Statement對象。

            此外,使用Statement對象也使得編寫動態(tài)SQL命令更加簡單,因?yàn)槲覀兛梢詫⒆址B接在一起,建立一個(gè)有效的SQL命令。因此,我認(rèn)為,Statement對象可以使動態(tài)SQL命令的創(chuàng)建和執(zhí)行變得更加簡單。

            4、利用helper函數(shù)對動態(tài)SQL命令進(jìn)行格式化

            在創(chuàng)建使用Statement對象執(zhí)行的動態(tài)SQL命令時(shí),我們需要處理一些格式化方面的問題。例如,如果我們想創(chuàng)建一個(gè)將名字O'Reilly插入表中的SQL命令,則必須使用二個(gè)相連的“''”號替換O'Reilly中的“'”號。完成這些工作的最好的方法是創(chuàng)建一個(gè)完成替換操作的helper方法,然后在連接字符串心服用公式表達(dá)一個(gè)SQL命令時(shí),使用創(chuàng)建的helper方法。與此類似的是,我們可以讓helper方法接受一個(gè)Date型的值,然后讓它輸出基于Oracle的to_date()函數(shù)的字符串表達(dá)式。

            5、利用PreparedStatement對象提高數(shù)據(jù)庫的總體效率

            在使用PreparedStatement對象執(zhí)行SQL命令時(shí),命令被數(shù)據(jù)庫進(jìn)行解析和編譯,然后被放到命令緩沖區(qū)。然后,每當(dāng)執(zhí)行同一個(gè)PreparedStatement對象時(shí),它就會被再解析一次,但不會被再次編譯。在緩沖區(qū)中可以發(fā)現(xiàn)預(yù)編譯的命令,并且可以重新使用。在有大量用戶的企業(yè)級應(yīng)用軟件中,經(jīng)常會重復(fù)執(zhí)行相同的SQL命令,使用PreparedStatement對象帶來的編譯次數(shù)的減少能夠提高數(shù)據(jù)庫的總體性能。如果不是在客戶端創(chuàng)建、預(yù)備、執(zhí)行PreparedStatement任務(wù)需要的時(shí)間長于Statement任務(wù),我會建議在除動態(tài)SQL命令之外的所有情況下使用PreparedStatement對象。

            6、在成批處理重復(fù)的插入或更新操作中使用PreparedStatement對象

            如果成批地處理插入和更新操作,就能夠顯著地減少它們所需要的時(shí)間。Oracle提供的Statement和 CallableStatement并不真正地支持批處理,只有PreparedStatement對象才真正地支持批處理。我們可以使用addBatch()和executeBatch()方法選擇標(biāo)準(zhǔn)的JDBC批處理,或者通過利用PreparedStatement對象的setExecuteBatch()方法和標(biāo)準(zhǔn)的executeUpdate()方法選擇速度更快的Oracle專有的方法。要使用Oracle專有的批處理機(jī)制,可以以如下所示的方式調(diào)用setExecuteBatch():
          PreparedStatement pstmt3D null;
          try {
          ((OraclePreparedStatement)
          pstmt).setExecuteBatch(30);
          ...
          pstmt.executeUpdate();
          }

            調(diào)用setExecuteBatch()時(shí)指定的值是一個(gè)上限,當(dāng)達(dá)到該值時(shí),就會自動地引發(fā)SQL命令執(zhí)行,標(biāo)準(zhǔn)的executeUpdate()方法就會被作為批處理送到數(shù)據(jù)庫中。我們可以通過調(diào)用PreparedStatement類的sendBatch()方法隨時(shí)傳輸批處理任務(wù)。

            7、使用Oracle locator方法插入、更新大對象(LOB)

            Oracle的PreparedStatement類不完全支持BLOB和CLOB等大對象的處理,尤其是Thin驅(qū)動程序不支持利用PreparedStatement對象的setObject()和setBinaryStream()方法設(shè)置BLOB的值,也不支持利用setCharacterStream()方法設(shè)置CLOB的值。只有l(wèi)ocator本身中的方法才能夠從數(shù)據(jù)庫中獲取LOB類型的值。可以使用PreparedStatement對象插入或更新LOB,但需要使用locator才能獲取LOB的值。由于存在這二個(gè)問題,因此,我建議使用locator的方法來插入、更新或獲取LOB的值。

            8、使用SQL92語法調(diào)用存儲過程

            在調(diào)用存儲過程時(shí),我們可以使用SQL92或Oracle PL/SQL,由于使用Oracle PL/SQL并沒有什么實(shí)際的好處,而且會給以后維護(hù)你的應(yīng)用程序的開發(fā)人員帶來麻煩,因此,我建議在調(diào)用存儲過程時(shí)使用SQL92。

            9、使用Object SQL將對象模式轉(zhuǎn)移到數(shù)據(jù)庫中

            既然可以將Oracle的數(shù)據(jù)庫作為一種面向?qū)ο蟮臄?shù)據(jù)庫來使用,就可以考慮將應(yīng)用程序中的面向?qū)ο竽J睫D(zhuǎn)到數(shù)據(jù)庫中。目前的方法是創(chuàng)建Java bean作為偽裝的數(shù)據(jù)庫對象,將它們的屬性映射到關(guān)系表中,然后在這些bean中添加方法。盡管這樣作在Java中沒有什么問題,但由于操作都是在數(shù)據(jù)庫之外進(jìn)行的,因此其他訪問數(shù)據(jù)庫的應(yīng)用軟件無法利用對象模式。如果利用Oracle的面向?qū)ο蟮募夹g(shù),可以通過創(chuàng)建一個(gè)新的數(shù)據(jù)庫對象類型在數(shù)據(jù)庫中模仿其數(shù)據(jù)和操作,然后使用JPublisher等工具生成自己的Java bean類。如果使用這種方式,不但Java應(yīng)用程序可以使用應(yīng)用軟件的對象模式,其他需要共享你的應(yīng)用中的數(shù)據(jù)和操作的應(yīng)用軟件也可以使用應(yīng)用軟件中的對象模式。

            10、利用SQL完成數(shù)據(jù)庫內(nèi)的操作

            我要向大家介紹的最重要的經(jīng)驗(yàn)是充分利用SQL的面向集合的方法來解決數(shù)據(jù)庫處理需求,而不是使用Java等過程化的編程語言。

            如果編程人員要在一個(gè)表中查找許多行,結(jié)果中的每個(gè)行都會查找其他表中的數(shù)據(jù),最后,編程人員創(chuàng)建了獨(dú)立的UPDATE命令來成批地更新第一個(gè)表中的數(shù)據(jù)。與此類似的任務(wù)可以通過在set子句中使用多列子查詢而在一個(gè)UPDATE命令中完成。當(dāng)能夠在單一的SQL命令中完成任務(wù),何必要讓數(shù)據(jù)在網(wǎng)上流來流去的?我建議用戶認(rèn)真學(xué)習(xí)如何最大限度地發(fā)揮SQL的功能。

          posted @ 2008-05-29 13:21 forgood 閱讀(167) | 評論 (0)編輯 收藏

          項(xiàng)目中成功的運(yùn)用proxool連接池

          轉(zhuǎn)帖:
                  最近做的一個(gè)項(xiàng)目中運(yùn)用到了連接池技術(shù),可能我們大家比較熟悉的開源連接池有dbcp,c3p0,proxool。對這三種連接池來說,從性能和出錯(cuò)率來說,proxool稍微比前兩種好些。今天我主要簡單的講述一下,我在項(xiàng)目中成功的配置和源碼。
                  第一步:首先去http://proxool.sourceforge.net/下載一個(gè)proxool.jar文件了,我用的是proxool-0.8.3.jar,現(xiàn)在最新版本是proxool-0.9.3.jar.除了他們的查看監(jiān)控臺的頁面有變化,其他的變化不是太大。
                  第二步:就是寫一個(gè)單獨(dú)的proxool.xml文件放到WEB-INF文件夾下。我用的數(shù)據(jù)庫是MySQL.
              peoxool.xml的配置文件如下:
              <?xml version="1.0" encoding="UTF-8"?>
              <proxool-config>
              <proxool>
              <alias>db</alias>
              <driver-url>jdbc:mysql://×××.×××.××.×××:3303/mydb<driver-url>
              <driver-class>com.mysql.jdbc.Driver</driver-class>
              <driver-properties>
              <property name="user" value="root" />
              <property name="password" value="*******" />
              </driver-properties>
              <house-keeping-sleep-time>90000</house-keeping-sleep-time>
              <maximum-new-connections>20</maximum-new-connections>
              <prototype-count>5</prototype-count>
              <maximum-connection-count>1000</maximum-connection-count>
              <minimum-connection-count>10</minimum-connection-count>
              </proxool>
              </proxool-config>
               對以上配置簡單的解釋:
              1.<alias>  :為該連接池起一個(gè)別名,在其他文件中引用。引用是:(proxool.db);
              2. <driver-class>com.mysql.jdbc.Driver</driver-class>
               <driver-properties>
               <property name="user" value="root" />
               <property name="password" value="root" />
              </driver-properties>
              這些配置大家應(yīng)該比較熟悉吧。配置數(shù)據(jù)庫的驅(qū)動和連接。
              3.<house-keeping-sleep-time>  :proxool自動偵察各個(gè)連接狀態(tài)的時(shí)間間隔(毫秒),偵察到空閑的連接就馬上回收,超時(shí)的銷毀。
              4.<maximum-new-connections>: 指因未有空閑連接可以分配而在隊(duì)列中等候的最大請求數(shù),超過這個(gè)請求數(shù)的用戶連接就不會被接受。
              5.<prototype-count>:最少保持的空閑連接數(shù)。
              6.<maximum-connection-count>: 允許最大連接數(shù),超過了這個(gè)連接,再有請求時(shí),就排在隊(duì)列中等候,最大的等待請求數(shù)由maximum-new-connections決定
              7.<minimum-connection-count>:最小連接數(shù)

              第三步:加載并初始化proxool.xml文件。因?yàn)樗沁B接數(shù)據(jù)庫的,其他很多模塊都用到數(shù)據(jù),所以你必須首先加載它,在web.xml中進(jìn)行如下配置:如果你以前加載applicationContext.xml用的是:
              <listener>
              <listener-class>
              org.springframework.web.context.ContextLoaderListener
              </listener-class>
              </listener>
              這時(shí)你必須換成如下配置:
              <servlet>
              <servlet-name>contextConfigLocation</servlet-name>
              <servlet-class>
              org.springframework.web.context.ContextLoaderServlet
              </servlet-class>
              <load-on-startup>2</load-on-startup>
              </servlet>
              要不然你就會遇見這樣的錯(cuò)誤:
              Problem
              org.logicalcobwebs.proxool.ProxoolException: Attempt to refer to a unregistered pool by its
              alias 'db'
                如果用過proxool與spring整合時(shí),不少就遇到過這樣的問題,其實(shí)這個(gè)問題很明顯就是你的proxool.xml沒有被先加載初始化,我們應(yīng)該讓它先加載,應(yīng)該這樣配置:
              <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/proxool.xml</param-value>
              </init-param>
              <load-on-startup>1</load-on-startup>
              </servlet>
              把<load-on-startup>的值設(shè)為1,值越小級別就越高,就先被加載初始化。一定要先于applicationContext.xml的加載。
              這一步很關(guān)鍵,一定要注意,不然你就會遇到上面的問題。網(wǎng)上有很大人都遇見過這樣的問題,只要你用了你才會體會到那樣的錯(cuò)誤。如果是第一次,你會很迷茫的,我第一次配置就出現(xiàn)了上面的問題,讓我調(diào)試了好處時(shí)間才找出問題所在。希望你們不要再犯這樣的錯(cuò)誤。
                  如果你想監(jiān)控?cái)?shù)據(jù)庫連接池的連接情況,可以簡單的配置一下就可以了,因?yàn)榇蟛糠止δ茉创a中都已寫好,我們用是只需簡單的配置。
              <servlet>
              <servlet-name>Admin</servlet-name>
              <servlet-class>
              org.logicalcobwebs.proxool.admin.servlet.AdminServlet
              </servlet-class>
              </servlet>
              <servlet-mapping>
              <servlet-name>Admin</servlet-name>
              <url-pattern>/admin</url-pattern>
              </servlet-mapping>
              如果訪問的話,可能有點(diǎn)問題,會報(bào)ISO-8859-1的問題。我們一般用的是utf-8,gbk2312.最好的解決辦法就是重寫源碼中的AdminServlet
              .java。我就是重寫了這個(gè)源碼。才解決了這個(gè)亂碼問題。可能還有其他辦法:只需簡單的該一個(gè)方法就可以了。
              private void printDefinitionEntry(ServletOutputStream out, String name, String value) throws IOException {
                  out.println("    <tr>");
                  out.print("      <td width=\"200\" valign=\"top\" style=\"" + STYLE_CAPTION + "\">");
                  out.print(name);
                  out.println("</td>");
                  if (value != null) {
                      out.print("      <td style=\"" + STYLE_DATA + "\">");
                      out.print(new String(value.getBytes("ISO-8859-1"),"utf-8"));
                  } else {
                      out.print("      <td style=\"" + STYLE_NO_DATA + "\">off");
                  }
                  out.print("</td>");
                  out.println("    </tr>");
              }
              上面紅色的部分就是我改的部分,然后把web.xml中的
              <servlet-class>
              com.jack.servlet.AdminServlet
              </servlet-class>
              中<servlet-class>換成你改寫的那個(gè)類。
              最后一步:整合spring和proxool。在applicationContext.xml文件中把原來數(shù)據(jù)源的配置成這樣:
              <bean id="dataSource"
              class="org.springframework.jdbc.datasource.DriverManagerDataSource">
              <property name="driverClassName">
              <value>org.logicalcobwebs.proxool.ProxoolDriver</value>
              </property>
              <property name="url">
              <value>proxool.db</value>
              </property>
              </bean>
              這個(gè) <property name="url">要配置成proxool.xml中的別名。其他地方不用該了。也可以與hibernate整合。與spring整合比較簡單。我采用的就是上面的配置方式。
              這樣就配置完了,很清晰,很簡單。如果查看監(jiān)控情況的話:
              http://www.××××.com/admin  就可以查看了,如果你是本地測試:改一下路徑就可以了。
              上面所講述的是一個(gè)成功的配置,并在項(xiàng)目中成功的運(yùn)用了。希望對連接池有愛好的朋友有所幫助。

          posted @ 2008-05-22 13:25 forgood 閱讀(211) | 評論 (0)編輯 收藏

          關(guān)于static和final的收集總結(jié)

           

               Static變量的總結(jié)

          1.不可從一個(gè)static方法內(nèi)部發(fā)出對非static方法的調(diào)用,盡管反過來說是可以的。如果要在static方法中訪問所在類的成員變量或方法,就必須首先創(chuàng)建相應(yīng)的實(shí)例變量。

           

          2.static變量可以通過類名直接訪問,

          3.static方法不能被覆蓋,但是在子類中可以聲明與父類驚天方法相同的方法,從而將父類的靜態(tài)方法隱藏,另外自樂不能把父類的非靜態(tài)方法重寫為靜態(tài)的:并且static方法也不能夠重載(因?yàn)樗麄兪乔捌诮壎ǖ模圆荒苤剌d;不能重載的方的還有finalprivate  
           
          而普通方法能被覆蓋,覆蓋的結(jié)果是產(chǎn)生多態(tài);  
             
           
          例子:  
            package   test;  
             
            class   Test   {  
            public   static   void   main(String[]   args)   {  
            A   a   =   new   B();  
            a.f();  
            a.m();  
            }  
            }  
             
            class   A   {  
            public   static   void   f()   {  
            System.out.println("hello,A");  
            }  
             
            public   void   m()   {  
            System.out.println("hello,A");  
            }  
            }  
             
            class   B   extends   A   {  
            public   static   void   f()   {  
            System.out.println("hello,B");  
            }  
             
            public   void   m()   {  
            System.out.println("hello,B");  
            }  
            }  
             
           
          結(jié)果是:  
             
            hello,A  
            hello,B  

           

          1.根據(jù)Java   Language   Specification   Version   3   8.4.8   的描述,子類在繼承父類時(shí),對于方法而言,存在兩種關(guān)系:  
                A.   override  
          即覆蓋,這是對實(shí)例方法(instance   method)而言的;子類與父類中形構(gòu)相同的方法(原文中是   subsignature,它的范圍比形構(gòu)相同要大,請參考原文)會override   父類中的那個(gè)方法。  
             
                B.   hide          
          即隱藏,這是對類方法(class   method)即static   方法而言的。如果子類中定義了靜態(tài)方法,則它會隱藏父類中形構(gòu)相同的(原文中是   subsignature,它的范圍比形構(gòu)相同要大,請參考原文)所有方法,但如果隱藏了父類中的實(shí)例方法,則會編譯報(bào)錯(cuò)。  
             
            2.
          根據(jù)上面的規(guī)范:  
                “override  
          覆蓋的前提是實(shí)例方法,只有實(shí)例方法在繼承時(shí)才會出現(xiàn)override情況。  
                 
          如果是static方法,在繼承時(shí)出現(xiàn)的現(xiàn)象根本就不能用“override”這個(gè)詞描述,如果static方法在父類和子類中形構(gòu)一致,則被成為   hide(隱藏)。  
             
            3.
          因?yàn)?/span>static方法是類方法,實(shí)現(xiàn)時(shí)是靜態(tài)綁定的(引用“JAVA   核心技術(shù)   1   第六版149頁內(nèi)容“privatestaticfinal”修飾的方法是靜態(tài)綁定的。其他的方法在運(yùn)行時(shí)動態(tài)綁定。“interhanchi”所說的“staticfinal方法外都是后期綁定并不精確),只與類相關(guān),不會有多態(tài)性。   從編程的角度看,效果好像是“static方法不能被覆蓋  
             
            4.
          從術(shù)語上看,“static方法能否被覆蓋這種說法本身就是錯(cuò)誤的,因?yàn)?/span>覆蓋定義的前提和基礎(chǔ)是實(shí)例方法。  
             
            5.
          結(jié)論:   子類中的static方法會隱藏父類中形構(gòu)相同的static方法。  
             final
          變量的總結(jié):

                        Final不想做改變的理由是:設(shè)計(jì)和效率

          java中除了static方法、final方法、(private方法屬于final方法)之外,其他所有的方法都是后期綁定

          Final可以修飾基本類型,也可以修飾引用類型,但是當(dāng)final修飾引用類型的時(shí)候,不能夠改變引用指向另一個(gè)對象, 但這個(gè)對象本身的狀態(tài)是可以改變的...

           

          final String string=“final”
          是開辟了2個(gè)內(nèi)存空間,在棧中的string引用在堆中的final,其中string是始終指向堆中的final這個(gè)地址的引用,不能改變。但是堆中的final卻可以改變。

           

           

          可以通過下面的例子來說明static final的作用:

          public class Test0
          {
          private static final String string;
          public Test0(String str)
          {
          string=str;
          System.out.println(string);
          }

          public static void main(String[] args)
          {
          Test0 t=new Test0("hello world");
          Test0 tt=new Test0("world hello");
          }

          }

           

          解釋說明:

          1.首先正確的認(rèn)識一下final, 一個(gè)final修飾的叫"終態(tài)", 而這種終態(tài)很特殊, 它指的是:"當(dāng)這個(gè)變量被賦值之后成為終態(tài)". 那么,當(dāng)一個(gè)被賦值之后的final修飾變量, 將不可再被賦新值. (先理解)

          2.
          static表示靜態(tài)變量, 說穿了,你需要知道JAVA如何為一個(gè)類創(chuàng)建內(nèi)存空間--我們知道類有空間,類產(chǎn)生的實(shí)例(對象)有空間,方法有空間,變量有空間, 當(dāng)static修飾時(shí), 這個(gè)變量會在類分配內(nèi)存時(shí)就被分配內(nèi)存了, 所以你知道,你可以不用產(chǎn)生對象就使用靜態(tài)變量.

          3.
          好了,有了以上兩點(diǎn),我們來看看, 你可以根據(jù)我的敘述試試. 首先,你只使用final修飾你的string, 你會發(fā)現(xiàn)不會報(bào)錯(cuò), 因?yàn)檫@是一個(gè)"還沒有被賦值的非靜態(tài)的終態(tài)變量(在類分配內(nèi)存時(shí)不會分配內(nèi)存).,接下來你改一下,:private final String string = "sss"; 你會發(fā)現(xiàn)報(bào)錯(cuò)了,原因自己想.
          接下來, 看你發(fā)出來的代碼, 又被static修飾,又被final修飾,首先它是一個(gè)靜態(tài)變量, 那么在類分配時(shí)就會分配內(nèi)存, 實(shí)際上這個(gè)String就被初始化了,既然初始化了, 那么也就有值了, 而一個(gè)終態(tài)被賦值變量將不能再被賦值, 那么自然就報(bào)錯(cuò)了

          posted @ 2008-04-29 09:11 forgood 閱讀(270) | 評論 (0)編輯 收藏

          多態(tài)

          學(xué)過Java基礎(chǔ)的人都能很容易理解上面的代碼和多態(tài)的原理,但是仍有一些關(guān)鍵的地方需要注意的,算是自己對多態(tài)的一個(gè)小結(jié):

          1. Java中除了static和final方法外,其他所有的方法都是運(yùn)行時(shí)綁定的。private方法都被隱式指定為final的,因此final的方法不會在運(yùn)行時(shí)綁定。當(dāng)在派生類中重寫基類中static、final、或private方法時(shí),實(shí)質(zhì)上是創(chuàng)建了一個(gè)新的方法。

          2.在派生類中,對于基類中的private方法,最好采用不同的名字。

          3.包含抽象方法的類叫做抽象類。注意定義里面包含這樣的意思,只要類中包含一個(gè)抽象方法,該類就是抽象類。抽象類在派生中就是作為基類的角色,為不同的子類提供通用的接口。

          4.對象清理的順序和創(chuàng)建的順序相反,當(dāng)然前提是自己想手動清理對象,因?yàn)榇蠹叶贾繨ava垃圾回收器。

          5.在基類的構(gòu)造方法中小心調(diào)用基類中被重寫的方法,這里涉及到對象初始化順序。

          6.構(gòu)造方法是被隱式聲明為static方法。

          7.用繼承表達(dá)行為間的差異,用字段表達(dá)狀態(tài)上的變化。

          posted @ 2008-04-28 09:54 forgood 閱讀(187) | 評論 (1)編輯 收藏

          僅列出標(biāo)題
          共8頁: 上一頁 1 2 3 4 5 6 7 8 下一頁 
          主站蜘蛛池模板: 盐池县| 平果县| 牙克石市| 丹凤县| 湘潭县| 吉木萨尔县| 汉阴县| 南江县| 大兴区| 焉耆| 芜湖县| 鲜城| 奎屯市| 邳州市| 教育| 丹凤县| 平远县| 靖安县| 仙游县| 礼泉县| 陆河县| 阳城县| 同仁县| 云安县| 曲阳县| 红河县| 深州市| 玉树县| 东阳市| 新竹市| 扶沟县| 米脂县| 海伦市| 平邑县| 泽库县| 油尖旺区| 东源县| 县级市| 日土县| 裕民县| 安塞县|