寫下這些文字時,窗外正走進初夏。脈脈的陽光透過案頭的綠葉間斑駁的灑落在我身上。竟有種別樣的溫柔,使我不覺間有種似乎時光倒流的感覺,但是我知 道,這個夏天已經不是以前的夏天了,尤其是當我站起身,眺望窗外的風景時,現實無刻不在提醒我,我已身在家鄉的千里之遙,我的家鄉早已過了花兒齊放的季节,可是在這里到處聴到的是賞桐吃梅的好季节.

認識到他是因為工作的關係,是偶然也是必然,又像是冥冥之中老天的安排,當那天我的同事讓我去看視頻,說視頻里的人馬上就要和我們成為同事,就好像注定了我跟他的縁份.他帶來了好喝的茶叶,好吃的藥,還有我那亲愛的姐姐請他稍的好吃的凤梨酥,而我因為比他早到幾個月的關係,成了他的向導,我們白天上班,晚上就出去吃夜宵,出去唱一元一首的卡拉OK,休息我們就去城里逛購物。.....我們盡情享受著屬於年輕人的瘋狂.我想可能那時我就已經愛上了他,被他的歌聲被他那喝酒的模樣給深深吸引了.我常會注意他的喜好,常常會陪着他喝酒到深夜,漸摲地他對我的態度也變了, 再也不是普通的同事而已,他看到其他同事刁難我他就會出面,看到我碰到難題他就會帮我觧決,看到我人不舒服他就會紧張的不知所措,拼命讓台湾的同事讓我的姐姐去帮我買藥,他總說如果在台湾你生病我不怕,那里有很好的医疗,可是在內陸又是在虎門,我好怕你生病啊.每次他縂會有本事弄到辨公室的女同事羡慕萬分......之後經過了幾個月,他被老板掉回了台湾,他不願和我分開,所以辞职了,順便回台辨接我過台的手續.如今我終於來到了他的身邊,回想那刻在香港青衣站送他離開時的情景,感慨萬分,當那天我站在站台上送他走時,淚眼婆娑的我除了一句記得辦好了你自己的事一定要來接我,我在遙遠的地方等你。。。。。。之後隨著捷運的一 聲鳴笛,我就離他越來越遠了。。。。。。當時我並不敢奢望他真的會來接我,我只感覚那就好像是一埸夢而已.......
如今在他鄉的我,過的並不算好,刚來的我由於水土不服,什麼都不习慣,吃算還能克服,因為每天都和公婆一起吃,可是台湾是個海島,天氣阴晴不定,昨天還热的要死,今天就能冷的要命,害的我每天都不知道穿什麼衣服出門,這還好,在台湾拉墽圾要分类丟,還要固定時間丟,買東西要記得拿發票,否則200萬就會擦身而過,遇到选举時期要忍受那廣播的"拉票",等等等等,最要我命的是我根本不會繁体字,我又不會台湾的注音,(我們學的是罗馬拼音)而老公又不要我用簡体的中文,就讓我學仓頡打字,天哪,這對我可真是一大難題,可是就算這樣,我依然固執的不肯回去,(每次給媽媽打電話,媽媽縂是說反正不能找工作,不如叫我們两個人都回上海去工作)愛是無私的也是自私的是沒有任何道理的,最愛我的人在這里,我當然得留在了這里,更何況這里還有這麼多的小吃等我去慢慢品尝這麼多的名胜風景等我去慢慢游历...

依舊喜歡飄黃的落葉,演繹著生命別樣的美麗,我存在我美麗我飄落,我無悔,讓生命繼續追隨歲月的步履向前,而那段還在継續的愛情就像葉子一樣靜美......


(文中好多字還是簡体字,實在抱歉,有的繁体字寫不出來,有的根本不知道有寫錯,請大家指正)


呵 這個問題說來話長. 我們在電腦裏的影片檔其實有很多格式. 暫時就先拿rmvb 檔來解說吧.



簡單的來說RMVB(RealMedia Variable Bitrate)是一種由RealNetworks發展的RealMedia多媒體視頻文件格式,為避免說明的文章過長,詳細的部份請參考維基百科的說明.請參考底下的連結

http://zh.wikipedia.org/w/index.php?title=RMVB&variant=zh-tw

ok 那麼我們手頭上有rmvb 的影片檔要怎麼把它刻錄到DVD 碟片去? 還要它可以在一般家用的DVD Player 能撥放呢.

首先要先將您手上的 rmvb 進行檔案格式轉換.必需將其轉換成DVD 影碟上面的格式.DVD 上面的VIDEO 是MPEG2 格式.由於RMVB 己經內嵌了字幕. 所以我們只要將rmvb 檔直接轉成MPEG2 格式就可以了

接下來介紹您使用 Allok RM RMVB to AVI MPEG DVD Converter 這套軟體來進行轉檔.
請參考下面的教學錄影檔案. 當然請您要先去下述的網址下載這套軟體

http://www.alloksoft.com/rm_rmvb_to_avi_mpeg_dvd_converter.htm


步驟一: 安裝Allok RM RMVB to AVI MPEG DVD Converter


http://www.screencast.com/t/0W6Q8Lcn

步驟二: 執行 Allok RM RMVB to AVI MPEG DVD Converter 來進行檔案格式轉換

步驟一:



步驟一:



步驟二:



步驟三:



步驟四:



步驟五:



步驟六:



步驟七:



步驟八:



步驟九:



步驟十:



步驟十一:



這幾天來一直在找給 Blogger WideScreen Template,實在還蠻難找的, 或說我都沒能順利找到適當的模版. 有一件事我實在蠻想不懂的. 相信很多人家裏的螢幕都早已經16:9 或 16:10 的寬螢幕了吧.怎麼四處去找都很難找到給寬螢幕用的模版?!

一般而言不管找到三欄式或五欄式的Blogger Template 若是非專門為寬螢幕設計的.就會如下圖一樣看起來極度兀突.只有中間有模板. 兩邊都是空白的. 這對寬螢幕的使用者來說. 好像
螢幕給縮水了.這樣的比例又會讓字體相對的變的擁擠難以觀看. 還要按住Ctrl 再按 + 號. 把螢幕給放大. 真是令心困擾.(P.S 按住Ctrl 再按+ 可以把字體等比例放大,但不是所有瀏覽器都有支援; 我用的是FirFox)



底下這個連結是我目前正在用的模版.也不是說完全沒有問題. 但至少不會把寬螢幕當成窄螢幕來用. 若您手邊有更好的寬螢幕模板.也請您務必不吝分享. 感激不盡

http://btemplates.com/2008/03/11/simpress/


