牛仔褲的夏天

          JAVA是藍色的- online

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            30 隨筆 :: 5 文章 :: 15 評論 :: 0 Trackbacks

          2006年3月22日 #

          ??? 貝貝在宜城中心幼兒園的第一個“六一”國際兒童節終于來到了,這對于我們全家來說可是一個大日子。早上起來,貝貝卻有點擔心我們不陪他一起參加幼兒園的慶祝活動,從而流露出一絲焦慮。其實我們才不會錯過這個難得的機會呢,更何況爸爸媽媽和貝貝一起準備的歌舞“小海軍”,也將在今天的慶祝活動中一起亮相呢。

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

          師和潘老師井然有序的安排下,小一班的慶祝活動開始了。小朋友們分組表演了兒歌和童謠。輪到貝貝這一組開始表演了,我們趕快準備拍照和攝像,一定要把這精彩的瞬間捕捉記錄下來。“ 公雞每天早早起,母雞生蛋孵小雞 …” ,小朋友們花朵般幼嫩的歌喉伴隨著可愛的舞蹈動作吸引了在場的每一位家長。當我們還都沉浸在剛才精彩的幼兒歌舞表演時,家長們的趣味游戲“水果蹲”開始了,我和貝貝媽媽也積極參與了這個游戲。家長們的表現讓小朋友們忍俊不止,“咯咯咯 咯咯咯”,一串串的笑聲渲染了每一位大人和小朋友。

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

          回家后,貝貝蹦蹦跳跳,不時唱著兒歌,似乎還對今天的活動意猶未盡。“六一”兒童節,我們全家過得開心而有意義。通過這次活動增強了貝貝在集體活動中的自信心和責任感,同時也加強了我們和貝貝之間的互動體驗。

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

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

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

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

          1. 域模型也稱為設計模型,由以下內容組成:
          ??? 具有狀態和行為的域對象
          ??? 域對象之間的關系

          2. 域對象(Domain Object) - 對真實世界的實體的軟件抽象,也叫業務對象(Business Object),分為:
          ????實體域對象(實體EJB,POJO),為每個實體域對象分配OID(Object Identifier)
          ????過程域對象(Session Bean, Message Driven Bean, Java Bean)
          ??? 事件域對象(事件觸發)
          ? 三種域對象位于業務邏輯層

          3. 域對象之間的關系
          ??? 關聯(Association):one to one, one to many, many to many, 單向, 雙向
          ??? 依賴(Dependency):類與類之間的訪問關系,如果A訪問B的屬性或者方法,或者A負責實例化B,則A依賴B。過程域對象往往依賴實體域對象。
          ????聚集(Aggregation):整體與部分之間的關系,實體域對象之間常見。聚集關系和關聯關系有相同的形式,區別是:對于聚集關系,部分類的對象不能單獨存在,它的生命周期依賴于整體類的對象的生命周期;對于關聯關系的2個類,可以分別單獨存在。
          ????一般化(Generalization)

          ?????
          ???

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

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

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

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

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

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

          根據這個想法來畫一張畫:

          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(
          " 畫了一個太陽 " );
          ????}

          }


          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(
          " 畫了一片草地 " );
          ????}

          }

          再寫段測試畫畫的代碼:

          package ?test;

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

          }

          測試結果:

          畫了一片草地
          畫了一朵白云
          畫了一個太陽


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

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

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

          ??????? 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 }

          作為一個Java程序員,你至少應該能夠找出兩個問題。但是,如果你不能找出全部六個問題,請繼續閱讀本文。

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

          反例之一:丟棄異常

          代碼:15行-18行。

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

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

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

          不錯,調用printStackTrace對調試程序有幫助,但程序調試階段結束之后,printStackTrace就不應再在異常處理模塊中擔負主要責任了。

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

          ”這段話的意思是,雖然ThreadDeath代表的是一種普通的問題,但鑒于許多應用會試圖捕獲所有異常然后不予以適當的處理,所以JDK把ThreadDeath定義成了Error的子類,因為Error類代表的是一般的應用不應該去捕獲的嚴重問題。可見,丟棄異常這一壞習慣是如此常見,它甚至已經影響到了Java本身的設計。

          那么,應該怎樣改正呢?主要有四個選擇:

          1、處理異常。針對該異常采取一些行動,例如修正問題、提醒某個人或進行其他一些處理,要根據具體的情形確定應該采取的動作。再次說明,調用printStackTrace算不上已經“處理好了異常”。

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

          3、把該異常轉換成另一種異常。大多數情況下,這是指把一個低級的異常轉換成應用級的異常(其含義更容易被用戶了解的異常)。

          4、不要捕獲異常。

          結論一:既然捕獲了異常,就要對它進行適當的處理。不要捕獲異常之后又把它丟棄,不予理睬。

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

          代碼:15行。

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

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

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

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

          再來看看前面的代碼例子。我們真正想要捕獲的異常是什么呢?最明顯的一個是SQLException,這是JDBC操作中常見的異常。另一個可能的異常是IOException,因為它要操作OutputStreamWriter。

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

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

          結論二:在catch語句中盡可能指定具體的異常類型,必要時使用多個catch。不要試圖處理所有可能出現的異常。

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

          代碼:3行-14行。

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

          finally是樣好東西:不管是否出現了異常,Finally保證在try/catch/finally塊結束之前,執行清理任務的代碼總是有機會執行。遺憾的是有些人卻不習慣使用finally。

          當然,編寫finally塊應當多加小心,特別是要注意在finally塊之內拋出的異常??這是執行清理任務的最后機會,盡量不要再有難以處理的錯誤。

          結論三:保證所有資源都被正確釋放。充分運用finally關鍵詞。

          反例之四:不說明異常的詳細信息

          代碼:3行-18行。

          仔細觀察這段代碼:如果循環內部出現了異常,會發生什么事情?我們可以得到足夠的信息判斷循環內部出錯的原因嗎?不能。我們只能知道當前正在處理的類發生了某種錯誤,但卻不能獲得任何信息判斷導致當前錯誤的原因。

          printStackTrace的堆棧跟蹤功能顯示出程序運行到當前類的執行流程,但只提供了一些最基本的信息,未能說明實際導致錯誤的原因,同時也不易解讀。

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

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

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

          代碼:3行-14行。

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

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

          結論五:盡量減小try塊的體積。

          反例之六:輸出數據不完整

          代碼:7行-11行。

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

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

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

          結論六:全面考慮可能出現的異常以及這些異常對執行流程的影響。

          改寫后的代碼

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


          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("警告:數據不完整");
             throw new ApplicationException("讀取數據時出現SQL錯誤", sqlex);
            }
            catch(IOException ioex)
            {
             throw new ApplicationException("寫入數據時出現IO錯誤", ioex);
            }
            finally
            {
             if (conn != null) {
              try {
               conn.close();
              }
              catch(SQLException sqlex2)
              {
               System.err(this.getClass().getName() + ".mymethod - 不能關閉數據庫連接:" + sqlex2.toString());
              }
             }
             if (out != null){
              try {
               out.close();
              }
              catch(IOException ioex2)
              {
               System.err(this.getClass().getName() + ".mymethod - 不能關閉輸出文件" + ioex2.toString());
              }
             }
            }




          本文的結論不是放之四海皆準的教條,有時常識和經驗才是最好的老師。如果你對自己的做法沒有百分之百的信心,務必加上詳細、全面的注釋。

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

          JSP彩色驗證碼

          xiaohanne 發表于2004-06-01 作者:xiaohanne 評價:13/6 評論數:5 點擊數:5229 [ 收藏 ]
          摘要:



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

          ------------產生驗證碼圖片的文件-----image.jsp-------------------------------------------

          <%@ page contentType="image/jpeg" import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*" %>
          <%!
          Color getRandColor(int fc,int bc){//給定范圍獲得隨機顏色
          ????????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);
          ????????}
          %>
          <%
          //設置頁面不緩存
          response.setHeader("Pragma","No-cache");
          response.setHeader("Cache-Control","no-cache");
          response.setDateHeader("Expires", 0);

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

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

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

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

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

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


          // 隨機產生155條干擾線,使圖象中的認證碼不易被其它程序探測到
          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);
          }

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

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


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

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


          %>

          ---------------使用驗證碼圖片的文件---------a.jsp------------------------------------

          <%@ page contentType="text/html;charset=gb2312" %>
          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
          <html>
          <head>
          <title>認證碼輸入頁面</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>系統產生的認證碼:</td>
          <td><img border=0 src="image.jsp"></td>
          </tr>
          <tr>
          <td align=left>輸入上面的認證碼:</td>
          <td><input type=text name=rand maxlength=4 value=""></td>
          </tr>
          <tr>
          <td colspan=2 align=center><input type=submit value="提交檢測"></td>
          </tr>
          </form>
          </body>
          </html>

          -----------------驗證的頁面----------check.jsp

          <%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
          <html>
          <head>
          <title>認證碼驗證頁面</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");
          %>
          系統產生的認證碼為: <%= rand %><br>
          您輸入的認證碼為: <%= input %><br>
          <br>
          <%
          ??if (rand.equals(input)) {
          %>
          <font color=green>輸入相同,認證成功!</font>
          <%
          ??} else {
          %>
          <font color=red>輸入不同,認證失敗!</font>
          <%
          ??}
          %>
          </body>
          </html>
          posted @ 2006-03-27 10:13 luckyrobbie 閱讀(276) | 評論 (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"/> <!--取系統環境變量-->
          ?
          ?<path id="myclasspath">
          ??<fileset dir="${lib.dir}">
          ???<include name="**/*.jar"/>
          ??</fileset>
          ??<fileset dir="${env.STRUTS_HOME}">
          ???<include name="lib/*.jar"/>
          ??</fileset>
          <!--
          pathelement只能添加單個的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"/> <!--網上找了半天才找到的, 用于添加javac的編譯參數-->
          ??</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手冊..."/>
          ??<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 項目 ,學習ant工具的第2個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"/>
          ????? 現在:b=="hello/b"
          ??? ===================================================================
          -->
          ??? <!--主要的系統環境屬性-->
          ??? <property environment="env"/><!--取window,unix...的環境變量-->
          ??? <property name="java.home" value="${env.JAVA_HOME}"/>
          ??? <property name="ant.home"? value="${env.ANT_HOME}"/>
          ??? <!--主要的app環境屬性-->
          ??? <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">
          ??????? <!--本項目只有一個java,用不上classpath,這里只是做個例子-->
          ??????? <pathelement location="${build.classes}"/>
          ??????? <pathelement path="${java.home}/lib/tools.jar"/>
          ??? </path>
          <!--
          ??? ===================================================================
          ????? init 準備目錄(File Tasks)
          ????? 主要的目錄結構通常是不會變的,一起生成他們
          ??? ===================================================================
          -->
          ??? <target name="init">
          ??????? <!--清除以前目錄-->
          ??????? <delete dir="${build.dir}" failonerror="false" />
          ??????? <delete dir="${dist.dir}"? failonerror="false"/>
          ??????? <!--準備目錄-->
          ??????? <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 手冊... -->
          ??????? <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 執行文件 -->
          ??????? <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中的文件,留給你發揮吧
          ???? ===================================================================
          -->
          </project>
          posted @ 2006-03-27 10:07 luckyrobbie 閱讀(460) | 評論 (0)編輯 收藏

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

               摘要: from: http://bobcat.webappcabaret.net/javachina/faq/ant_01.htm FAQ on ANT Building Process by Roseanne Zhang scjp, advanced, job tips, xml, ant, c/c++, ...  閱讀全文
          posted @ 2006-03-27 10:00 luckyrobbie 閱讀(194) | 評論 (0)編輯 收藏

          aix的系統備份命令是mksysb, make system backup ,有點類似 ghost.

          aix5.3支持微分區技術,所謂微分區就是1臺機器上裝多個OS(操作系統),把這臺機器上的cpu資源進行劃分,然后分配給每一個os使用,最小粒度是0.1個cpu.有點類似vmware軟件.讓一個機器跑多個操作系統.這項技術早在ibm的大機上就已經實現了.只不過最近才在小機和pc機器上發布.

          TIVOLI是系統管理軟件.

          關閉aix的命令:shutdown ->正常關機,關閉所有服務. halt -> 相當于直接關閉電源.
          重啟aix:shutdown -Fr

          查看出錯信息:errpt errpt -a | more -> 分頁顯示 errpt -a > /tmp/err01 輸出到文件.
          清除錯誤信息:errclear 0

          smit 用鼠標操作 smitty 用鍵盤來操作,一般用smitty為好.

          ping -f 全速ping ,利用所有的服務器資源來ping,如果是多個服務器ping一個ip,可以把機器ping死.

          幾個關于磁盤的名詞:
          lv: logical volume 邏輯卷
          pv: physical volume 物理卷
          vg: volume group 卷組
          pp: physical partition 物理分區
          lp: logical partition 邏輯分區

          pv對應的是物理硬盤或者是磁盤陣列上劃分的lun,一個vg最多可以有1016個pp.
          pv的上面是vg,一個vg可以包含多個pv.
          vg的上面是lv,lv如果不作任何處理就是裸設備,也可以作成文件系統.
          lv被分為多個lp,默認情況下,lp與pp是一一對應的,也可以做成一對多的.這樣就相當于用多個pp來作raid0備份.

          lsdev -C | grep disk 可以查看物理磁盤的硬件信息
          lspv 查看pv的信息 -p hdisk0 查看具體數據存放的位置:例如,數據在第m到n個pp上面.
          lsvg 查看vg的信息 -l vg的列表 -c 被使用的vg -l rootvg 查看rootvg的詳情.
          lslv -m lv1 查看lv1 的lp與pp的映射.
          getlvcv -AT lv1 看到lv1的控制信息.
          fsck -y /dev/newlv 檢查lv.

          smit vg 可以管理vg
          smit lv 管理lv

          varryonvg rootvg 激活rootvg卷組,varryoffvg newvg 使newvg卷組脫機.

          nbpi:number of bytes per inode 每個i節點擁有的字節數,這個參數越小,文件系統的可用的inode越多.如果inode用完,即使有剩余空間,系統也會報空間不夠.此時要調小nbpi的值.一般是4k
          df -k 中iused 指的是i節點的使用情況.

          設置從cd啟動,bootlist -m normal cd0

          啟動時按ESC+1或者F1,可以進入啟動菜單.選擇啟動方式.

          用smitty crfs 創建完文件系統以后還要mount.
          /etc/filesystems 文件記錄文件系統的信息.如想把某個lv映射到不同的文件系統路徑上面,可以直接修改這個文件.

          用logform /dev/testloglv 將lv格式化成jfs的log的格式.

          file 文件名 可以看某個文件的信息,包括文件類型,可執行文件,文本文件,等等.

          uname -a 可以看到os的信息.

          fsck 檢查文件系統的信息,在umount的時候是準確的, 相當于windows的磁盤掃描.

          碎片整理 smitty jfs

          lsfs /root 顯示文件系統的屬性

          各個組件的關系:

          lsps -a 查看page space的使用情況

          vgda:vg description area 每個vg的頭部存放vg的描述信息,
          如果包含2個pv,那么第一個pv會在頭部和另一個位置存放2個vgda,第2個pv也會存放一個.
          如果包含3個pv,那么每個pv上都有1個vgda.
          vg的信息在odm中也會存儲,但必須和vgda中的信息一致,否則無法varryonvg,有下面4個命令來管理odm中的vg信息.
          importvg:從vgda中讀取信息到odm中
          exportvg:從odm中刪除vg信息
          varryonvg:激活(online)vg
          varryoffvg:卸載(offline)vg

          修改vg的factor,這樣可以將vg的max pp 從默認的1016 增大1倍,到2032,但由于vgda的總大小不變,這些信息都是記錄到里面的.所以vg的最大文件數要減小1倍,實際上是個等式:max pp * max file = 固定的一個值,factor增大,實際上是max pp * factor,max file / factor.具體做法:chvg -t 2 rootvg 修改factor為2.vgda

          用cfgmgr,來刷新,來認出新assign的hdisk.
          cfgmgr -v 檢查新設備,新硬件.
          -i /dev/cd0 從光盤自動安裝新硬件驅動.

          當作雙機時,2個服務器server1 和 server2 來連接同一個盤陣,server1對磁盤分配一個pvid,當第一次切換到server2時,要用ckdev命令來讀出server1配置的pvid.系統是通過pvid來識別pv的.
          ckdev -l hdisk1 -a pv = clear 清除pvid
          ckdev -l hdisk1 -a pv = yes 新置pvid

          lsdev 查看物理設備
          lsdev -C 顯示所有設備狀態
          rmdev -l cd0 邏輯刪除 cd0
          mkdev -l cd0 安裝cd0
          rmdev -d -l cd0 刪除cd0設備驅動

          查看cpu的信息
          lsattr -El proc0
          lsdev -C | grep proc
          查看內存的信息
          lsattr -El mem0
          查看光驅的信息
          lsattr -El cd0
          查看硬盤的信息
          lsattr -El hdisk0

          lscfg -vp | more 分頁看全部硬件信息
          prtconf | more 列出硬件信息

          查看誰在使用cdrom fuser /cdrom -k 直接殺掉用戶進程

          telnet的登陸信息存放在/etc/motd文件中.
          想查看最近有誰登陸,用last命令.
          查看登錄失敗的信息: /etc/security/failedlogin
          存放用戶密碼的文件:/etc/security/passwd

          用戶登錄需要運行的腳本:
          1 /etc/profile
          2 /etc/environment 在這個文件中設置中文環境,LANG=zh_CN
          3 用戶profile ,分2種情況:
          如果是命令行登錄,則運行/home/user/.profile
          如果是圖形登錄,則運行 /home/user/.dtprofile 需要將次文件中,#DTSOURCEPROFILE=TRUE 的# 去掉,否則還是使用.profile.

          在/dev下面有2種設備,一種是block設備,一種是char(字符)設備.這取決于不同的應用.

          vmstat的某些行的解釋:
          vmstat->faults->cs: user calls 用戶調用的次數
          cpu->wa: >40 說明io繁忙
          kthr: kernel thread
          kthr->r 在運行隊列中等待執行的進程
          b 正在等待io的進程
          memory->avm:active vitual memory 物理內存+使用的虛擬內存,以4k為單位.
          page->re:是pin 和 pout 的總和.
          sr:search的內存塊數.
          fr:釋放的內存塊數.
          每次作page out時,系統要搜索物理內存以找到可以釋放的塊,sr和fr分別代表搜索的和通過搜索找到的可以釋放的塊 數.如果2者很接近,說明內存中有很多用于file cache,內存的數量是夠用的.如果fr/sr的值很小,說明內存不夠.

          tty:代表終端

          iostat:
          %tm_act 實際transaction的百分比
          tps 每秒發生的次數
          kbps 每秒的速率
          名詞:thrasing: 應用程序頻繁交換,導致paging過多.

          /usr/samples/kernel/vmtune -f 120 -F 128
          -f 120 代表minfree mem < 120 時要進行page out
          -F 128 代表maxfree mem > 128 時要進行page in
          -p -P 也跟page out 有關,具體不清楚,還需明確.

          sar->avque:平均的請求數

          對文件系統作監視:filemon
          filemon -o /tmp/a.txt -O all -v
          運行之后系統會一直監視文件系統的使用情況并記錄日志,-T 64000 是使用的buffer cache,在大型系統上,這個值可以調大.
          運行一段時間后,要停掉filemon,使用trcstop 或者 kill -9 進程.
          從a.txt中可以看到使用最頻繁的文件等信息,有些類似statspack的報告.

          對于后綴是Z的文件用uncompress來解壓縮. uncompress a.tar.Z

          用strings 命令來看2進制文件

          如何調大page space,直接設置對應lv的大小.如果對應lv的vg空間不夠的話,可以向vg中加硬盤.

          dd的用法:dd if=/dev/rnewfs of=/dev/rcopyfs bs=1024 count=10240
          bs: block size 塊大小,1024字節
          count: block count 塊的數量
          if是input file ,of 是output file

          將任務切換到后臺執行: ctrl+z ,然后 bg+回車
          查看后臺執行的程序:jobs
          把后臺執行的程序切換到前臺執行:fg %n n是后臺的job 編號

          ip抓包工具:iptrace 和 tcpdump
          iptrace -a a.out
          停止iptrace:kill -9
          tcpdump -i en1 -w a.out a.out 是輸出文件

          把進程與cpu綁定:bindprocessor -U 進程號 cpuid
          bindprocessor -U 12345 0

          odm庫:
          env | grep obj
          ODMDIR=/etc/objrepos 這是odm庫的存儲路徑

          在disk0上生成引導區
          bosboot -a -d /dev/hdisk0

          用kdb 查看os 的 dump

          ethernet channel 把2個網卡綁定到1個ip,可以作網絡負載均衡.

          crontab 設置定時任務
          crontab -l list the crontab
          crontab -e edit the crontab
          crontab的格式:分鐘 小時 月中的天數 月份 星期 命令
          minute:
          0 到 59
          hour:
          0 到 23
          day_of_month:
          1 到 31
          month:
          1 到 12
          weekday:
          星期日到星期六的 0 到 6 時
          要在每星期日上午 2 時運行 fwlogmgmt 命令,請將下列各行添加至 crontab 文件底部:
          0 2 * * 0 /usr/bin/fwlogmgmt -1

          發送郵件,aix和redhad linux 都默認安裝了smtp郵件服務,可以直接給internet發郵件.
          mail -s "test mail"
          haochunpeng@ninetowns.com < $ORACLE_BASE/admin/$ORACLE_SID/bdump/alert$ORACLE_SID.log
          mail -s "test mail"
          haochunpeng@ninetowns.com <<EOF
          ******** MAIL CONTENT *******
          FJLADSFJLAKHFGAL
          FJALDSKFJA
          FASLJFLASF
          *****************************
          EOF
          有了crontab和mail,就可以定時監控數據庫,然后把報告發送郵件到管理員的信箱.

          kill -9 9 是kill命令傳送的一個信號,一共15個信號可以發送.

          /etc/ftpusers 限制登錄ftp的用戶,誰在這個文件里面,誰就登不進去.

          網絡服務 /etc/inetd.conf 刷新 refresh src -d

          lslpp -l | grep http 查看安裝的軟件

          檢查瓶頸:
          利用vmstat iostat 查看總體情況,ps aux 可以看到具體進程占用資源的情況.
          如果是io瓶頸,可以利用filemon -o /tmp/a.txt -O all; sleep 10;trcstop 來查看io資源的使用情況.

          辨別僵尸進程:ps -ef pid 那列是 defunc的為僵尸進程.

          幾個不錯的aix網站:
          http://www.douzhe.com
          http://www.xfocus.net/articles/200208/433.html

          posted @ 2006-03-27 09:57 luckyrobbie 閱讀(2023) | 評論 (0)編輯 收藏

          昨晚貝貝的幼兒園里每個班級都召開家長會,這是貝貝的第一次家長會。

          前一天貝貝媽媽讓我準備的發言稿,可是在昨天上午的電話里面LP說不準備采納我寫的,她自己已經準備了一份了,郁悶。

          晚上我6點才趕到家,貝貝媽媽已經開始出發去幼兒園了。于是我匆匆吃過晚飯,拉著貝貝去湊熱鬧。貝貝和我說家長會不能帶小孩去的。我告訴他沒關系,我們在幼兒園玩,不進教室。

          帶著我買的奧特曼飛機,貝貝在操場上的各個滑梯滑了n次,我們就開始往教室門口蹭了。上了樓梯,到了自己教室門口,貝貝賴著不肯往前走了,呵呵。過了一會,他壯著膽子靠近了一點,然后“啪啪啪啪”的大步跑過教室前的走廊,我心中一笑,仿佛看到了自己童年的影子。跟上去和他在前面的一個活動空間一起玩。

          家長會開了近2個小時,比別的班級結束的晚,看來貝貝的老師還是比較認真負責的。我們在樓梯上等到了貝貝媽媽,然后高高興興的一起回家了。

          貝貝媽媽說,家長會上老師多次表揚了貝貝。優點是:有禮貌,守紀律,愛學習,還有想象力和創造力比較豐富,這一點我特別欣賞。需要提高的是:動手能力。我也覺得在家里太嬌慣貝貝了,今后要讓他自己的事情自己做。

          希望貝貝快快樂樂成長。^^
          posted @ 2006-03-24 12:32 luckyrobbie 閱讀(242) | 評論 (0)編輯 收藏

          教孩子禮貌待人

             各位老師和家長,我是貝貝的媽媽,今日很高興能在這次家長會上,和大家一起交流和探討關于對孩子進行文明禮貌教育的話題。
                 作為每個父母,都希望自己的孩子能夠從小養成講文明、懂禮貌的好習慣。文明禮貌的行為習慣是從小開始長期實踐而形成的。如何對孩子進行文明和禮貌教育,我認為著重從以下三個方面開展:

                   一、父母的言行和思維在孩子成長過程中起到關鍵的影響作用
                  小孩子的求知欲是非常強的,因此孩子的成長過程也是一個學習的過程。孩子對于一個環境從陌生到熟悉的認可過程,其實就是一種習慣的養成過程,這個環境是指孩子身邊的一切事物。孩子在和外界環境的接觸過程中,會不斷主動或者被動的接受一些言論、行為和思想。而作為與孩子關系最為密切的父母,則更應在自己的言行舉止方面做到誠實守信、禮貌待人,用文明的思想灌輸給子女,給孩子起到模范表率作用。久而久之,我們的孩子才會看在眼里,學在心里,并把父母的這種行為意識加上自己的理解作為一個定式記憶在自己的腦海中。而且會把這個思維定式作為一種潛意識在合適的場合表達出來。因此,我認為父母的意識形態對孩子的表率作用在孩子的成長過程中尤為重要。
                  在日常生活中,我們在貝貝的爺爺奶奶家里的時間比較多,大家經常在一起吃飯聊天和做游戲的場合也比較多。我和貝貝的爸爸對長輩都是很尊重的,貝貝也在這種氛圍中也慢慢養成尊敬長輩的好習慣。為了讓孩子能夠正確理解我們的一些做法,我們會在適當的時機和貝貝解釋為什么要在待人接物中文明禮貌的原因,貝貝會耐心地聽我們說,還會問一些為什么的問題,理解后就會知道怎么做是正確的,怎么做是錯誤的。此外,我們有時會通過講故事的方法,加強孩子思維能力的培養。當講到某個環節,讓貝貝判斷出故事中某個小動物或者小朋友應該怎么做,或者對貝貝說如果是你,你會怎么做。
                  二、及時發現并糾正孩子的一些不好的做法
          .........................................................................
                  三、在集體生活中培養文明禮貌的習慣
          ..........................................................................
                 最后和大家分享一下我在一個早期教育節目中的收獲, 兒童最佳智力結構是記憶力,注意力,觀察力,想象力,思維能力和操作能力這六方面的能力。其中思維能力是核心。我們有些家長只注重孩子記憶力的訓練,如記憶和背誦一些唐詩等等,而忽視了其他方面的鍛煉和開發,缺乏想像力和創造力、動手能力,造成智力結構失衡發展,這是對孩子教育中的一個誤區。

          posted @ 2006-03-24 09:39 luckyrobbie 閱讀(299) | 評論 (0)編輯 收藏

          是學習JSF的時候了,請看下面摘抄的文章

          Struts和JSF/Tapestry都屬于表現層框架,這兩種分屬不同性質的框架,后者是一種事件驅動型的組件模型,而Struts只是單純的MVC模式框架,老外總是急吼吼說事件驅動型就比MVC模式框架好,何以見得,我們下面進行詳細分析比較一下到底是怎么回事?

            首先事件是指從客戶端頁面(瀏覽器)由用戶操作觸發的事件,Struts使用Action來接受瀏覽器表單提交的事件,這里使用了Command模式,每個繼承Action的子類都必須實現一個方法execute。

            在struts中,實際是一個表單Form對應一個Action類(或DispatchAction),換一句話說:在Struts中實際是一個表單只能對應一個事件,struts這種事件方式稱為application event,application event和component event相比是一種粗粒度的事件。

            struts重要的表單對象ActionForm是一種對象,它代表了一種應用,這個對象中至少包含幾個字段,這些字段是Jsp頁面表單中的input字段,因為一個表單對應一個事件,所以,當我們需要將事件粒度細化到表單中這些字段時,也就是說,一個字段對應一個事件時,單純使用Struts就不太可能,當然通過結合JavaScript也是可以轉彎實現的。

            而這種情況使用JSF就可以方便實現,

          <h:inputText id="userId" value="#{login.userId}">
            <f:valueChangeListener type="logindemo.UserLoginChanged" />
          </h:inputText>

            #{login.userId}表示從名為login的JavaBean的getUserId獲得的結果,這個功能使用struts也可以實現,name="login" property="userId"

            關鍵是第二行,這里表示如果userId的值改變并且確定提交后,將觸發調用類UserLoginChanged的processValueChanged(...)方法。

            JSF可以為組件提供兩種事件:Value Changed和 Action. 前者我們已經在上節見識過用處,后者就相當于struts中表單提交Action機制,它的JSF寫法如下:

          <h:commandButton id="login" commandName="login">
            <f:actionListener type=”logindemo.LoginActionListener” />
          </h:commandButton>

            從代碼可以看出,這兩種事件是通過Listerner這樣觀察者模式貼在具體組件字段上的,而Struts此類事件是原始的一種表單提交Submit觸發機制。如果說前者比較語言化(編程語言習慣做法類似Swing編程);后者是屬于WEB化,因為它是來自Html表單,如果你起步是從Perl/PHP開始,反而容易接受Struts這種風格。

          posted @ 2006-03-24 08:58 luckyrobbie 閱讀(214) | 評論 (0)編輯 收藏

          • 在JMS的Connection Factories 中新建一個連接工廠
          • 在Stores中新建一個存儲空間,可以為jdbc或者file類型
          • 在Servers中新建一個Server
          • 展開剛才創建的DemoJMSServer,新建一個Destinations,其中有2種類型,queue:點對點方式,topic:廣播方式給所有的MDB
          • 在jb中新建一個MDB,transaction type:bean ,Destination type:javax.jms.Queue,在Destination name中輸入剛才在weblogic的jms里面建立的目標名稱,Pool properties的Maximum pool size:10
          • 在onMessage方法中加入代碼
            public?void?onMessage(Message?msg){?
            try?{

            ??????TextMessage?TMS?
            =?(TextMessage)?msg;

            ??????String?a1?
            =?TMS.getText();

            ??????String?b1?
            =?a1;

            ??????System.out.println(
            "Message?getted?Is?:"?+?a1?+?">>>>>>>>>>>OK");

            ??????Context?context?
            =?new?InitialContext();

            ??????Object?ref?
            =?context.lookup("Sess");? //session bean的本地接口

            ??????SessHome?sessHome?
            =?(SessHome)?PortableRemoteObject.narrow(ref,?SessHome.class);

            ??????sessHome.create().insTableAa11(a1,?b1);

            ??????
            //這是通過Session?Bean的insTableAa11調用EntityBean的ejbHomeEjbInsertAa11

            ??????
            //功能其是很簡單,插入Aa11表一條記錄(a1,a1)

            ????}


            ????
            catch?(Exception?ex)?{

            ??????ex.printStackTrace();

            ????}

            }
          • deploy這個消息驅動Bean
          • new一個MDBTestClient class
            package?bmpsessmdb;
            import?java.util.*;

            import?javax.jms.*;

            import?javax.naming.*;


            public?class?MDBTestClient?{
            ????
            public?final?static?String

            ??????JNDI_FACTORY?
            =?"weblogic.jndi.WLInitialContextFactory";

            ??
            public?final?static?String?URL?=?"t3://127.0.0.1:7001";

            ??
            private?static?final?String?QUEUE_CONNECTION_FACTORY?=

            ??????
            "DemoJMSConnectionFactory";

            ??
            private?static?final?String?QUEUE?=?"DemoJMSQueue";

            ??
            private?static?InitialContext?getInitialContext(String?url)?throws

            ??????NamingException?
            {

            ????Hashtable?env?
            =?new?Hashtable();

            ????env.put(Context.INITIAL_CONTEXT_FACTORY,?JNDI_FACTORY);

            ????env.put(Context.PROVIDER_URL,?url);

            ????
            return?new?InitialContext(env);

            ??}




            ??
            public?static?void?main(String[]?args)?throws?Exception?{

            ????Context?ctx?
            =?getInitialContext(URL);

            ????QueueConnectionFactory?qConnFact?
            =

            ????(QueueConnectionFactory)?ctx.lookup(QUEUE_CONNECTION_FACTORY);

            ????QueueConnection?qConn?
            =?qConnFact.createQueueConnection();

            ????QueueSession?qSess?
            =?qConn.createQueueSession(false,

            ??????????????????????????????????????????????????Session.AUTO_ACKNOWLEDGE);

            ????Queue?q?
            =?(Queue)?ctx.lookup(QUEUE);

            ????QueueSender?qSend?
            =?qSess.createSender(q);



            ????TextMessage?txtMsg?
            =?qSess.createTextMessage("songtx3");

            ????System.out.println(
            "Sending?a?message?to?queue");

            ????qSend.send(txtMsg);

            ????
            //---------------------------------------------------------//

            ????txtMsg?
            =?qSess.createTextMessage("songtx4");

            ????System.out.println(
            "Sending?a?message?to?queue");

            ????qSend.send(txtMsg);

            ????
            //---------------------------------------------------------//

            ????qConn.close();

            ????System.exit(
            0);

            ??}


            }
          • 運行測試,over
          posted @ 2006-03-23 14:51 luckyrobbie 閱讀(1557) | 評論 (0)編輯 收藏

          1.為每個模塊準備一個配置文件,如:
          ? struts-config.xml(缺省配置文件),
          ? struts-config-customer.xml,
          ? struts-config-order.xml
          每個配置文件的寫法可以參照struts-config.xml

          2.配置web.xml文件

          < servlet >
          < init - param > ???? // 缺省模塊
          ???? < param - name > config </ param - name >
          ????
          < param - value >/ WEB - INF / struts - config.xml </ param - value >
          </ init - param >

          < init - param > ????? // customer模塊
          ???? < param - name > config / customer </ param - name >
          ????
          < param - value >/ WEB - INF / struts - config - customer.xml </ param - value >
          </ init - param >

          < init - param > ????? // order模塊
          ???? < param - name > config / order </ param - name >
          ????
          < param - value >/ WEB - INF / struts - config - order.xml </ param - value >
          </ init - param >
          </ servlet >

          3.準備各個模塊所需的ActionForm、Action和JSP等資源

          在多模塊間進行全局轉發
          struts-config.xml:

          < struts - config >
          ????
          < global - forwards >
          ????
          < forword?name = “toModuleB”
          ????????contextRelative
          = true

          ????????path
          = / moduleB / index. do

          ????????redirect
          = true ”? />

          ????
          </ global - forwards >
          </ struts - config >
          posted @ 2006-03-22 16:04 luckyrobbie 閱讀(378) | 評論 (0)編輯 收藏

          在tomcat中的配置比較簡單
          首先定義了tomcat-users.xml 中的內容,主要設置了用戶和角色
          <?xml?version='1.0'?encoding='utf-8'?>
          <tomcat-users>
          ??
          <role?rolename="tomcat"/>
          ??
          <role?rolename="role1"/>
          ??
          <role?rolename="manager"/>
          ??
          <role?rolename="wxds"?description=""/>
          ??
          <role?rolename="admin"/>
          ??
          <user?username="tomcat"?password="tomcat"?roles="tomcat"/>
          ??
          <user?username="both"?password="tomcat"?roles="tomcat,role1"/>
          ??
          <user?username="role1"?password="tomcat"?roles="role1"/>
          ??
          <user?username="abc"?password="abc"?fullName="abcabc"?roles="wxds"/>
          ??
          <user?username="admin"?password=""?roles="admin,manager"/>
          </tomcat-users>

          然后在application中的web.xml中對應的<web-app>中增加如下設置
          ???<security-constraint>
          ???????
          <web-resource-collection>
          ???????????
          <web-resource-name>Protected?Area</web-resource-name>
          ????????
          <!--?Define?the?context-relative?URL(s)?to?be?protected?-->
          ???????????
          <url-pattern>*</url-pattern>
          ????????
          <!--?If?you?list?http?methods,?only?those?methods?are?protected?-->
          ????????
          <http-method>DELETE</http-method>
          ???????????
          <http-method>GET</http-method>
          ???????????
          <http-method>POST</http-method>
          ????????
          <http-method>PUT</http-method>
          ???????
          </web-resource-collection>
          ???????
          <auth-constraint>
          ???????????
          <!--?Anyone?with?one?of?the?listed?roles?may?access?this?area?-->
          ???????????
          <role-name>wxds</role-name>
          ???????
          </auth-constraint>
          ???
          </security-constraint>
          ???
          <login-config>
          ???????
          <auth-method>BASIC</auth-method>
          ???????
          <realm-name>EShop</realm-name>
          ???
          </login-config>

          這樣就好了,登錄這個web應用會有個驗證窗口彈出,輸入用戶名abc和密碼abc后就能正常訪問了。

          在weblogic8.1中的配置比較麻煩,首先在web.xml的<web-app>中增加上面一段代碼后,還要加上這一段
          <security-role>
          ??????
          <role-name>wxds</role-name>
          </security-role>

          然后新建一個weblogic.xml 內容如下
          <?xml?version="1.0"?encoding="UTF-8"?>
          <!DOCTYPE?weblogic-web-app?PUBLIC?"-//BEA?Systems,?Inc.//DTD?Web?Application?8.1//EN"?"http://www.bea.com/servers/wls810/dtd/weblogic810-web-jar.dtd">

          <weblogic-web-app>

          ??
          <security-role-assignment>
          ????
          <role-name>wxds</role-name>
          ????
          <principal-name>wxds_group</principal-name>
          ??
          </security-role-assignment>

          </weblogic-web-app>

          進入weblogic的console,在mydomain-security-realms中新建一個realm
          name: wxdsRealm
          check roles and policies for: web applications and ejbs protected in dd
          展開wxdsRealm,
          在providers中configure a new default adjudicator... 默認創建
          在auditors中創建一個缺省auditor
          然后創建一個缺省的authentication,authorizers, cred mappers 和role mapper 等等
          最后可以在testing中測試一下 validate this security realm... 看是否successful

          在groups中定義一個group name: wxds_group
          在users中configure a new user
          name: jyds password:11111111
          把剛才建立的wxds_group 增加進來

          把Security中的Default Realm設置為wxdsRealm, 最后Apply就ok啦。

          posted @ 2006-03-22 14:24 luckyrobbie 閱讀(468) | 評論 (0)編輯 收藏

          主站蜘蛛池模板: 瑞安市| 甘肃省| 苍南县| 榆林市| 连平县| 昆明市| 八宿县| 阳东县| 大安市| 旬邑县| 大方县| 阿拉善左旗| 万源市| 武清区| 大新县| 吉木乃县| 黔江区| 巴林左旗| 仙桃市| 麟游县| 龙江县| 商城县| 吴堡县| 宁晋县| 秦皇岛市| 汝州市| 宁国市| 茌平县| 利川市| 盐源县| 泌阳县| 武陟县| 巴彦淖尔市| 泾川县| 石嘴山市| 鹤庆县| 安陆市| 宁蒗| 赤水市| 缙云县| 吴忠市|