牛仔褲的夏天

          JAVA是藍(lán)色的- online

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            30 隨筆 :: 5 文章 :: 15 評(píng)論 :: 0 Trackbacks

          2006年6月12日 #

          ??? 貝貝在宜城中心幼兒園的第一個(gè)“六一”國際兒童節(jié)終于來到了,這對(duì)于我們?nèi)襾碚f可是一個(gè)大日子。早上起來,貝貝卻有點(diǎn)擔(dān)心我們不陪他一起參加幼兒園的慶祝活動(dòng),從而流露出一絲焦慮。其實(shí)我們才不會(huì)錯(cuò)過這個(gè)難得的機(jī)會(huì)呢,更何況爸爸媽媽和貝貝一起準(zhǔn)備的歌舞“小海軍”,也將在今天的慶祝活動(dòng)中一起亮相呢。

          ?????? 早上九點(diǎn),我們準(zhǔn)時(shí)來到幼兒園。作為小朋友們的樂園,這里歡歌笑語,張燈結(jié)彩,處處洋溢著兒童節(jié)的歡快氣氛,貝貝也很快就融入到節(jié)日的氛圍之中了。

          師和潘老師井然有序的安排下,小一班的慶祝活動(dòng)開始了。小朋友們分組表演了兒歌和童謠。輪到貝貝這一組開始表演了,我們趕快準(zhǔn)備拍照和攝像,一定要把這精彩的瞬間捕捉記錄下來。“ 公雞每天早早起,母雞生蛋孵小雞 …” ,小朋友們花朵般幼嫩的歌喉伴隨著可愛的舞蹈動(dòng)作吸引了在場(chǎng)的每一位家長。當(dāng)我們還都沉浸在剛才精彩的幼兒歌舞表演時(shí),家長們的趣味游戲“水果蹲”開始了,我和貝貝媽媽也積極參與了這個(gè)游戲。家長們的表現(xiàn)讓小朋友們?nèi)炭〔恢梗翱┛┛?/span> 咯咯咯”,一串串的笑聲渲染了每一位大人和小朋友。

          貝貝今天的表現(xiàn)很棒,當(dāng)老師說請(qǐng)貝貝家庭表演歌舞“小海軍”時(shí),他很快就大大方方地跑到舞臺(tái)中央,聲音響亮,和爸爸一起唱起小海軍這首兒歌,同時(shí)動(dòng)作流暢,和媽媽一起跳著舞蹈,開開心心地完成了這個(gè)節(jié)目,贏得了大家的一片掌聲。我們一直都很珍惜與貝貝一同參加集體活動(dòng)的機(jī)會(huì),因此心中尤為以這次在幼兒園里和貝貝一起同臺(tái)表演而感到高興。接下來,其他的家庭也都表演了各自精彩的節(jié)目,有講故事、鋼琴獨(dú)奏、雙簧,還有魔術(shù),眾彩紛呈的節(jié)目把這次活動(dòng)的氣氛推向高潮。以至于活動(dòng)落下帷幕時(shí),家長和小朋友們都還戀戀不舍呢。

          回家后,貝貝蹦蹦跳跳,不時(shí)唱著兒歌,似乎還對(duì)今天的活動(dòng)意猶未盡。“六一”兒童節(jié),我們?nèi)疫^得開心而有意義。通過這次活動(dòng)增強(qiáng)了貝貝在集體活動(dòng)中的自信心和責(zé)任感,同時(shí)也加強(qiáng)了我們和貝貝之間的互動(dòng)體驗(yàn)。

          posted @ 2006-06-12 14:05 luckyrobbie 閱讀(262) | 評(píng)論 (0)編輯 收藏

          2006年4月23日 #

          1
          早上,貝貝站在我的摩托車踏板上,我送他去幼兒園。開到roundabout的地方時(shí),貝貝說:爸爸就開這個(gè)溫度吧。 我問:什么? 貝貝說:是速度,不要再加速度了。

          2
          貝貝喜歡打電腦游戲,前幾天特別喜歡玩一個(gè)哆啦A夢(mèng)釣魚的flash游戲,如果不小心會(huì)釣到鯊魚,而且我們不讓他多玩。一天貝貝睡覺做夢(mèng)而大哭,叫醒后問他做到什么夢(mèng)了,他說:爸爸不讓我玩釣魚,而且釣到了鯊魚把小貓吃掉了。

          3
          晚上吃櫻桃,貝貝吃的很開心,還挑出紅的給我吃。我對(duì)貝貝說:挑1粒給媽媽吃吃,去拍拍她的馬屁。于是貝貝選了一個(gè)紅的櫻桃,跑到媽媽邊上說:媽媽,喏,吃個(gè)馬屁。
          posted @ 2006-04-23 11:02 luckyrobbie 閱讀(262) | 評(píng)論 (0)編輯 收藏

          2006年4月18日 #

          1. 域模型也稱為設(shè)計(jì)模型,由以下內(nèi)容組成:
          ??? 具有狀態(tài)和行為的域?qū)ο?br />??? 域?qū)ο笾g的關(guān)系

          2. 域?qū)ο?Domain Object) - 對(duì)真實(shí)世界的實(shí)體的軟件抽象,也叫業(yè)務(wù)對(duì)象(Business Object),分為:
          ????實(shí)體域?qū)ο?實(shí)體EJB,POJO),為每個(gè)實(shí)體域?qū)ο蠓峙銸ID(Object Identifier)
          ????過程域?qū)ο?Session Bean, Message Driven Bean, Java Bean)
          ??? 事件域?qū)ο?事件觸發(fā))
          ? 三種域?qū)ο笪挥跇I(yè)務(wù)邏輯層

          3. 域?qū)ο笾g的關(guān)系
          ??? 關(guān)聯(lián)(Association):one to one, one to many, many to many, 單向, 雙向
          ??? 依賴(Dependency):類與類之間的訪問關(guān)系,如果A訪問B的屬性或者方法,或者A負(fù)責(zé)實(shí)例化B,則A依賴B。過程域?qū)ο笸蕾噷?shí)體域?qū)ο蟆?br />????聚集(Aggregation):整體與部分之間的關(guān)系,實(shí)體域?qū)ο笾g常見。聚集關(guān)系和關(guān)聯(lián)關(guān)系有相同的形式,區(qū)別是:對(duì)于聚集關(guān)系,部分類的對(duì)象不能單獨(dú)存在,它的生命周期依賴于整體類的對(duì)象的生命周期;對(duì)于關(guān)聯(lián)關(guān)系的2個(gè)類,可以分別單獨(dú)存在。
          ????一般化(Generalization)

          ?????
          ???

          posted @ 2006-04-18 15:53 luckyrobbie 閱讀(239) | 評(píng)論 (0)編輯 收藏

          2006年4月6日 #

          這2天用hsqldb做hibernate測(cè)試,做insert時(shí),不論用hibernate的方法還是用jdbc的方法,顯示的一切信息都是成功的,可是后來打開hsqldb的manager,發(fā)現(xiàn)table里面沒有記錄insert,郁悶之極,覺得應(yīng)該是hsqldb的配置問題

          于是打開那個(gè)script文件,最后找到這句配置:SET WRITE_DELAY 20
          改為SET WRITE_DELAY 0后,一切正常了

          posted @ 2006-04-06 22:32 luckyrobbie 閱讀(345) | 評(píng)論 (0)編輯 收藏

          2006年3月30日 #

          http://msdn.microsoft.com/library/CHS/jscript7/html/jsreconIntroductionToRegularExpressions.asp?frame=true
          posted @ 2006-03-30 11:05 luckyrobbie 閱讀(330) | 評(píng)論 (0)編輯 收藏

          2006年3月27日 #

          我對(duì)decorate模式的理解:
          1-首先要有一個(gè)Interface,提供一個(gè)通用的方法;
          2-其次有n多個(gè)class來實(shí)現(xiàn)這個(gè)接口中的方法,這些實(shí)現(xiàn)方法在功能上應(yīng)該是并列的,但不是必須的,從而可以根據(jù)需要decorate那個(gè)需要被修飾的初始對(duì)象。
          3-最后這些class都有一個(gè)帶有Interface作為參數(shù)的構(gòu)造方法和一個(gè)Interface的屬性,這樣在構(gòu)造的時(shí)候就可以取得那個(gè)需要修飾的對(duì)象的實(shí)例,然后在實(shí)現(xiàn)Interface的方法里面,首先實(shí)現(xiàn)修飾對(duì)象實(shí)例的修飾方法,然后再進(jìn)行自己的decorate方法。

          根據(jù)這個(gè)想法來畫一張畫:

          package ?test;

          public ? interface ?Painting? {
          ????
          public ? void ?paint();
          }


          class ?SunPainting? implements ?Painting? {
          ????Painting?painting?
          = ? null ;

          ????
          public ?SunPainting()? {
          ????}


          ????
          public ?SunPainting(Painting?painting)? {
          ????????
          this .painting? = ?painting;
          ????}


          ????
          public ? void ?paint()? {
          ????????
          if ?(painting? != ? null )? {
          ????????????painting.paint();
          ????????}

          ????????System.out.println(
          " 畫了一個(gè)太陽 " );
          ????}

          }


          class ?CloudPainting? implements ?Painting? {
          ????Painting?painting?
          = ? null ;

          ????
          public ?CloudPainting()? {
          ????}


          ????
          public ?CloudPainting(Painting?painting)? {
          ????????
          this .painting? = ?painting;
          ????}


          ????
          public ? void ?paint()? {
          ????????
          if ?(painting? != ? null )? {
          ????????????painting.paint();
          ????????}

          ????????System.out.println(
          " 畫了一朵白云 " );
          ????}

          }


          class ?LawnPainting? implements ?Painting? {
          ????Painting?painting?
          = ? null ;

          ????
          public ?LawnPainting()? {
          ????}


          ????
          public ?LawnPainting(Painting?painting)? {
          ????????
          this .painting? = ?painting;
          ????}


          ????
          public ? void ?paint()? {
          ????????
          if ?(painting? != ? null )? {
          ????????????painting.paint();
          ????????}

          ????????System.out.println(
          " 畫了一片草地 " );
          ????}

          }

          再寫段測(cè)試畫畫的代碼:

          package ?test;

          public ? class ?TestPainting? {
          ????
          public ? static ? void ?main(String[]?args) {
          ????????
          new ?SunPainting( new ?CloudPainting( new ?LawnPainting())).paint();
          ????}

          }

          測(cè)試結(jié)果:

          畫了一片草地
          畫了一朵白云
          畫了一個(gè)太陽


          ?最后有個(gè)問題:為什么不直接定義一個(gè)畫畫的類,然后把這些該怎么畫的事情分別通過方法來實(shí)現(xiàn)呢? 那么什么情況下使用decorate模式更為合適呢?

          posted @ 2006-03-27 16:56 luckyrobbie 閱讀(571) | 評(píng)論 (0)編輯 收藏

          你覺得自己是一個(gè)Java專家嗎?是否肯定自己已經(jīng)全面掌握了Java的異常處理機(jī)制?在下面這段代碼中,你能夠迅速找出異常處理的六個(gè)問題嗎?

          ??????? 1 OutputStreamWriter out = ...
            2 java.sql.Connection conn = ...
            3 try { // ⑸
            4 Statement stat = conn.createStatement();
            5 ResultSet rs = stat.executeQuery(
            6 "select uid, name from user");
            7 while (rs.next())
            8 {
            9 out.println("ID:" + rs.getString("uid") // ⑹
            10 ",姓名:" + rs.getString("name"));
            11 }
            12 conn.close(); // ⑶
            13 out.close();
            14 }
            15 catch(Exception ex) // ⑵
            16 {
            17 ex.printStackTrace(); // ⑴,⑷
            18 }

          作為一個(gè)Java程序員,你至少應(yīng)該能夠找出兩個(gè)問題。但是,如果你不能找出全部六個(gè)問題,請(qǐng)繼續(xù)閱讀本文。

          本文討論的不是Java異常處理的一般性原則,因?yàn)檫@些原則已經(jīng)被大多數(shù)人熟知。我們要做的是分析各種可稱為“反例”(anti-pattern)的違背優(yōu)秀編碼規(guī)范的常見壞習(xí)慣,幫助讀者熟悉這些典型的反面例子,從而能夠在實(shí)際工作中敏銳地察覺和避免這些問題。

          反例之一:丟棄異常

          代碼:15行-18行。

          這段代碼捕獲了異常卻不作任何處理,可以算得上Java編程中的殺手。從問題出現(xiàn)的頻繁程度和禍害程度來看,它也許可以和C/C++程序的一個(gè)惡名遠(yuǎn)播的問題相提并論??不檢查緩沖區(qū)是否已滿。

          如果你看到了這種丟棄(而不是拋出)異常的情況,可以百分之九十九地肯定代碼存在問題(在極少數(shù)情況下,這段代碼有存在的理由,但最好加上完整的注釋,以免引起別人誤解)。

          這段代碼的錯(cuò)誤在于,異常(幾乎)總是意味著某些事情不對(duì)勁了,或者說至少發(fā)生了某些不尋常的事情,我們不應(yīng)該對(duì)程序發(fā)出的求救信號(hào)保持沉默和無動(dòng)于衷。調(diào)用一下printStackTrace算不上“處理異常”。

          不錯(cuò),調(diào)用printStackTrace對(duì)調(diào)試程序有幫助,但程序調(diào)試階段結(jié)束之后,printStackTrace就不應(yīng)再在異常處理模塊中擔(dān)負(fù)主要責(zé)任了。

          丟棄異常的情形非常普遍。打開JDK的ThreadDeath類的文檔,可以看到下面這段說明:“特別地,雖然出現(xiàn)ThreadDeath是一種‘正常的情形’,但ThreadDeath類是Error而不是Exception的子類,因?yàn)樵S多應(yīng)用會(huì)捕獲所有的Exception然后丟棄它不再理睬。

          ”這段話的意思是,雖然ThreadDeath代表的是一種普通的問題,但鑒于許多應(yīng)用會(huì)試圖捕獲所有異常然后不予以適當(dāng)?shù)奶幚恚訨DK把ThreadDeath定義成了Error的子類,因?yàn)镋rror類代表的是一般的應(yīng)用不應(yīng)該去捕獲的嚴(yán)重問題。可見,丟棄異常這一壞習(xí)慣是如此常見,它甚至已經(jīng)影響到了Java本身的設(shè)計(jì)。

          那么,應(yīng)該怎樣改正呢?主要有四個(gè)選擇:

          1、處理異常。針對(duì)該異常采取一些行動(dòng),例如修正問題、提醒某個(gè)人或進(jìn)行其他一些處理,要根據(jù)具體的情形確定應(yīng)該采取的動(dòng)作。再次說明,調(diào)用printStackTrace算不上已經(jīng)“處理好了異常”。

          2、重新拋出異常。處理異常的代碼在分析異常之后,認(rèn)為自己不能處理它,重新拋出異常也不失為一種選擇。

          3、把該異常轉(zhuǎn)換成另一種異常。大多數(shù)情況下,這是指把一個(gè)低級(jí)的異常轉(zhuǎn)換成應(yīng)用級(jí)的異常(其含義更容易被用戶了解的異常)。

          4、不要捕獲異常。

          結(jié)論一:既然捕獲了異常,就要對(duì)它進(jìn)行適當(dāng)?shù)奶幚怼2灰东@異常之后又把它丟棄,不予理睬。

          反例之二:不指定具體的異常

          代碼:15行。

          許多時(shí)候人們會(huì)被這樣一種“美妙的”想法吸引:用一個(gè)catch語句捕獲所有的異常。最常見的情形就是使用catch(Exception

          ex)語句。但實(shí)際上,在絕大多數(shù)情況下,這種做法不值得提倡。為什么呢?

          要理解其原因,我們必須回顧一下catch語句的用途。catch語句表示我們預(yù)期會(huì)出現(xiàn)某種異常,而且希望能夠處理該異常。異常類的作用就是告訴Java編譯器我們想要處理的是哪一種異常。

          由于絕大多數(shù)異常都直接或間接從java.lang.Exception派生,catch(Exception ex)就相當(dāng)于說我們想要處理幾乎所有的異常。

          再來看看前面的代碼例子。我們真正想要捕獲的異常是什么呢?最明顯的一個(gè)是SQLException,這是JDBC操作中常見的異常。另一個(gè)可能的異常是IOException,因?yàn)樗僮鱋utputStreamWriter。

          顯然,在同一個(gè)catch塊中處理這兩種截然不同的異常是不合適的。如果用兩個(gè)catch塊分別捕獲SQLException和IOException就要好多了。這就是說,catch語句應(yīng)當(dāng)盡量指定具體的異常類型,而不應(yīng)該指定涵蓋范圍太廣的Exception類。

          另一方面,除了這兩個(gè)特定的異常,還有其他許多異常也可能出現(xiàn)。例如,如果由于某種原因,executeQuery返回了null,該怎么辦?答案是讓它們繼續(xù)拋出,即不必捕獲也不必處理。實(shí)際上,我們不能也不應(yīng)該去捕獲可能出現(xiàn)的所有異常,程序的其他地方還有捕獲異常的機(jī)會(huì)直至最后由JVM處理。

          結(jié)論二:在catch語句中盡可能指定具體的異常類型,必要時(shí)使用多個(gè)catch。不要試圖處理所有可能出現(xiàn)的異常。

          反例之三:占用資源不釋放

          代碼:3行-14行。

          異常改變了程序正常的執(zhí)行流程。這個(gè)道理雖然簡(jiǎn)單,卻常常被人們忽視。如果程序用到了文件、Socket、JDBC連接之類的資源,即使遇到了異常,也要正確釋放占用的資源。為此,Java提供了一個(gè)簡(jiǎn)化這類操作的關(guān)鍵詞finally。

          finally是樣好東西:不管是否出現(xiàn)了異常,F(xiàn)inally保證在try/catch/finally塊結(jié)束之前,執(zhí)行清理任務(wù)的代碼總是有機(jī)會(huì)執(zhí)行。遺憾的是有些人卻不習(xí)慣使用finally。

          當(dāng)然,編寫finally塊應(yīng)當(dāng)多加小心,特別是要注意在finally塊之內(nèi)拋出的異常??這是執(zhí)行清理任務(wù)的最后機(jī)會(huì),盡量不要再有難以處理的錯(cuò)誤。

          結(jié)論三:保證所有資源都被正確釋放。充分運(yùn)用finally關(guān)鍵詞。

          反例之四:不說明異常的詳細(xì)信息

          代碼:3行-18行。

          仔細(xì)觀察這段代碼:如果循環(huán)內(nèi)部出現(xiàn)了異常,會(huì)發(fā)生什么事情?我們可以得到足夠的信息判斷循環(huán)內(nèi)部出錯(cuò)的原因嗎?不能。我們只能知道當(dāng)前正在處理的類發(fā)生了某種錯(cuò)誤,但卻不能獲得任何信息判斷導(dǎo)致當(dāng)前錯(cuò)誤的原因。

          printStackTrace的堆棧跟蹤功能顯示出程序運(yùn)行到當(dāng)前類的執(zhí)行流程,但只提供了一些最基本的信息,未能說明實(shí)際導(dǎo)致錯(cuò)誤的原因,同時(shí)也不易解讀。

          因此,在出現(xiàn)異常時(shí),最好能夠提供一些文字信息,例如當(dāng)前正在執(zhí)行的類、方法和其他狀態(tài)信息,包括以一種更適合閱讀的方式整理和組織printStackTrace提供的信息。

          結(jié)論四:在異常處理模塊中提供適量的錯(cuò)誤原因信息,組織錯(cuò)誤信息使其易于理解和閱讀。

          反例之五:過于龐大的try塊

          代碼:3行-14行。

          經(jīng)常可以看到有人把大量的代碼放入單個(gè)try塊,實(shí)際上這不是好習(xí)慣。這種現(xiàn)象之所以常見,原因就在于有些人圖省事,不愿花時(shí)間分析一大塊代碼中哪幾行代碼會(huì)拋出異常、異常的具體類型是什么。把大量的語句裝入單個(gè)巨大的try塊就象是出門旅游時(shí)把所有日常用品塞入一個(gè)大箱子,雖然東西是帶上了,但要找出來可不容易。

          一些新手常常把大量的代碼放入單個(gè)try塊,然后再在catch語句中聲明Exception,而不是分離各個(gè)可能出現(xiàn)異常的段落并分別捕獲其異常。這種做法為分析程序拋出異常的原因帶來了困難,因?yàn)橐淮蠖未a中有太多的地方可能拋出Exception。

          結(jié)論五:盡量減小try塊的體積。

          反例之六:輸出數(shù)據(jù)不完整

          代碼:7行-11行。

          不完整的數(shù)據(jù)是Java程序的隱形殺手。仔細(xì)觀察這段代碼,考慮一下如果循環(huán)的中間拋出了異常,會(huì)發(fā)生什么事情。循環(huán)的執(zhí)行當(dāng)然是要被打斷的,其次,catch塊會(huì)執(zhí)行??就這些,再也沒有其他動(dòng)作了。

          已經(jīng)輸出的數(shù)據(jù)怎么辦?使用這些數(shù)據(jù)的人或設(shè)備將收到一份不完整的(因而也是錯(cuò)誤的)數(shù)據(jù),卻得不到任何有關(guān)這份數(shù)據(jù)是否完整的提示。對(duì)于有些系統(tǒng)來說,數(shù)據(jù)不完整可能比系統(tǒng)停止運(yùn)行帶來更大的損失。

          較為理想的處置辦法是向輸出設(shè)備寫一些信息,聲明數(shù)據(jù)的不完整性;另一種可能有效的辦法是,先緩沖要輸出的數(shù)據(jù),準(zhǔn)備好全部數(shù)據(jù)之后再一次性輸出。

          結(jié)論六:全面考慮可能出現(xiàn)的異常以及這些異常對(duì)執(zhí)行流程的影響。

          改寫后的代碼

          根據(jù)上面的討論,下面給出改寫后的代碼。也許有人會(huì)說它稍微有點(diǎn)?嗦,但是它有了比較完備的異常處理機(jī)制。


          OutputStreamWriter out = ...
            java.sql.Connection conn = ...
            try {
             Statement stat = conn.createStatement();
             ResultSet rs = stat.executeQuery("select uid, name from user");
             while (rs.next()){
              out.println("ID:" + rs.getString("uid") + ",姓名: "+ rs.getString("name"));
             }
            }
            catch(SQLException sqlex)
            {
             out.println("警告:數(shù)據(jù)不完整");
             throw new ApplicationException("讀取數(shù)據(jù)時(shí)出現(xiàn)SQL錯(cuò)誤", sqlex);
            }
            catch(IOException ioex)
            {
             throw new ApplicationException("寫入數(shù)據(jù)時(shí)出現(xiàn)IO錯(cuò)誤", ioex);
            }
            finally
            {
             if (conn != null) {
              try {
               conn.close();
              }
              catch(SQLException sqlex2)
              {
               System.err(this.getClass().getName() + ".mymethod - 不能關(guān)閉數(shù)據(jù)庫連接:" + sqlex2.toString());
              }
             }
             if (out != null){
              try {
               out.close();
              }
              catch(IOException ioex2)
              {
               System.err(this.getClass().getName() + ".mymethod - 不能關(guān)閉輸出文件" + ioex2.toString());
              }
             }
            }




          本文的結(jié)論不是放之四海皆準(zhǔn)的教條,有時(shí)常識(shí)和經(jīng)驗(yàn)才是最好的老師。如果你對(duì)自己的做法沒有百分之百的信心,務(wù)必加上詳細(xì)、全面的注釋。

          一方面,不要笑話這些錯(cuò)誤,不妨問問你自己是否真地徹底擺脫了這些壞習(xí)慣。即使最有經(jīng)驗(yàn)的程序員偶爾也會(huì)誤入歧途,原因很簡(jiǎn)單,因?yàn)樗鼈兇_確實(shí)實(shí)帶來了“方便”。所有這些反例都可以看作Java編程世界的惡魔,它們美麗動(dòng)人,無孔不入,時(shí)刻誘惑著你。也許有人會(huì)認(rèn)為這些都屬于雞皮蒜毛的小事,不足掛齒,但請(qǐng)記住:勿以惡小而為之,勿以善小而不為。
          posted @ 2006-03-27 10:17 luckyrobbie 閱讀(281) | 評(píng)論 (0)編輯 收藏

          JSP彩色驗(yàn)證碼

          xiaohanne 發(fā)表于2004-06-01 作者:xiaohanne 評(píng)價(jià):13/6 評(píng)論數(shù):5 點(diǎn)擊數(shù):5229 [ 收藏 ]
          摘要:



          本文Matrix永久鏡像:
          http://www.matrix.org.cn/resource/article/0/910.html
          說明:本文可能由Matrix原創(chuàng),也可能由Matrix的會(huì)員整理,或者由
          Matrix的Crawler在全球知名Java或者其他技術(shù)相關(guān)站點(diǎn)抓取并永久
          保留鏡像,Matrix會(huì)保留所有原來的出處URL,并在顯著地方作出說明,
          如果你發(fā)覺出處URL有誤,請(qǐng)聯(lián)系Matrix改正.
          生成有4個(gè)隨機(jī)數(shù)字和雜亂背景的圖片,數(shù)字和背景顏色會(huì)改變,服務(wù)器端刷新(用history.go(-1)也會(huì)變)
          原型參考ALIBABA??
          http://china.alibaba.com/member/showimage

          ------------產(chǎn)生驗(yàn)證碼圖片的文件-----image.jsp-------------------------------------------

          <%@ page contentType="image/jpeg" import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*" %>
          <%!
          Color getRandColor(int fc,int bc){//給定范圍獲得隨機(jī)顏色
          ????????Random random = new Random();
          ????????if(fc>255) fc=255;
          ????????if(bc>255) bc=255;
          ????????int r=fc+random.nextInt(bc-fc);
          ????????int g=fc+random.nextInt(bc-fc);
          ????????int b=fc+random.nextInt(bc-fc);
          ????????return new Color(r,g,b);
          ????????}
          %>
          <%
          //設(shè)置頁面不緩存
          response.setHeader("Pragma","No-cache");
          response.setHeader("Cache-Control","no-cache");
          response.setDateHeader("Expires", 0);

          // 在內(nèi)存中創(chuàng)建圖象
          int width=60, height=20;
          BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

          // 獲取圖形上下文
          Graphics g = image.getGraphics();

          //生成隨機(jī)類
          Random random = new Random();

          // 設(shè)定背景色
          g.setColor(getRandColor(200,250));
          g.fillRect(0, 0, width, height);

          //設(shè)定字體
          g.setFont(new Font("Times New Roman",Font.PLAIN,18));

          //畫邊框
          //g.setColor(new Color());
          //g.drawRect(0,0,width-1,height-1);


          // 隨機(jī)產(chǎn)生155條干擾線,使圖象中的認(rèn)證碼不易被其它程序探測(cè)到
          g.setColor(getRandColor(160,200));
          for (int i=0;i<155;i++)
          {
          ????????int x = random.nextInt(width);
          ????????int y = random.nextInt(height);
          ????????int xl = random.nextInt(12);
          ????????int yl = random.nextInt(12);
          ????????g.drawLine(x,y,x+xl,y+yl);
          }

          // 取隨機(jī)產(chǎn)生的認(rèn)證碼(4位數(shù)字)
          String sRand="";
          for (int i=0;i<4;i++){
          ????String rand=String.valueOf(random.nextInt(10));
          ????sRand+=rand;
          ????// 將認(rèn)證碼顯示到圖象中
          ????g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));//調(diào)用函數(shù)出來的顏色相同,可能是因?yàn)榉N子太接近,所以只能直接生成
          ????g.drawString(rand,13*i+6,16);
          }

          // 將認(rèn)證碼存入SESSION
          session.setAttribute("rand",sRand);


          // 圖象生效
          g.dispose();

          // 輸出圖象到頁面
          ImageIO.write(image, "JPEG", response.getOutputStream());


          %>

          ---------------使用驗(yàn)證碼圖片的文件---------a.jsp------------------------------------

          <%@ page contentType="text/html;charset=gb2312" %>
          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
          <html>
          <head>
          <title>認(rèn)證碼輸入頁面</title>
          <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
          <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
          <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
          <META HTTP-EQUIV="Expires" CONTENT="0">
          </head>
          <body>
          <form method=post action="check.jsp">
          <table>
          <tr>
          <td align=left>系統(tǒng)產(chǎn)生的認(rèn)證碼:</td>
          <td><img border=0 src="image.jsp"></td>
          </tr>
          <tr>
          <td align=left>輸入上面的認(rèn)證碼:</td>
          <td><input type=text name=rand maxlength=4 value=""></td>
          </tr>
          <tr>
          <td colspan=2 align=center><input type=submit value="提交檢測(cè)"></td>
          </tr>
          </form>
          </body>
          </html>

          -----------------驗(yàn)證的頁面----------check.jsp

          <%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
          <html>
          <head>
          <title>認(rèn)證碼驗(yàn)證頁面</title>
          <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
          <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
          <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
          <META HTTP-EQUIV="Expires" CONTENT="0">
          </head>

          <body>
          <%
          String rand = (String)session.getAttribute("rand");
          String input = request.getParameter("rand");
          %>
          系統(tǒng)產(chǎn)生的認(rèn)證碼為: <%= rand %><br>
          您輸入的認(rèn)證碼為: <%= input %><br>
          <br>
          <%
          ??if (rand.equals(input)) {
          %>
          <font color=green>輸入相同,認(rèn)證成功!</font>
          <%
          ??} else {
          %>
          <font color=red>輸入不同,認(rèn)證失敗!</font>
          <%
          ??}
          %>
          </body>
          </html>
          posted @ 2006-03-27 10:13 luckyrobbie 閱讀(280) | 評(píng)論 (0)編輯 收藏

          自己的build.xml?
          <?xml version="1.0" encoding="gb2312"?>
          <project name="app" default="build" basedir=".">
          ?<property name="app.name" value="hello-ant"/>
          ??? ?<property name="app.jar" value="${app.name}.jar"/>
          ??? ?<property name="app.copyright" value=" Copyright (c) 2005 The Robbie's Software Foundation.? All rights reserved."/>

          ?<property name="src.dir" location="src"/>
          ?<property name="build.dir" location="build"/>
          ?<property name="build.docs" value="${build.dir}/docs"/>
          ?<property name="build.docs.api" value="${build.docs}/api"/>
          ?<property name="dist.dir" location="dist"/>
          ?<property name="lib.dir" location="lib"/>
          ?<property environment="env"/> <!--取系統(tǒng)環(huán)境變量-->
          ?
          ?<path id="myclasspath">
          ??<fileset dir="${lib.dir}">
          ???<include name="**/*.jar"/>
          ??</fileset>
          ??<fileset dir="${env.STRUTS_HOME}">
          ???<include name="lib/*.jar"/>
          ??</fileset>
          <!--
          pathelement只能添加單個(gè)的jar文件, 沒有fileset方便
          ??<pathelement path="${env.STRUTS_HOME}/lib/struts.jar"/>
          -->??
          ?</path>
          ?
          ?<target name="init" depends="clean">
          ??<echo message="初始化..."/>
          ??<mkdir dir="${build.dir}"/>
          ?</target>
          ?
          ?<target name="build" depends="init">
          ??<echo message="編譯中..."/>
          ??<javac srcdir="${src.dir}" destdir="${build.dir}" verbose="true">
          ???<classpath refid="myclasspath"/>
          ?
          ??<compilerarg value="-Xlint:all"/> <!--網(wǎng)上找了半天才找到的, 用于添加javac的編譯參數(shù)-->
          ??</javac>
          ?</target>
          ?
          ?<target name="clean">
          ??<echo message="清理中..."/>
          ??<delete dir="${build.dir}"/>
          ??<delete dir="${dist.dir}"/>
          ?</target>
          ?
          ?<target name="dist" depends="build">
          ??<echo message="制作jar..."/>
          ??<tstamp/>
          ??<mkdir dir="${dist.dir}"/>
          ??<jar destfile="${dist.dir}/app-${DSTAMP}${TSTAMP}.jar" basedir="${build.dir}"/>??
          ?</target>
          ?
          ?<target name="javadocs" depends="dist">
          ??<echo message="制作api手冊(cè)..."/>
          ??<mkdir dir="${build.docs.api}"/>
          ??????? ?<javadoc packagenames="tax.*"
          ??????????????? ?? sourcepath="${src.dir}"
          ?????????????????? defaultexcludes="yes"
          ???????????????? ? destdir="${build.docs.api}"
          ???????????????? ? author="true"
          ???????????????? ? version="true"
          ???????????????? ? use="true"
          ???????????????? ? windowtitle="Docs API">
          ???????????? ??<doctitle><![CDATA[<h1>tax struts ant API Docs</h1>]]></doctitle>
          ???????????? ??<bottom><![CDATA[<i>${app.copyright}</i>]]></bottom>
          ??????? </javadoc>
          ??? ?</target>
          </project>

          ?
          ?
          ?
          ?
          ?
          ?
          ?
          ?
          ?
          ?

          ?別人的build.xml
          ?
          <?xml version="1.0"? encoding="GB2312" ?>
          <!--
          ??? =======================================================================
          ????? hello-ant 項(xiàng)目 ,學(xué)習(xí)ant工具的第2個(gè)build file.
          ????? 參照ant的jakarta-ant-1.6alpha的build.xml
          ????? Copyright (c) 2002 The Neusoft Software Foundation.? All rights
          ????? reserved.
          ??? =======================================================================
          -->
          <project default="dist" basedir=".">
          <!--
          ??? ===================================================================
          ????? 定義屬性(property tasks)
          ????? 最好把用到的路徑呀,名稱呀都在這里定義成全局變量
          ????? 例:定義
          ????????? <property name="a" value="hello"/>
          ????? 以后就可以這樣用它:
          ????????? <property name="b" value="${a}/b"/>
          ????? 現(xiàn)在:b=="hello/b"
          ??? ===================================================================
          -->
          ??? <!--主要的系統(tǒng)環(huán)境屬性-->
          ??? <property environment="env"/><!--取window,unix...的環(huán)境變量-->
          ??? <property name="java.home" value="${env.JAVA_HOME}"/>
          ??? <property name="ant.home"? value="${env.ANT_HOME}"/>
          ??? <!--主要的app環(huán)境屬性-->
          ??? <property name="app.name"????? value="hello-ant"/>
          ??? <property name="app.jar"?????? value="${app.name}.jar"/>
          ??? <property name="app.copyright" value=" Copyright (c) 2002 The Neusoft Software Foundation.? All rights reserved."/>

          ??? <!--app中src的屬性-->
          ??? <property name="src.dir"??? value="src" />
          ??? <property name="src.main"?? value="${src.dir}/main"/>
          ??? <property name="src.script" value="${src.dir}/script"/>
          ??? <!--app用到的lib-->
          ??? <property name="lib.dir" value="lib"/>
          ??? <!--app的build目錄中-->
          ??? <property name="build.dir"????? value="build" />
          ??? <property name="build.classes"? value="${build.dir}/classes"/>
          ??? <property name="build.docs"???? value="${build.dir}/docs"/>
          ??? <property name="build.docs.api" value="${build.docs}/api"/>
          ??? <property name="build.lib"????? value="${build.dir}/lib"/>
          ??? <!--app的dist (distribution) 目錄中-->
          ??? <property name="dist.dir"????? value="dist"/>
          ??? <property name="dist.bin"????? value="${dist.dir}/bin"/>
          ??? <property name="dist.docs"???? value="${dist.dir}/docs"/>
          ??? <property name="dist.lib"????? value="${dist.dir}/lib"/>
          ??? <!--app的docs目錄中-->
          ??? <property name="docs.dir"????? value="docs"/>
          ??? <!--
          ??? 定義一組路徑以后可以通過id重用這組路徑 ,例:
          ??? <javac srcdir="src/main" destdir="build/classes">
          ??????????? <classpath refid="classpath"/>
          ??? </javac>
          ??? -->
          ??? <path id="classpath">
          ??????? <!--本項(xiàng)目只有一個(gè)java,用不上classpath,這里只是做個(gè)例子-->
          ??????? <pathelement location="${build.classes}"/>
          ??????? <pathelement path="${java.home}/lib/tools.jar"/>
          ??? </path>
          <!--
          ??? ===================================================================
          ????? init 準(zhǔn)備目錄(File Tasks)
          ????? 主要的目錄結(jié)構(gòu)通常是不會(huì)變的,一起生成他們
          ??? ===================================================================
          -->
          ??? <target name="init">
          ??????? <!--清除以前目錄-->
          ??????? <delete dir="${build.dir}" failonerror="false" />
          ??????? <delete dir="${dist.dir}"? failonerror="false"/>
          ??????? <!--準(zhǔn)備目錄-->
          ??????? <mkdir dir="${build.dir}"/>
          ??????? <mkdir dir="${build.classes}"/>
          ??????? <mkdir dir="${build.docs}"/>
          ??????? <mkdir dir="${build.docs.api}"/>
          ??????? <mkdir dir="${build.lib}"/>
          ??????? <mkdir dir="${dist.dir}"/>
          ??????? <mkdir dir="${dist.bin}"/>
          ??????? <mkdir dir="${dist.lib}"/>
          ??? </target>
          <!--
          ??? ===================================================================
          ????? Build the code (Compile Tasks,File Tasks)
          ??? ===================================================================
          -->
          ??? <target name="build" depends="init">
          ??????? <!--編譯-->
          ??????? <javac srcdir="${src.main}" destdir="${build.classes}">
          ??????????? <classpath refid="classpath"/>
          ??????? </javac>
          ??? </target>
          <!--
          ??? ===================================================================
          ????? 打包文檔(Archive Tasks)
          ????? Create the project jars: xxx1.jar and xxx2.jar
          ??? ===================================================================
          -->
          ?? <target name="jars" depends="build">
          ??????? <jar basedir="${build.classes}" jarfile="${build.lib}/${app.jar}"/>
          ??? </target>
          <!--
          ???? ===================================================================
          ?????? Creates the API documentation
          ???? ===================================================================
          -->
          ??? <target name="javadocs"
          ??????????? depends="jars"
          ??????????? description="--> creates the API documentation">
          ??????? <!--copy docs 手冊(cè)... -->
          ??????? <copy todir="${build.docs}">
          ??????????? <fileset dir="${docs.dir}"/>
          ??????? </copy>
          ??????? <javadoc packagenames="hello.ant.*"
          ???????????????? sourcepath="${src.main}"
          ???????????????? defaultexcludes="yes"
          ???????????????? destdir="${build.docs.api}"
          ???????????????? author="true"
          ???????????????? version="true"
          ???????????????? use="true"
          ???????????????? windowtitle="Docs API">
          ???????????? <doctitle><![CDATA[<h1>hello ant Docs API</h1>]]></doctitle>
          ???????????? <bottom><![CDATA[<i>${app.copyright}</i>]]></bottom>
          ???????????? <tag name="todo" scope="all" description="To do:" />
          ???????? </javadoc>
          ??? </target>
          <!--
          ???? ===================================================================
          ?????? Create the distribution that can run (Archive Tasks)
          ?????? 主要是從各目錄中把該copy的copy上
          ???? ===================================================================
          -->
          ?? <target name="dist" depends="javadocs">
          ??????? <!--copy bin 執(zhí)行文件 -->
          ??????? <copy todir="${dist.bin}">
          ??????????? <fileset dir="${src.script}/"/>
          ??????? </copy>
          ??????? <copy todir="${dist.docs}">
          ??????????? <fileset dir="${build.docs}/"/>
          ??????? </copy>
          ??????? <!-- copy lib 文件 -->
          ??????? <copy todir="${dist.lib}">
          ??????????? <fileset dir="${build.lib}/"/>
          ??????? </copy>
          ??? </target>
          <!--
          ???? ===================================================================
          ????? Cleans everything(File Tasks)
          ????? 例如可以刪除build中的文件,留給你發(fā)揮吧
          ???? ===================================================================
          -->
          </project>
          posted @ 2006-03-27 10:07 luckyrobbie 閱讀(463) | 評(píng)論 (0)編輯 收藏

          Action中的代碼:
          ActionMessages actionMessages=new ActionMessages();
          actionMessages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("......"));
          saveMessages(request, actionMessages);
          ?
          對(duì)應(yīng)的jsp中:
          <html:messages id="message" message="true">
          ????? <bean:write name="message"/>
          </html:messages>
          • name : 指定ActionMessages存放在request或者session內(nèi)的屬性key.
          • message: 指定消息的來源, 如果為true, 對(duì)應(yīng)于key=Globals.MESSAGE_KEY的ActionMessages對(duì)象, 此時(shí)name屬性無效;如果為false, 則根據(jù)name屬性檢索ActionMessages對(duì)象, 如果沒有設(shè)置name, 默認(rèn)為Globals.ERROR_KEY. message屬性的默認(rèn)值為false.
          posted @ 2006-03-27 10:02 luckyrobbie 閱讀(2141) | 評(píng)論 (4)編輯 收藏

          僅列出標(biāo)題  下一頁
          主站蜘蛛池模板: 买车| 滁州市| 正宁县| 闸北区| 静安区| 盐津县| 松江区| 长岛县| 德庆县| 安国市| 湛江市| 蕲春县| 陆川县| 北辰区| 依兰县| 四子王旗| 年辖:市辖区| 共和县| 伊通| 白城市| 黄骅市| 秀山| 长宁县| 衡阳县| 永康市| 汪清县| 新营市| 迭部县| 平和县| 乐东| 博白县| 安庆市| 福海县| 永新县| 治多县| 句容市| 麻江县| 徐水县| 朝阳市| 淮滨县| 西林县|