在日本,發生了一件千真萬確的事:有人為了裝修家裡,拆開了牆壁;日式住宅的牆壁通常是中間架了木板後,兩邊批上泥土,其實裡面是空的。他拆牆壁的時候, 發現一隻壁虎被困在那裡一根從外面釘進來的釘子釘住了那隻壁虎的尾巴。那人見狀,既覺可憐又感好奇,他仔細看看那根釘子,天啊!那根釘子是十年前蓋那房子 的時候釘的。到底怎麼回事?那隻壁虎竟然困在牆壁裡活了整整十年!黑暗中的牆壁裡的十年,真不簡單。不對呀?他繼而尋思,尾巴被釘住了,一個步子也跨不出 的這只壁虎,到底靠什麼撐過了這十年?他於是暫時停止了裝修工程它到底吃什麼?他要一探究竟。過了不久,不知從哪裡又鑽出來一隻壁虎,嘴裡含著食物... 啊!他一時愣住了,這是什麼樣的情啊?為了被釘住尾巴而不能走動的壁虎,另一隻壁虎竟然在十年的歲月裡一直不停地銜取食物餵牠。我聽了以後,很感動,真的 也不去想它們之間的關係:親子,朋友,異性,手足...在人類的社會中隨著計算機的普及,人與人獲取相關的信息更快速,但是人與人之間的距離是否也越來越 接近呢?...永遠不要放棄你所愛的人!請將此故事寄給每一位接觸過你生命的人。

各位漂亮的MM,帥氣的靚仔注意了噢,餐餐都飽食的人會變笨!


飽食:

人進食時,消化道血管擴張,周身血液集中在胃腸道,以至腦部缺血缺氧。如果吃的過飽,容易造成腦部長時間缺血,從而不利於大腦的發育。

節食:
雖然說吃的太飽會導致大腦早衰,但是並不意味著吃的越少越好,大腦和智力的發育需要全面的營養。蛋白質、核酸、磷脂和卵磷脂的缺乏會使腦細胞數減少,腦體積變小,神經膠質細胞、神經纖維發育差,造成智力發育遲緩。

素食:有 的人葷食不沾口,導致脂肪攝入減少。佔腦細胞成分60%的不飽和脂肪酸人體不能合成,需經食物補充,特別是魚類富含的多味不飽和脂肪酸,是人腦中含量最高 的脂肪酸,它關係到腦細胞的生長與正常生理功能的維護。魚貝類富含的牛黃酸,對腦神經的發育有重要作用。因此,葷素兼顧的飲食不但是兒童健康發育的重要條 件,也是成年人的飲食原則。

炸食:在烹飪中經受高溫焦化,不僅可使蛋白質變性,失去生物活性作用,而且還可轉化成致突變物質,容易使細胞退化,因此不宜長期食用。

一天早晨,老婆從惡梦中醒來,紧紧抓住老公的手,老公小心翼翼的安慰着她.可是老婆依然害怕,就趁她老公去上厠所的時候換了睡覚的位置.當老公回來時,却聴到老婆咕噥着
"果然老公的枕頭舒服,軟軟的,一睡就陷下去,不像我的,硬硬的"
"哪有,是你的腦袋里空的,所以較輕,看,老公的腦袋就重,枕頭不是压下去了嗎?"
"哪有......"迷楜的老婆傻傻的應着,却没看到老公那賊賊的笑容......

永远是什么?一辈子还是生生世世?被赋予感情的色彩,永远的爱、永远的恨、永远的辉煌、永远的骂名、永远的路上生命如断弦嘎然而止是不是永远?祈祷生命可以永远,是因为命不在我手,把握不住;期待爱情永远,爱情是两个人的心路,没有不离不弃;祝福幸福永远,人的祸福旦夕之间,朝云幕楚。永远是什么,永远到底有多远?叹息之间,永远是浩瀚宇宙、茫茫世间的一瞬,唯情、唯利、唯名,皆为我辈无奈,故可永远乎?望古今之迢迢,催青之声尤在耳际,同来玩月人何在,风景依稀是似去年,江长之矣,不可方思!
永远寄托了多少人类对自然可把握和不可把握的唯心向往,希望爱情可以永远,于是海誓山盟,在天愿为比翼鸟,在地愿为连理枝。甚至连那生死不离的鸳鸯成了我们祈祷同心的祈盼。钻石恒久远,一颗永留传,冰冷的钻石也成了爱情的守护神,那一对对去天涯海角的情侣,去爱情谷,去圣庙里许愿的男男女女真的叩首一生的有几多,所以永远就成了相爱的人的期盼,明明知道这样的期盼更多时间是一相情愿,可是谁又不希望自己心里的那份爱是永恒的呢?
希望友情可以永远,花难开更易落,水去不复流,又何来永远,朋友不过是路上的一道风景,真正的朋友大楷就是雪中送炭,偶尔锦上添花的人,可以和你高谈阔论,也可以默默无语,即便是你才尽了,财枯了,他还坚信你只是一时的不如意或者虎落平阳而已。朋友来时如清风,去时如杯酒,淡淡惆怅总怀情,是你在心灵深处可以倾诉,可以宽慰的人,这样的人不多,一生有几个可以相随你的心情就够了。朋友交心贵在真、诚,即便只是那一眼的观望,一句话的问候,能够暖心就是永远。竹桃二树本不同,万绿丛中一点红,我去化龙君作浪,人生何处不相逢。友情能够如此就已经是永远了,不求伯牙和子期那样的高雅,但求相逢时那一笑里的真实和知心足也。
亲情不能够永远,生命不被保证,生老病死,是我们控制不了的,因此当我们希望我们的亲人可以永远的陪我们,却一个个的去了那不可知的冥冥之地。生离尚且痛,何况死别呢。多情的人喜聚不喜散,深情的人不喜相聚,聚时欢乐,散后尤其冷清,所以不如不聚不散,要想不聚不散,正如人的一生,无悲无喜,恐怕不够深刻,谈何容易。活着的还请珍惜自己身边的亲人,孝顺父母,不要子欲养而亲不待时再去追悔。孩子慢慢的长大,没有同样的一天给他,还请父母在打忙碌时多给他们一个笑脸和鼓励,哪怕就是转角处一个回头的观望,对孩子的心灵都是抚慰,血浓于水,养育之情,抚育之恩,人最真最美的爱,连亲情都不能做到尽力的人,什么都不配谈论。
名利、财富,千秋基业,万事功勋,能永远吗?想那当年的秦皇汉武,唐宗宋祖,,谁在笑谈苍生,谁在煮酒把言。那为了不老而去的三千童男童女,不过是多留荒诞的笑语,还有什么?能有什么?生前波澜壮阔,死后风光无限,那些被盗的墓室,荣华富贵,尸首无存。女人中的人中之极,武皇帝“无字碑”算是最明白什么是永远的人吧。不永所事,山永星火。穷高极远,念悲其远!叹乎?
因此不过都是一时一己而已,无“永远”之说,远主备之,无奈不可夫。世界太大,我太小,可有可无,志存高远,匹夫当有浩瀚之志,胸怀宽阔。不求大起之时运筹帷幄,还在浅滩之时就应有远志。未有远谋,见义远,不长久,始有远谋,还要深谋远虑,人无远虑,必有近忧。因此对名利不可求永远,对理想因远大,故法不远义,则民法而不离。
永远到底有多远,对求真爱的人,相守时给对方最真的心,最真的自己,这样的爱就是永远,也许没有天长地久,也许没有海枯石烂,但那刹那间的撕心裂肺,真爱了无憾,应该就是爱情的永远。永远到底有多远,对友情,人世难逢开口笑,上疆场彼此明月,低头闻花香,有酒才春宵,唯情永远,琴瑟相交,千金不换的知己就是永远。名利、财富什么才是永远?仰首无愧苍天,俯首无愧春秋,君子坦荡荡谓之永远。
永远到底有多远,议论之,心怀达意,其少不讽诵,其壮不议论,其老不教诲,亦可谓无业之人矣!钱财不积,则贪者忧,长将有日思无日,莫待无时思有时。期盼永远,没有永远,故现在就是永远,把握现在,把握自己,善待生命,善待朋友,真诚的来、真诚的去,回首之时,无愧于心,无愧于己,无愧他人、无愧平生、既是永远。

http://jakarta.apache.org/site/downloads/downloads_taglibs-standard.cgi

JSP Standard Tag Library 簡稱 JSTL ,是一組預先定義好,協助程式人員設計簡化 JSP 網頁製做的標籤函式庫, 包含了各種網頁運做所需的功能, 像是迴圈,流程控制,輸出入, 文字格式化等等,甚至包含了 XML 文件處理 以及資料庫超做均其涵蓋範圍.

因應課程的需要, 請同學自行到上述連結下載. 底下的範例同學自行對應自己的安裝目錄,來進行安裝

我的範例是將 jakarta-taglibs-standard-1.1.2 安裝到桌面, 接下來請切換目錄到

C:\Documents and Settings\Administrator\桌面\jakarta-taglibs-standard-1.1.2\lib
找出 jstl.jar 及 standard.jar 並將它copy 到 x:\Tomcat 5.5\webapps\ROOT\WEB-INF\lib 下

前的x: 請自行代換成你自己安裝Tomcat 的磁碟機代號. 然後再重啟tomcat 就可以使用了

資料出處: http://www.knowsky.com/4159.html
在這篇文章中,我將為大家介紹一種基於JSP且靈活有趣的技術,那就是JSTL.JSTL全稱為Java Server Pages Standard Tag Library.雖然JSP已經變的非常流行,但JSTL在基於SQL數據庫的 簡單、快速的前後台開發中還是沒有被廣泛的應用。一旦你了解了JSTL,你就會了解到它的優點,並發現在你作為程序員的日常工作中,它已經被應用到了很多 方面。我這裡假設你已經熟悉HTML,能理解基本的SQL語句,和Jsp的基礎知識。因為下面的內容要涉及到這些知識。

JSTL是一個已經被標準化的標記庫集合,她支持迭代、條件、XML文檔的解析,國際化,和利用SQL與數據庫交互的功能。起初,JSTL規範 一直由JCP(Java Community process program)組織下的JSR #52 發展完善,"JCP肩負著Java 技術發展的重任"--官方網站這樣評價。JCP作為一個開放性的組織,他同時吸收正式的會員和非正式會員.JCP對於Java技術規範的形成與發展發揮了 重要的主導作用。JSTL主要包括四個基本部分的標記庫:Core,XML,國際化,和對SQL的支持。由於這篇文章的主要是以其中的SQL部分的應用來 快速了解JSTL,所以我們這篇文章只介紹了 Core和SQl標籤庫的一些基本功能。

這項技術簡單而且功能強大,足以和PHP、ColdFusion一較高下.他在拓展Java的應用領域方面有足夠的能力,這些領域不只包括大型 的可再升級的Web應用程序,對於僅擁有簡單主頁的Web程序一樣沒問題。這允許你在建立站點的時候可以避免那些經常考慮的XML的集成和與數據庫的連 接。正如我剛才提到的一樣,JSTL的關鍵點就是簡單易用。還有,那就是JSTL是基於JSP構建的, 他允許我們使用所有的Java技術,這一點我們有必要記住。

開始之前,我們需要弄清楚怎樣才能運行JSTL.由於是基於JSP技術的,所以我們運行它就需要一個能夠編譯JSP的容器,這裡我們使用免費的JSP容器:TOMCAT(http://jakarta.apache.org/tomcat/index.html).至於如何安裝這個產品已經超出了本文所講述的範圍。毫無疑問,這個軟件產品現在已經很普及了,而且關於如何安裝的文檔資料也是很多。這裡假設您已經安裝併成功配置了這個容器,你只需再安裝JSTL運行所需文件即可,它可以從這裡下載http://jakarta.apache.org/taglibs/doc/standard-doc/intro.html你不需要真正的安裝它,只需要將其中的.JAR文件包含到你的應用程序的WEB-INF/lib目錄下即可,稍後我會具體說到該怎麼做.

因為我們要在一個支持標準SQL的數據庫上運行程序,你需要在你的電腦上安裝有一個數據庫。數據庫的類型有許多種,這裡我選擇了MySql。我 之所以選擇他的原因在於首先,我們需要展示JSTL對於構造簡單快速的應用程序領域所起的作用,同時能和一直在這個領域處於主導地位的PHP+MySql 有所比較;第二點那就是MySql是可以免費下載并包含有一個針對JAVA的JDBC驅動.總之,為了使用下面的例子,你需要下載一個MYSQL服務器(http://www.mysql.com/products/mysql/index.html; MySql Connector/J JDBC驅動程序http://www.mysql.com/products/connector-j/index.html;還有就是MySql control center http://www.mysql.com/products/connector-j/index.html),這個產品可以讓你非常容易的操作管理Mysql數據庫文件。全部下載完成後,你需要安裝mysql和mysql Control Center。另外還有就是mysql的JDBC驅動需要放到你的web應用程序中的/Web-INF/lib目錄中。

在創建程序代碼之前,你需要創建並填寫數據庫表。關於這方面的主題文章也相當廣泛,具體如何操作超出了本文的範圍。這裡我推薦給你我們上面提及 的一個可視化的管理工具 MySQL Control Center.你可以用他來創建一個用來運行程序的測試用戶,數據庫以及創建一個測試表,並填寫若干記錄。關於登陸名及密碼 數據庫名稱這些配置環境參數,你應該記住他們,稍後需要應用到我們的代碼中。

現在,你就可以準備創建自己的第一個JSTL應用程序了它需要我們做下面一些事情:

整個實例程序代碼包括兩個文件Hello.jsp和 Continue.jsp

Hello.jsp文件允許你輸入數據庫名稱、登陸名稱、登陸密碼、數據庫表名。Continue.jsp:接受Hello.jsp中的數據信息並且連接數據庫,並對數據庫中的表執行一個Select請求.

下面是這個系統所有的代碼文件,我將逐一進行解釋。這些代碼相當簡單,對於代碼的結構,我相信你即使沒有我的解釋你也能理解的.

1: <!-- Hello.jsp -->
2: <html>
3: <head>
4: <title>Hello</title>
5: </head>
6: <body bgcolor="#ffffff">
7: <h1>Please, enter all necessary information and click OK.</h1>
8: <form method="post" action="Continue.jsp">
9: <br>Your login to database:
<input type="text" name="login" size="15">
10: <br>Your password to database:
<input type="password" name="password" size="15">
11: <br>Your database name:
<input type="text" name="database" size="15">
12: <br>Your database table:
<input type="text" name="table" size="15">
13: <br><br><input type="submit" name="submit" value=" OK ">
14: </form>
15: </body>
16: </html>

(請注意文本左側的數字只是為你提供一些標記信息,你不需要將他們輸入到你的代碼文件中。)

上面就是所有Hello.jsp的源代碼,很驚奇吧,他僅僅是純粹的HTML代碼,就這麼簡單,我想應該沒有註釋的必要了.我之所以將這些代碼 片段包含進文章中就是為了展示一下JSTL集成到那些需要快速擴充額外功能的HTML站點中是多麼的簡單.讓我再為你展示一下Continue.jsp的 全部代碼,看過之後,你就會對 JSTL有些了解了。

1: <!-- Continue.jsp -->
2: <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
3: <@ taglib prefix="sql" uri="http://java.sun.com/jstl/sql" %>
4: <c:set var="h" value="localhost"/>
5: <c:set var="l" value="${param.login}"/>
6: <c:set var="p" value="${param.password}"/>
7: <c:set var="d" value="${param.database}"/>
8: <c:set var="t" value="${param.table}"/>
9: <html>
10: <head>
11: <title>Continue</title>
12: </head>
13: <body bgcolor="#ffffff">
14: <sql:setDataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://${l}/${d}?user=${u}&password=${p}"/>
15: <sql:query var="result">
16: SELECT * FROM <c:out value="${t}"/>
17: </sql:query>
18: <c:forEach var="row" items="${result.rowsByIndex}">
19: <c:out value="${row[0]}"/> <br>
20: </c:forEach>
21: </body>
22: </html>

(請注意文本左側的數字只是為你提供一些標記信息,你不需要將他們輸入到你的代碼文件中。)

這就是我們所有的代碼了,是不是非常不錯?現在我門來解釋一下上面這些代碼的作用。

行1 是 HTML 的註釋說明。

行2--3 這些 JSP 標籤是為了引用外部的 標籤庫,更確切的說這裡是引用了JSTL庫中的 Core 和SQL標籤庫部分。我們為他們都設置了前綴名稱,以便於我們通過這些前綴名稱訪問被引入的標籤庫中的功能方法。

行4---8正如 Hello.jsp 真正運行的樣子,他將請求continue.jsp,Continue.jsp獲得請求後就需要得到並解析來自Hello.jsp的若干變量,我們使用了 這樣的方式${param.YOUR_VAR}。在第4行<c:set標籤,將變量${h}設置為 "localhost",第五行變量${l}將獲取我們在 Hello.jsp中的login文本域中輸入的信息,第6,7,8行的變量將分別獲得來自Hello.jsp中用戶所輸入的密碼,數據庫名稱,數據表名 稱。

行9--13是一些我經常用來常見HTML網頁頭的簡單的HTML標籤,馬上,重要的功能馬上要到了。

行14,我們試圖用我們先前獲得的mysql驅動程序(com.mysql.jdbc.Driver)建立數據庫連接,在URL中,我們指明數 據庫連接所需要的參數,象數據庫名稱,主機名稱,登陸名及登陸密碼。依此,我們可以用其它任何的JDBC驅動程序連接其相對的數據庫。如果我們需要連接其 他的SQL數據庫,只需更改這個 URL就夠了。

行15--17 這裡我們執行了一個Select 查詢,請特別注意第16行,我們使用了另一個JSTL功能函數<c:out 用來輸出我們所獲取的數據表名稱,這裡我們同樣可以使用其他的SQL命令,比如說 INSERT,DELETE,等等。要執行這些沒有返回值的查詢請求,你就需要使用<sql:update JSTL功能函數了。他可以直接執行他們就像<SQL:query一樣,只是執行它是不需要特別指定結果變量來存儲語句執行返回的結果。

行18--20 既然我們執行了上面的SELECT查詢語句,我們就應該把他的返回結果顯示出來。<c:forEach 就是JSTL 中一個具有迭代功能的函數,執行它時,我們通過${result.rowsByIndex}將返回的每一個數據行信息返回給變量${row},緊接著在第 19行, 我們通過<c:out value="${row[0]}"/>顯示返回的每個數據行的第一個數據列中的值。只要你的數據表中包含的字段,你都可以通過改變變量 ${row}中的數字大小來對請求表中的任意一個字段中的值對他們進行訪問。

行21--22是HTML 頁腳

在你親自創建JSTL應用程序過程中,可能你還沒有發現它有多麼的強大,但你應該能夠意識到JSTL的功能函數的簡單和高效性,試想有了JSTL,整合出一個基於SQL的新聞專欄是何等的快速,集成你現有的web站點是何等的容易。

很好,我們的代碼很容易理解的,即使一個非專業程序員的話,打個比方就算是一個設計師也能夠讀懂它,理解它,還可能進行部分的修改,起碼是頁面布局上的修改。

正如我們開始的時候所提到的,為了使我們的JSTL代碼正常的運行,我們需要安裝Mysql Connector/J 中的JAR 文件,當然還有 JSTL。因為我們使用了Tomcat這個JSp 容器,你需要在Tomcat的文件目錄Webapps下創建你自己的文件夾,將你的Hello.jsp 、Continue.jsp文件放在你創建的文件目錄中,在你創建的目錄中你還要創建一個叫做WEB-INF 的文件夾,將你的配置文件Web.xml放在裡面,web.xml文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app />

接下來我們還需要在WEB-INF下創建一個叫做lib的子目,並將下列文件放進去:

jstl.jar
saxpath.jar
standard.jar
mysql-connector-java-3.0.9-stable-bin.jar (注意,這個名稱依據你的Mysql Connector/J版本不同可能會有所變化)

所有的這些信息您能夠在JSTL或Tomcat手冊中查閱的到,如果你想理解他們具體是如何運行而又為什麼這麼運行你就應該研讀一下這些手冊。不過為了幫助你快速的掌握JSTL的基本操作,相關的知識我已經作了介紹。

如果你使用的是其他的Jsp 容器,那麼就需要你閱讀他們相關的手冊資料。

羅羅索索這麼多,我還想再說明一點,這篇文章只是對JSTL技術的基本的介紹,並不是完全手冊。JSTL中包含有許多功能豐富的函數用法來幫助 你以簡捷快速的方式完成你的Jsp開發,我建議大家讀一些有關JSTL功能以及它如何與JavaBeans協同工作的更詳細的文檔資料,到最終你可能會發 現他就是你期待已久的開發平台。通過閱讀本篇文章,你應該已經能夠創建一些簡單的基於SQL 數據庫的前後台應用了。

在專案上要使用透過 JDBC 來使用資料庫,在這我們使用Mysql 資料庫,在這之前先行下載 Mysql5.024 ,下載的網址如下 :

http://dev.mysql.com/downloads/mysql/5.0.html

Windows (x86) 5.0.24 40.0M Pick a mirror

除了mysql 5.0.24 下載並安裝好時,JSP 還需要透過 MySQL Connector/J 來連結Mysql 資料庫.

下載網址 : http://dev.mysql.com/downloads/connector/j/3.1.html

Source and Binaries (zip) 3.1.13 18.0M Pick a mirror

JSP 課後習題有空的話做一下 加深學習印象,在學習JSP 有任何的問題可以提出來一起討論, 可以透過SKYPE 找我, 我的id 是 idarfan

http://www.firewallleaktester.com/index.html

上述連結是原文的,有興趣的同學可以自行前往參考.至於各式軟體防火牆的效能及功能評比請參考以下的連結

http://www.firewallleaktester.com/tests.php

其中Jetico Personal Firewall 在弱點測試中,成功的阻擋了大部份的測試,勇奪2006年3月的評比冠軍

這套防火牆軟體是免費的. 需要的同學請自行下載安裝

http://www.jetico.com/

http://design.fujitsu.com/en/universal/assistance/

日本富士公司提供了一些免費的網頁設計小工具供大家使用, 其中 ColorSelector 還蠻實用的說明如下:

English:

Are you using colors that are easy for everyone to read? ColorSelector is a program that provides a real-time evaluation of whether or not the colors of a website's fonts and backgrounds are easily viewable by people with cataracts or color blindness. When a website or slides are created, ColorSelector determines whether the color combination of font and background is easily readable, while also displaying the most appropriate combination. In this manner, it assists in the creation of websites and slides with a high level of accessibility. ColorSelector is a tool not just for designers but can be used by regular office workers in the process of creating slides.

japan:

ColorSelector


ColorSelector 5.0

ColorSelector(カラーセレクター)は、アクセシビリティの高い背景色と文字色の組み合わせを、リアルタイムに確認することができる、開発者の為の強力な支援ツールです。

ColorSelector English Page


無償で今すぐダウンロードしてお使いいただけます

ColorSelector今すぐダウン�ード

Colorselectorは、WindowsとMac OS Xで動作し、無償で今すぐダウンロードしてお使いいただけます。


トピックス


便利なスポイト機能を追加

新 しいColorSelector 5.0には、便利なスポイト機能がつきました。色のRGB値がわからなくても、ディスプレイ上に表示される色なら、スポイト機能を使うことで、文字色と背 景色の見やすさを簡単に判定できます。ウェブページに表示されている色に加え、Microsoft PowerPoint、Excel、Wordなど、一般的によく使うソフトウェアで表示された色も、スポイト機能で簡単に判定できます。もちろん、従来同 様に、色のRGB値を入力して使用することも可能です。



使い道はウェブデザインだけではありません

富士通で開発された様々な製品の画面デザインでも活躍しています。たとえば、富士通の携帯電話などの画面デザインに使われ、アクセシビリティの高いインターフェース設計に役立っています。



背景色と文字色の組み合わせ判定をします

一般、白内障、第一色覚障害(赤)、第二色覚障害(緑)、第三色覚障害(青)での見やすさを表示できます。



クリックすると最適なパレットが表示されます

カラーパレットが表示できるため、見やすいカラーを簡単に選択できる上に、 見やすい色、見にくい色が一目で判定できます。



Version 5.0の主な新機能

  1. 便利なスポイト機能を追加

ColorSelectorの開発履歴

  • 2006年5月18日 Version 5.0 スポイト機能の追加
  • 2004年12月8日 Version 4.01 英語メニュー表示に対応
  • 2004年6月28日 Version 4.0 デザイナーのニーズに応えたインターフェースの改善
  • 2004年2月18日 Version 3.0 WebInspectorから独立したツールとしてリニューアル
  • 2003年7月20日 Version 2.0 WebInspectorの一部機能として提供開始

バナーでアピール


アクセシビリティチェックバナーでアピールしましょう

http://design.fujitsu.com/en/universal/assistance/webinspector/

有時寫好的網頁能不能正確被符合W3C製定的規格的瀏覽器觀看,並無從得知 這個小工具是用來撿查你的網頁是否使用了符合W3C 標準的語法及撰寫規則. 若驗證不能通過也不用太意外, 有可能你學習網頁撰寫語法並不符合W3C 的標準,僅能某些瀏覽器上正確被觀看. 如果這不是你要的結果, 那麼就試著去修改它吧

WebInspector


WebInspector 5.0

WebInspector(ウェブインスペクター)は、ウェブサイトが高齢者や視覚に障害のある方にも読みやすいかを診断するソフトウェアです。

WebInspector English Page


無償で今すぐダウンロードしてお使いいただけます

WebInspector今すぐダウン�ード

WebInspectorは、WindowsとMac OS Xで動作し、無償で今すぐダウンロードしてお使いいただけます。



診断項目数が増え、より精度の高い診断結果に

新 しいWebInspector 5.0は、詳細なチェック数を従来の68から89に大幅アップし、より精度の高い診断が可能になりました。これにより、例えばJIS X 8341-3の場合、「5.開発および制作に関する個別要件」の39項目中22項目、富士通ウェブ・アクセシビリティ指針の場合、70項目中25項目の診 断が可能になりました。以前にも増して、ホームページ編集で見落としがちな、さまざまな問題を見つけ出すことが可能になりました。



修正すべき箇所をビジュアルに表示

修�すべき箇所をビジュアルに表示

WebInspector 5.0は「画面で確認」機能を実現し、修正すべき箇所をビジュアルに確認することが可能になりました。従来は、HTMLのソースを参照し、行番号から問題 のある部分を特定しなければなりませんでしたが、WebInspector 5.0では、「画面で確認」機能により、より簡単に、修正すべき箇所を特定できるようになっています。



JIS X 8341-3 に対応したチェックはおまかせください

JIS X 8341-3 高齢者・障害者等配慮設計指針 ‐情報通信における機器、ソフトウェア及びサービス‐ 第3部:ウェブコンテンツに対応したチェックが可能です。JIS規格に沿った診断をおこなうことにより、より一般性の高いアクセシビリティ改善とサイトの 信頼性の確保が可能となります。


富士通ウェブ・アクセシビリティ指針 第2.0版のチェックにも対応

富士通ウェブ・アクセシビリティ指針 第2.0版に もとづいて診断します。(第2.0版はJIS X8341-3との整合性を重視しつつ、第1.0版公開後に実施した調査、研究内容などをもとに、「制作」工程に加え「企画」「サポート」などで考慮すべ き事項をより詳しく、わかりやすく解説しています。さらに一般的に守っていただきたいユーザビリティ的配慮も記述しています。)



Version 5.0の主な新機能

  1. 診断項目数が増え、より精度の高い診断結果に
  2. 問題点をビジュアル表示

WebInspectorの開発履歴

  • 2006年5月18日 Version 5.0 診断項目数増加と、問題点のビジュアル表示機能化
  • 2004年6月28日 Version 4.0 JIS X 8341-3と富士通指針第2.0版のチェック項目に両対応
  • 2004年2月18日 Version 3.0 待望のCSSのチェック機能を搭載
  • 2003年7月20日 Version 2.0 社内限定ツールを経て一般公開を開始
  • 2002年12月27日 Version 1.0 富士通指針第1.0版のチェック項目に対応した社内限定ツールとして誕生

バナーでアピール


アクセシビリティチェックバナーでアピールしましょう



WebInspector 5.0 Plus
(総務省「みんなの公共サイト運用モデル」対応版)について

ご 存知でしたか?WebInspector 5.0には、WebInspector 5.0 Plusという別バージョンが存在します。このWebInspector 5.0 Plusでは、JIS X 8341-3や富士通ウェブ・アクセシビリティ指針に即した診断機能に加え、総務省「みんなの公共サイト運用モデル」に即した診断をおこなうことが可能です。もちろん、WebInspector 5.0の新機能、「画面で確認」も、ご利用いただけます。この便利なWebInspector 5.0 Plusは、書籍「よくわかるWebアクセシビリティ&ユーザビリティ(改訂版)」を購入いただくことで入手いただけます。CD‐ROMで添付された、このWebInspector 5.0 Plusは、WebInspector 5.0と同じくWindowsとMac OS Xの両方でご利用いただけます。

JavaBeans的屬性

JavaBeans的屬性與一般Java程序中所指的屬性,或 者說與所有面向對象的程序設計語言中對象的屬性是一個概念,在程序中的具體體現就是類中的變量。在JavaBeans設計中,按照屬性的不同作用又細分為 四類:Simple, Index, Bound與Constrained屬性。1. Simple屬性

一個簡單屬性表示一個伴隨有一對get/set方法(C語言的過程或函數在Java程序中稱為"方法")的變量。屬性名與和該屬性相關的get /set 方法名對應。例如:如果有setX和getX方法,則暗指有一個名為"X"的屬性。如果有一個方法名為isX,則通常暗指"X"是一個布爾屬性(即X的值 為true或false)。例如在下面這個程序中:

public class alden1 extends Canvas {
string ourString= "Hello"; //屬性名為ourString,類型為字符串
public alden1(){     //alden1()是alden1的構造函數,與C++中構造函數的意義相同
setBackground(Color.red);
setForeground(Color.blue);
}
/* "set"屬性*/
public void setString(String newString) {
ourString=newString;
}
/* "get"屬性 */
public String getString() {
return ourString;
}
}

2. Indexed屬性

一個Indexed屬性表示一個數組值。使用與該屬性對應的set/get方法可取得數組中的數值。該屬性也可一次設置或取得整個數組的值。例:

public class alden2 extends Canvas {
int[] dataSet={1,2,3,4,5,6}; // dataSet是一個indexed屬性
public alden2() {
setBackground(Color.red);
setForeground(Color.blue);
}
/* 設置整個數組 */
public void setDataSet(int[] x){
dataSet=x;
}
/* 設置數組中的單個元素值 */
public void setDataSet(int index, int x){
dataSet[index]=x;
}
/* 取得整個數組值 */
public int[] getDataSet(){
return dataSet;
}
/* 取得數組中的指定元素值 */
public int getDataSet(int x){
return dataSet[x];
}
}

3. Bound屬性

一個Bound屬性是指當該種屬性的值發生變化時,要通知其它的對象。每次屬性值改變時,這種屬性就點火一個PropertyChange事件(在 Java程序中,事件也是一個對象)。事件中封裝了屬性名、屬性的原值、屬性變化後的新值。這種事件是傳遞到其它的Beans,至於接收事件的Beans 應做什麼動作由其自己定義。當PushButton的background屬性與Dialog的background屬性bind時,若 PushButton的background屬性發生變化時,Dialog的background屬性也發生同樣的變化。 例:

public class alden3 extends Canvas{
String ourString= "Hello";
//ourString是一個bound屬性
private PropertyChangeSupport changes = new PropertyChangeSupport(this);
/** 註:Java是純面向對象的語言,如果要使用某種方法則必須指明是要使用哪個對象的方法,在下面的程序中要進行點火事件的操作,這種操作所使用的方法是在 PropertyChangeSupport類中的。所以上面聲明並實例化了一個changes對象,在下面將使用changes的 firePropertyChange方法來點火ourString的屬性改變事件。*/

public void setString(string newString){
String oldString = ourString;
ourString = newString;
/* ourString的屬性值已發生變化,於是接著點火屬性改變事件 */
changes.firePropertyChange("ourString",oldString,newString);
}
public String getString(){
return ourString;
}
/** 以下代碼是為開發工具所使用的。我們不能預知alden3將與哪些其它的Beans組合成為一個應用,無法預知若alden3的ourString屬性發 生變化時有哪些其它的組件與此變化有關,因而alden3這個Beans要預留出一些接口給開發工具,開發工具使用這些接口,把其它的JavaBeans 對象與alden3掛接。*/

public void addPropertyChangeListener(PropertyChangeLisener l){
changes.addPropertyChangeListener(l);
}
public void removePropertyChangeListener(PropertyChangeListener l){
changes.removePropertyChangeListener(l);
}
通過上面的代碼,開發工具調用changes的addPropertyChangeListener方法把其它JavaBeans註冊入 ourString屬性的監聽者隊列l中,l是一個Vector數組,可存儲任何Java對象。開發工具也可使用changes的 removePropertyChangeListener方法,從l中註銷指定的對象,使alden3的ourString屬性的改變不再與這個對像有 關。當然,當程序員手寫代碼編製程序時,也可直接調用這兩個方法,把其它Java對象與alden3掛接。

4. Constrained屬性

一個JavaBeans的constrained屬性,是指 當這個屬性的值要發生變化時,與這個屬性已建立了某種連接的其它Java對象可否決屬性值的改變。constrained屬性的監聽者通過拋出 PropertyVetoException來阻止該屬性值的改變。例:下面程序中的constrained屬性是PriceInCents。

public class JellyBeans extends Canvas{
private PropertyChangeSupport changes=new PropertyChangeSupport(this);
private VetoableChangeSupport Vetos=new VetoableChangeSupport(this);
/*與前述changes相同,可使用VetoableChangeSupport對象的實例Vetos中的方法,在特定條件下來阻止PriceInCents值的改變。*/

......
public void setPriceInCents(int newPriceInCents) throws PropertyVetoException {
/*方法名中throws PropertyVetoException的作用是當有其它Java對象否決PriceInCents的改變時,
要拋出例外。*/
/* 先保存原來的屬性值*/

int oldPriceInCents=ourPriceInCents;
/**點火屬性改變否決事件*/
vetos.fireVetoableChange("priceInCents",new Integer(OldPriceInCents),
new Integer(newPriceInCents));

/**若有其它對象否決priceInCents的改變,則程序拋出例外,不再繼續執行下面的兩條語句,方法結束。若無其它對象否決priceInCents的改變,則在下面的代碼中把ourPriceIncents賦予新值,並點火屬性改變事件*/

ourPriceInCents=newPriceInCents;
changes.firePropertyChange("priceInCents",
new Integer(oldPriceInCents),
new Integer(newPriceInCents));
}

/**與前述changes相同,也要為PriceInCents屬性預留接口,使其它對象可註冊入PriceInCents否決改變監聽者隊列中,或把該對象從中註銷*/

public void addVetoableChangeListener(VetoableChangeListener l)
{ vetos.addVetoableChangeListener(l);
}
public void removeVetoableChangeListener(VetoableChangeListener l){
vetos.removeVetoableChangeListener(l);
}
......
}

從上面的例子中可看到,一個constrained屬性有兩種監聽者:屬性變化監聽者和否決屬性改變的監聽者。否決屬性改變的監聽者在自己的對象代碼中 有相應的控制語句,在監聽到有constrained屬性要發生變化時,在控制語句中判斷是否應否決這個屬性值的改變。

總之,某個Beans的constrained屬性值可否改變取決於其它的Beans或者是Java對像是否允許這種改變。允許與否的條件由其它的Beans或Java對像在自己的類中進行定義。

JavaBeans的事件

事件處理是JavaBeans體系結構的核心之一。通過事件處理機制,可讓一些組件作為事件源,發出可被描述環境或其它組件接收的事件。這樣,不同 的組 件就可在構造工具內組合在一起,組件之間通過事件的傳遞進行通信,構成一個應用。從概念上講,事件是一種在"源對象"和"監聽者對象"之間,某種狀態發生 變化的傳遞機制。事件有許多不同的用途,例如在Windows系統中常要處理的鼠標事件、窗口邊界改變事件、鍵盤事件等。在Java和JavaBeans 中則是定義了一個一般的、可擴充的事件機制,這種機制能夠:

1.對事件類型和傳遞的模型的定義和擴充提供一個公共框架,並適合於廣泛的應用。

2.與Java語言和環境有較高的集成度。

3.事件能被描述環境捕獲和點火。

4.能使其它構造工具採取某種技術在設計時直接控制事件,以及事件源和事件監聽者之間的聯繫。

5.事件機制本身不依賴於複雜的開發工具。

特別地,還應當:

1.能夠發現指定的對象類可以生成的事件。

2.能夠發現指定的對象類可以觀察(監聽)到的事件。

3.提供一個常規的註冊機制,允許動態操縱事件源與事件監聽者之間的關係。

4.不需要其它的虛擬機和語言即可實現。

5.事件源與監聽者之間可進行高效的事件傳遞。

6.能完成JavaBeans事件模型與相關的其它組件體系結構事件模型的中立映射。

JavaBeans事件模型的主要構成有:事件從事件源到監聽者的傳遞是通過對目標監聽者對象的Java方法調用進行的。對每個明確的事件的發生, 都相 應地定義一個明確的Java方法。這些方法都集中定義在事件監聽者(EventListener)接口中,這個接口要繼承 java.util.EventListener。實現了事件監聽者接口中一些或全部方法的類就是事件監聽者。 伴隨著事件的發生,相應的狀態通常都封裝在事件狀態對象中,該對象必須繼承自java.util.EventObject。事件狀態對象作為單參傳遞給應 響應該事件的監聽者方法中。 發出某種特定事件的事件源的標識是:遵從規定的設計格式為事件監聽者定義註冊方法,並接受對指定事件監聽者接口實例的引用。 有時,事件監聽者不能直接實現事件監聽者接口,或者還有其它的額外動作時,就要在一個源與其它一個或多個監聽者之間插入一個事件適配器類的實例,來建立它 們之間的聯繫。

事件狀態對象(Event State Object)

與事件發生有關的狀態信息一般都封裝在一個事件狀態對象中,這種對像是java.util.EventObject的子類。按設計習慣,這種事件狀態對象類的名應以Event結尾。例如:

public class MouseMovedExampleEvent extends java.util.EventObject

{ protected int x, y;
/* 創建一個鼠標移動事件MouseMovedExampleEvent */
MouseMovedExampleEvent(java.awt.Component source, Point location) {
super(source);
x = location.x;
y = location.y;
}
/* 獲取鼠標位置*/
public Point getLocation() {
return new Point(x, y);
}}

事件監聽者接口(EventListener Interface)與事件監聽者

由於Java事件模型是基於方法調用,因而需要一個定義並組織事件操縱方法的方式。JavaBeans中,事件操縱方法都被定義在繼承了 java.util.EventListener類的EventListener接口中,按規定,EventListener接口的命名要以 Listener結尾。任何一個類如果想操縱在EventListener接口中定義的方法都必須以實現這個接口方式進行。這個類也就是事件監聽者。例 如:

/*先定義了一個鼠標移動事件對象*/
   public class MouseMovedExampleEvent
extends java.util.EventObject {
// 在此類中包含了與鼠標移動事件有關的狀態信息
...
}
/*定義了鼠標移動事件的監聽者接口*/
interface MouseMovedExampleListener
extends java.util.EventListener {
/*在這個接口中定義了鼠標移動事件監聽者所應支持的方法*/
void mouseMoved(MouseMovedExampleEvent mme);
}

在接口中只定義方法名,方法的參數和返回值類型。如:上面接口中的mouseMoved方法的具體實現是在下面的ArbitraryObject類中定義的。

class ArbitraryObject implements MouseMovedExampleListener {
public void mouseMoved(MouseMovedExampleEvent mme)
{ ... }

ArbitraryObject就是MouseMovedExampleEvent事件的監聽者。

事件監聽者的註冊與註銷

為了各種可能的事件監聽者把自己註冊入合適的事件源中,建立源與事件監聽者間的事件流,事件源必須為事件監聽者提供註冊和註銷的方法。在前面的bound屬性介紹中已看到了這種使用過程,在實際中,事件監聽者的註冊和註銷要使用標準的設計格式:

public void add<>( listener);
public void remove<>( listener);

例如:

首先定義了一個事件監聽者接口:

public interface
ModelChangedListener extends java.util.EventListener {
void modelChanged(EventObject e);
}

接著定義事件源類:

public abstract class Model {
private Vector listeners = new Vector(); // 定義了一個儲存事件監聽者的數組

/*上面設計格式中的<>在此處即是下面的ModelChangedListener*/

public synchronized void addModelChangedListener(ModelChangedListener mcl)
{ listeners.addElement(mcl); } //把監聽者註冊入listeners數組中
public synchronized void removeModelChangedListener(ModelChangedListener mcl)
{ listeners.removeElement(mcl);  //把監聽者從listeners中註銷

/*以上兩個方法的前面均冠以synchronized,是因為運行在多線程環境時,可能同時有幾個對象同時要進行註冊和註銷操作,使用synchronized來確保它們之間的同步。開發工具或程序員使用這兩個方法建立源與監聽者之間的事件流*/

protected void notifyModelChanged() {
/**事件源使用本方法通知監聽者發生了modelChanged事件*/
    Vector l;
EventObject e = new EventObject(this);
/* 首先要把監聽者拷貝到l數組中,凍結EventListeners的狀態以傳遞事件。這樣來確保在事件傳遞到所有監聽者之前,已接收了事件的目標監聽者的對應方法暫不生效。*/
synchronized(this) {
l = (Vector)listeners.clone();
}
for (int i = 0; i < l.size(); i++) {
/* 依次通知註冊在監聽者隊列中的每個監聽者發生了modelChanged事件,並把事件狀態對象e作為參數傳遞給監聽者隊列中的每個監聽者*/
((ModelChangedListener)l.elementAt(i)).modelChanged(e);
}
}
}

在程序中可見事件源Model類顯式地調用了接口中的modelChanged方法,實際是把事件狀態對象e作為參數,傳遞給了監聽者類中的modelChanged方法。

適配類

適配類是Java事件模型中極其重要的一部分。在一些應用場合,事件從源到監聽者之間的傳遞要通過適配類來"轉發"。例如:當事件源發出一個事件, 而有 幾個事件監聽者對象都可接收該事件,但只有指定對象做出反應時,就要在事件源與事件監聽者之間插入一個事件適配器類,由適配器類來指定事件應該是由哪些監 聽者來響應。

適配類成為了事件監聽者,事件源實際是把適配類作為監聽者註冊入監聽者隊列中,而真正的事件響應者並未在監聽者隊列中,事件響應者應做的動作由適配類決定。目前絕大多數的開發工具在生成代碼時,事件處理都是通過適配類來進行的。

JavaBeans用戶化

JavaBeans開發者可以給一個Beans添加用戶化器 (Customizer)、屬性編輯器(PropertyEditor)和BeansInfo接口來描述一個Beans的內容,Beans的使用者可在構 造環境中通過與Beans附帶在一起的這些信息來用戶化Beans的外觀和應做的動作。一個Beans不必都有BeansCustomizer、 PrpertyEditor和BeansInfo,根據實際情況,這些是可選的,當有些Beans較複雜時,就要提供這些信息,以Wizard的方式使 Beans的使用者能夠用戶化一個Beans。有些簡單的Beans可能這些信息都沒有,則構造工具可使用自帶的透視裝置,透視出Beans的內容,並把 信息顯示到標準的屬性表或事件表中供使用者用戶化Beans,前幾節提到的Beans的屬性、方法和事件名要以一定的格式命名,主要的作用就是供開發工具 對Beans進行透視。當然也是給程序員在手寫程序中使用Beans提供方便,使他能觀其名、知其意。

用戶化器接口(Customizer Interface)

當一個Beans有了自己的用戶化器時,在構造工具內就可展現出自己的屬性表。在定義用戶化器時必須要實現java.Beanss.Customizer接口。例如,下面是一個"按鈕"Beans的用戶化一器:

public class OurButtonCustomizer
extends Panel implements Customizer {
... ...
/*當實現象OurButtonCustomizer這樣的常規屬性表時,一定要在其中實現addProperChangeListener
和removePropertyChangeListener,這樣,構造工具可用這些功能代碼為屬性事件添加監聽者。*/

... ...
private PropertyChangeSupport changes=new PropertyChangeSupport(this);
public void addPropertyChangeListener(PropertyChangeListener l) {
changes.addPropertyChangeListener(l);
public void removePropertyChangeListener(PropertyChangeListener l) {
changes.removePropertyChangeListener(l);
}
... ...

屬性編輯器接口(PropertyEditor Interface)

一個JavaBeans可提供PropertyEditor類,為指定的屬性創建一個編輯器。這個類必須繼承自 java.Beanss.PropertyEditorSupport類。構造工具與手寫代碼的程序員不直接使用這個類,而是在下一小節的 BeansInfo中實例化並調用這個類。例:

public class MoleculeNameEditor extends java.Beanss.PropertyEditorSupport {
public String[] getTags() {
String resule[]={
"HyaluronicAcid","Benzene","buckmisterfullerine",
"cyclohexane","ethane","water"};
return resule;}
}
上例中是為Tags屬性創建了屬性編輯器,在構造工具內,可從下拉表格中選擇MoleculeName的屬性應是"HyaluronicAid"或是"water"。

BeansInfo接口

每個Beans類也可能有與之相關的BeansInfo類,在其中描述了這個Beans在構造工具內出現時的外觀。BeansInfo中可定義屬性、方法、事件,顯示它們的名稱,提供簡單的幫助說明。 例如:

public class MoleculeBeansInfo extends SimpleBeansInfo {
public PropertyDescriptor[] getPropertyDescriptors() {
try {
PropertyDescriptor pd=new PropertyDescriptor("moleculeName",Molecule.class);
/*通過pd引用了上一節的MoleculeNameEditor類,取得並返回moleculeName屬性*/
pd.setPropertyEditorClass(MoleculeNameEditor.class);
PropertyDescriptor result[]={pd};
return result;
} catch(Exception ex) {
System.err.println("MoleculeBeansInfo: unexpected exeption: "+ex);
return null;
}
}
}

JavaBeans持久化

當一個JavaBeans在構造工具內被用戶化,並與其它Beans建立連接之後,它的所有狀態都應當可被保存,下一次被load進構造工具內或在 運行 時,就應當是上一次修改完的信息。為了能做到這一點,要把Beans的某些字段的信息保存下來,在定義Beans時要使它實現 java.io.Serializable接口。例如:

public class Button
implements java.io.Serializable {
}

實現了序列化接口的Beans中字段的信息將被自動保存。若不想保存某些字段的信息則可在這些字段前冠以transient或static關鍵字, transient和static變量的信息是不可被保存的。通常,一個Beans所有公開出來的屬性都應當是被保存的,也可有選擇地保存內部狀態。 Beans開發者在修改軟件時,可以添加字段,移走對其它類的引用,改變一個字段的private/protected/public狀態,這些都不影響 類的存儲結構關係。然而,當從類中刪除一個字段,改變一個變量在類體系中的位置,把某個字段改成transient/static,或原來是 transient/static,現改為別的特性時,都將引起存儲關係的變化。

JavaBeans的存儲格式

JavaBeans組件被設計出來後,一般是以擴展名為jar的Zip格式文件存儲,在jar中包含與JavaBeans有關的信息,並以 MANIFEST文件指定其中的哪些類是JavaBeans。以jar文件存儲的JavaBeans在網絡中傳送時極大地減少了數據的傳輸數量,並把 JavaBeans運行時所需要的一些資源捆綁在一起,本章主要論述了JavaBeans的一些內部特性及其常規設計方法,參考的是JavaBeans規 範1.0A版本。隨著世界各大ISV對JavaBeans越來越多的支持,規範在一些細節上還在不斷演化,但基本框架不會再有大的變動。

推薦鏈接:Java學習從入門到精通(附FAQ)

過去是那麼的隱晦不明,難尋它的軌跡脈絡. 而它又卻實的存在著, 在妳學習電腦科技的旅路忽而在前忽而在後. 妳總是隱隱竀見它的身影總無法去了解也不能觸摸, 在妳心裏總是個迷, 如霧又如雲, 呃..讓我幫妳撥開重重迷霧看見藍天..

正視歷史有助於了解未來, 的確有些好書真是如逝去的藝術創作者, 一如恆春的傳奇 陳達. 已成絕嚮, 不過舊書攤會是你唯一的希望. 以下的參考書目. 如果妳找的到那幾本書. 就可以好好的鍛造妳的基礎知識, 下次再紹比較近期的著作分享給妳們

個人電腦技術(1)--入門篇
是電腦的初步認識+使用技術,是為毫無電腦背景的讀者而寫。
✽榮獲81年金鼎獎推薦優良圖書獎
     作者: 施純協 編著
     書號:
9-009
     ISBN:957-9575-05-03
定價:295
        
個人電腦技術(2)--進階篇
是個人電腦作業系統+個人電腦技術,是為曾使用過個人電腦者而寫。
✽榮獲81年金鼎獎推薦優良圖書獎
     作者: 施純協 編著
     書號:
9-010
     ISBN:957-9575-06-1
定價:340
個人電腦技術(3)--登堂篇
是組合語言初步+個人電腦技術,是對於DOS略具基礎者而寫。
✽榮獲81年金鼎獎推薦優良圖書獎
     作者: 施純協 編著
     書號:
9-011
     ISBN:957-9575-07-X
定價:360
個人電腦技術(4)--入室篇
是C語言初步+個人電腦技術,是對於DOS略具基礎者而寫。
✽榮獲81年金鼎獎推薦優良圖書獎
     作者: 施純協 編著
     書號:
9-012
     ISBN:957-9575-08-8
定價:360

呃. 別懷疑. 這是15年前的書, 是真的很好的啟蒙書藉, 也許你會想15年..墳墓的草都快比一個人高了, 這是沒錯, 但是良好的觀念並不會隨著時代的演進而有所退失它的價值, 一如黃金一般也許會氧化一點點, 但它的價值還是存在的

Copyright 2010 Yita電腦調校日誌
Lunax Free Premium Blogger™ template by Introblogger