小说区亚洲自拍另类,亚洲欧美不卡高清在线,亚洲av无码无线在线观看http://m.tkk7.com/mphome/zh-cnFri, 11 Jul 2025 12:17:06 GMTFri, 11 Jul 2025 12:17:06 GMT60培訓(xùn)endinghttp://m.tkk7.com/mphome/archive/2009/09/11/294721.html昨夜人生昨夜人生Fri, 11 Sep 2009 06:04:00 GMThttp://m.tkk7.com/mphome/archive/2009/09/11/294721.htmlhttp://m.tkk7.com/mphome/comments/294721.htmlhttp://m.tkk7.com/mphome/archive/2009/09/11/294721.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/294721.htmlhttp://m.tkk7.com/mphome/services/trackbacks/294721.html?????? 爽還是有爽的地方,鼎培培訓(xùn)幾乎就是休假去,吃得好睡的好還有保健按摩,哎腐敗啊。我們zh今年招的人少,到了鼎培才知道什么叫做弱勢群體啊,人家都是20多,30多人,我們就5個人,湊一桌麻將打都難。早上培訓(xùn),晚上人家安排唱K,聯(lián)誼,泡吧啊,我們就郁悶啦,訂場都定不到。不行啊,好歹有140快的消費(fèi)卷不用豈不可惜。結(jié)果我們就跑得去保健,說起來還真丟人,洗腳,推拿,面膜,拔火罐我們一個都沒落下。我上次問推拿的師傅為什么保健這么難定,人家說有個zh公司的人天天來,在推拿的時候就有電話叫他去洗腳,洗腳的時候就有電話叫他去面膜,天天混在我們這里(PS:因為所有保健都是要預(yù)定的),這樣當(dāng)然定不到啦。接下來人家問我是哪個公司,我那個汗啊,直接說我是省公司的,丟人的事還是攤到省公司去。
?????? 軍訓(xùn)完后,人黑了一大圈本來就比較黑,現(xiàn)在遠(yuǎn)看基本上就是一堆碳,五官什么幾乎不用考慮啦。上周回了趟廣州,和大家坐一桌吃飯,師妹對我旁邊的人說“我發(fā)現(xiàn)你白了好多哦”,我暈啊明顯是說我黑嘛,有資本當(dāng)綠葉做襯托的工作啦。
?????? 終于下個星期要回部門歸隊啦,在商務(wù)吧這里真是閑的無聊,天天玩那個弱智到極點(diǎn)的游戲掙積分換飲料,我讀20多年書不是來干這個的,還是給我點(diǎn)事干吧,怎么說也得對得起每個月的工資啊,我這人還是比較厚道的。
??????






]]>
紅樓夢http://m.tkk7.com/mphome/archive/2009/09/02/293647.html昨夜人生昨夜人生Wed, 02 Sep 2009 10:56:00 GMThttp://m.tkk7.com/mphome/archive/2009/09/02/293647.htmlhttp://m.tkk7.com/mphome/comments/293647.htmlhttp://m.tkk7.com/mphome/archive/2009/09/02/293647.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/293647.htmlhttp://m.tkk7.com/mphome/services/trackbacks/293647.html

經(jīng)學(xué)家看見《易》
道學(xué)家看見淫
才子看見纏綿
革命家看見排滿
流言家看見宮闈秘事

]]>
毛瓜瓜征婚記http://m.tkk7.com/mphome/archive/2009/08/09/290473.html昨夜人生昨夜人生Sun, 09 Aug 2009 15:26:00 GMThttp://m.tkk7.com/mphome/archive/2009/08/09/290473.htmlhttp://m.tkk7.com/mphome/comments/290473.htmlhttp://m.tkk7.com/mphome/archive/2009/08/09/290473.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/290473.htmlhttp://m.tkk7.com/mphome/services/trackbacks/290473.html閱讀全文

]]>
強(qiáng)迫自己的三個程度:堅持,習(xí)慣,信仰http://m.tkk7.com/mphome/archive/2009/07/28/288820.html昨夜人生昨夜人生Tue, 28 Jul 2009 15:39:00 GMThttp://m.tkk7.com/mphome/archive/2009/07/28/288820.htmlhttp://m.tkk7.com/mphome/comments/288820.htmlhttp://m.tkk7.com/mphome/archive/2009/07/28/288820.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/288820.htmlhttp://m.tkk7.com/mphome/services/trackbacks/288820.html1.堅持,很費(fèi)力。為什么要堅持?有點(diǎn)強(qiáng)迫的意思,因為要做些讓自己感到不爽抑或至少是不那么情愿的事,所以需要堅持。
2.習(xí)慣,習(xí)慣更像條件反射,形成了習(xí)慣,不需要理由就會想要去執(zhí)行,這個輕松點(diǎn)。
3.信仰,可以為之不惜一切的玩意。這個比較強(qiáng)悍了,比如舍身炸碉堡,舍身堵?lián)屟?,舍身?dāng)炸彈,舍身開飛機(jī)撞大樓之類的。可以說這個是極端了,有信仰的人,我們有時候叫他們英雄,有時候叫他們恐怖分子。

1.如果你在堅持做某件事,其實你很脆弱,你在強(qiáng)迫自己做一件事,因為你心里有一個度,此時這個度大于這件需要堅持的事,如果有某件事物干擾,超越了這個度呢?就出現(xiàn)所謂的堅持不下去了。
2.如果你習(xí)慣于做某件事,這時候潛意識里無理由就要做這件事,自動,條件反射,基本上不會不爽,可是,如果有意識覺得某樣?xùn)|西超越這個習(xí)慣,這個習(xí)慣就被打破了,所以還是度的問題。
3.如果你已經(jīng)形成某種信仰,真正的堅信不移,你就可怕了,你的度是無窮大,給定一個任意大的理由,卻總存在一個更大的理由,去執(zhí)行自己的信仰,毫不動搖。

所以,信仰>習(xí)慣>堅持。
……

傳說,看客們有70%會相信以上論調(diào),5%會因此改變自己,只有若干人會建立自己的信仰。



]]>
感覺不再那么younghttp://m.tkk7.com/mphome/archive/2009/07/19/287375.html昨夜人生昨夜人生Sun, 19 Jul 2009 15:08:00 GMThttp://m.tkk7.com/mphome/archive/2009/07/19/287375.htmlhttp://m.tkk7.com/mphome/comments/287375.htmlhttp://m.tkk7.com/mphome/archive/2009/07/19/287375.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/287375.htmlhttp://m.tkk7.com/mphome/services/trackbacks/287375.html???????? 培訓(xùn)的包括技術(shù)線和客戶線,一起加起來都有35個人。就我們?nèi)ツ陮嵙?xí)留下來的5個人算老頭子啦,那些營銷經(jīng)理,客戶經(jīng)理都是20歲出頭,真是年輕啊。現(xiàn)在的20左右的同學(xué)說話真是雷人,碰到我旁邊的男的一上來就說“你看起來好老哦,多大啦”,那個牛啊,這說話直接把人家逼到墻角嘛,還沒完呢同樣也是跟去年一起實習(xí)的那個女的,上來直接就叫阿姨,有沒有搞錯人家還是靚女啦,說話也分個對象嘛。
?????????看到今年過來的10屆的實習(xí)生,就想起了去年我們實習(xí)的時候,喳喳眼一年就過去啦。感覺這屆來的整體上好像沒有我們?nèi)ツ陙淼哪敲磸?qiáng),今年男女分配很和諧嘛,一半男一半女,還是領(lǐng)導(dǎo)有水平。世界還真是小,我老叫成都的同學(xué)來我這實習(xí),結(jié)果那頭豬沒機(jī)會過來,他同一個導(dǎo)師的跑過來啦,還有去年實習(xí)回家火車上碰上的軟件學(xué)院的師弟,一起聊了會天以后都沒怎么來往,今年也跑過來實習(xí)啦,還一眼就認(rèn)出我來了,呵我有給他留下這么深的印象嘛,可惜不是個女的。
??????? 還有記得下一次歡迎新同事時,每個人先來三杯酒,雖然不知道以前有沒有哈(那些人說有估計是騙我的),反正我是喝了,這個傳統(tǒng)我一定記得發(fā)揚(yáng)光大。
?????????
???????

]]>
【轉(zhuǎn)】忽悠新解http://m.tkk7.com/mphome/archive/2009/07/11/286407.html昨夜人生昨夜人生Sat, 11 Jul 2009 15:25:00 GMThttp://m.tkk7.com/mphome/archive/2009/07/11/286407.htmlhttp://m.tkk7.com/mphome/comments/286407.htmlhttp://m.tkk7.com/mphome/archive/2009/07/11/286407.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/286407.htmlhttp://m.tkk7.com/mphome/services/trackbacks/286407.html政府忽悠百姓,叫政策;  
百姓忽悠政府,叫犯罪;  
領(lǐng)導(dǎo)忽悠百姓,叫號召;  
百姓忽悠領(lǐng)導(dǎo),叫搗亂;  
領(lǐng)導(dǎo)忽悠領(lǐng)導(dǎo),叫交易;  
百姓忽悠百姓,叫生意;  
男人忽悠女人,叫調(diào)戲;  
女人忽悠男人,叫勾引;

]]>
上班一星期http://m.tkk7.com/mphome/archive/2009/07/11/286389.html昨夜人生昨夜人生Sat, 11 Jul 2009 11:27:00 GMThttp://m.tkk7.com/mphome/archive/2009/07/11/286389.htmlhttp://m.tkk7.com/mphome/comments/286389.htmlhttp://m.tkk7.com/mphome/archive/2009/07/11/286389.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/286389.htmlhttp://m.tkk7.com/mphome/services/trackbacks/286389.html?????????? 不得不罵罵學(xué)院那些吃飯不干正事的老師,發(fā)個派遣證唄,還紙張打印錯誤,弄得我晚報道一天,來了后才知道不只是少一天工資啊。早一天來前半年的超市卡,洗衣卡都有份,哎悔死!總體來說住宿條件還是不錯,現(xiàn)在一個人住原來寢室這么大的一個單間,有空調(diào)有熱水有木床,就是少了衣柜和洗衣機(jī)??照{(diào)那個質(zhì)量好啊,搞得晚上冷得都可以洗熱水澡,不錯吧。當(dāng)然也有麻煩事,第一天大早起來就開始修馬桶,問人家都說這個是獨(dú)立生活的第一課,看來我趕上得還真是及時啊。
?????????? 一來什么東西都不全,就得花錢買這個買那個,現(xiàn)在還真是窮,公司也不預(yù)支點(diǎn)工資給我,浪費(fèi)那個錢給我們買這個保險那個保險,看得那個保險的賠償費(fèi)都是10萬,20萬,弄得我都想搞個工傷直接去領(lǐng)錢得啦。
?????????????到zh不得不去去它的海濱浴場,特別是在天氣不好的時候去景色更好,海天一線。雖然水不是那么清澈,但對于我這種不常看海的人還是非常滿足的,我這人要求低嘛。海灘當(dāng)然不能不提到游泳,我就只是去看看,雖然原來小時候還學(xué)過游泳,現(xiàn)在都不怎么愛游啦,一個是技巧差不多都忘了,二呢我有近視嘛,游泳又不能帶眼鏡,那人家能看我不能看別人,多吃虧啊,還是帶上眼鏡在旁邊看別人比較爽,嘿。
????????????第一個星期的工作基本是實習(xí),斌哥直接把我弄到體驗館去了。真的是非常忙碌,第一天同事帶我走了幾遍體驗館,發(fā)些資料給我看,第二天就得要我?guī)碣e做講解,俗稱接客。要講解完體驗館基本要花一個半鐘頭的時間,這一個半時間內(nèi)基本上是你一個人再說,對于才學(xué)過一天的人,難度還真是不小,但誰叫我是undergraduate呢,還好基本beyong my ability。本人口才還OK,學(xué)習(xí)能力也不錯,連續(xù)四天接客四次,而且接客對象的層次也逐步提升,由開始的學(xué)生,變成尊敬的vip客戶,某工業(yè)集團(tuán)部長,到最后的地方文化部局長,效果還不錯,說不定我還真的是有導(dǎo)游的潛力。
???????????下星期就開始公司培訓(xùn),接下來應(yīng)該是會很忙,每天寫總結(jié),早上再做匯報,哎這套名堂公司最喜歡搞了,沒辦法只能自己調(diào)整習(xí)慣啦。先清空大腦,準(zhǔn)備接受洗腦。

]]>
開路走人啦http://m.tkk7.com/mphome/archive/2009/06/30/284692.html昨夜人生昨夜人生Mon, 29 Jun 2009 16:58:00 GMThttp://m.tkk7.com/mphome/archive/2009/06/30/284692.htmlhttp://m.tkk7.com/mphome/comments/284692.htmlhttp://m.tkk7.com/mphome/archive/2009/06/30/284692.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/284692.htmlhttp://m.tkk7.com/mphome/services/trackbacks/284692.html??????? 畢業(yè)前幾天精神基本處于恍惚狀態(tài),大部分由于酒精過度的原因,發(fā)現(xiàn)喝多了竟然大腿都會生痛,嘿。畢業(yè)聚餐上實在太高興了,個人發(fā)言時基本上講什么都是不太記得啦,毫無條理性而且站著都是東到西歪的,丟臉?。?br />?????? 最近聽到最多的話就是“一路走好”,不管是老師同學(xué)都這么講,嘿怎么聽著像送我上路的感覺,改改口氣啦"一路好走"一點(diǎn)歧義都沒有的。
?????? 寫不了頭好昏啊,總之祝720各位今天許的愿大家都實現(xiàn)。

?? A DO:
?? 1.好好工作
?? 2.以結(jié)婚為目的找一個女朋友,解決個人問題。
?? 3.多運(yùn)動,成為一個“肌肉男”。
?? 濤哥:
?? 1.租一個大大的房子,大家來廣州好好落腳。
?? 2.好好掙錢,為成家做準(zhǔn)備。
?? 3.還債。
?? 濤嫂:
?? 1.掙錢。
?? 2.掙錢。
?? 3.還是掙錢。
?? 韓老大:
?? 1.吃遍公司附近的餐館。
?? 2.還Banner的¥735.00元。
???3.半年內(nèi)保持單身。
?? 老毛:
?? 1.找一女朋友解決單身問題,首當(dāng)其沖。
?? 2.繼續(xù)彩票事業(yè),多買多賺,以500W和LAMBORGHINI為目標(biāo)。
?? 3.任勞任怨,踏實工作。



]]>
哎,真郁悶http://m.tkk7.com/mphome/archive/2009/06/24/283956.html昨夜人生昨夜人生Wed, 24 Jun 2009 08:10:00 GMThttp://m.tkk7.com/mphome/archive/2009/06/24/283956.htmlhttp://m.tkk7.com/mphome/comments/283956.htmlhttp://m.tkk7.com/mphome/archive/2009/06/24/283956.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/283956.htmlhttp://m.tkk7.com/mphome/services/trackbacks/283956.html???????? 昨天打電話給先上班的同事了解情況,結(jié)果更讓我瘋狂,居然把我掉部門啦,現(xiàn)在換到的部門的業(yè)務(wù)我真是一點(diǎn)都不熟悉的,打個比方就是原來我是搞軟件的,現(xiàn)在弄得我去搞硬件,原因說是現(xiàn)在3G網(wǎng)建設(shè)緊張,某部門需求人員協(xié)調(diào)工作,老兄啊你們要調(diào)人也調(diào)個熟悉業(yè)務(wù)的過去啊,調(diào)我過去還是不是要花老長的時間培訓(xùn)。
???????? 靜下心來分析一下,換部門對我應(yīng)該說是有弊有利,好處在于:詳細(xì)了解通信知識,實踐操作基站,對以后的發(fā)展應(yīng)該是有好處的,從經(jīng)濟(jì)角度來看的話應(yīng)該一年也會多一兩萬塊錢。敝處:什么都不懂要從頭開始學(xué),上手要慢,工作可能會更辛苦???,就不是學(xué)新東西嘛,老子也是從小學(xué)一直念過來的,怕個屁啊,學(xué)就學(xué)。
???????? 23號照了畢業(yè)照,天公不作美,照著照著就下大雨,搞得都沒怎么和導(dǎo)師照兩張(人家看著下雨就開著沃爾沃走人啦),廣東這邊照畢業(yè)照都是拉家里人一起過來的,這傳統(tǒng)還正不錯看上去挺溫馨的。 畢業(yè)算起來花費(fèi)還真是不少,去了一趟鳳凰1200多,給導(dǎo)師買個zippo600元,吃飯估計又得500多吧。丟說的好錢嘛不是考省出來的,是考掙出來的,但問題是現(xiàn)在我也掙不出來啊,嘿嘿。
?????????? 7月1號走人,得趕緊把該辦的辦完,銷卡,領(lǐng)證,請人吃飯等,最好一個都不能少!
????

]]>
鳳凰,張家界旅游http://m.tkk7.com/mphome/archive/2009/06/21/283463.html昨夜人生昨夜人生Sun, 21 Jun 2009 09:05:00 GMThttp://m.tkk7.com/mphome/archive/2009/06/21/283463.htmlhttp://m.tkk7.com/mphome/comments/283463.htmlhttp://m.tkk7.com/mphome/archive/2009/06/21/283463.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/283463.htmlhttp://m.tkk7.com/mphome/services/trackbacks/283463.html???????? 苗寨回來后,人也都走不動,旅館的老板還想介紹其他的苗寨叫我們?nèi)ネ?,?dāng)我們是白癡啊肯定不去啦。接下來就分開行動在古城里亂逛,古城說真的true heart是很漂亮。中間一條長長的漓江穿過,岸的兩旁都是一些古式的閣樓,要是情侶來意境就更好。晚上的古城就更加熱鬧,小攤小販啊都跑出來,10點(diǎn)過后古樓上的酒吧就響個不停,伴著微風(fēng)喝著啤酒再看看旁邊路過的美女,一個字爽啊。反正覺得來景點(diǎn)游玩的美女就特別多,看一個是一個,還很多是幾個女人一起游玩的。
??????? 在古城待了兩天就覺得有些膩了,也不是我一個人有這種看法,大家都這么覺得,古城有一些商業(yè)開發(fā)過度啦。岸邊兩旁太多商品店,搞得有點(diǎn)像購物街,而且買的東西都非常的同質(zhì)化,基本上賣的就是銀器,刀,襯衫,血耙鴨啦。小商販秉著宰一個是一個原則,亂開價,你要是想買的話可以40%就可以拿下。我就買了幾只血耙鴨回家,但后來去張家界車上太熱鴨好像都壞了,嘿嘿自己都沒吃全部送人啦,喔吼吼。
????????去張家界本來不是在我們的旅游計劃之內(nèi)的,打算是在鳳凰多玩幾天再在回家的。結(jié)算一下總體花費(fèi)大部分是花在路程上了,不去一趟張家界不是很劃不來,粗俗一點(diǎn)形容就是“人都自宮了,還能不練葵花寶典”。張家界之旅于是就在匆促之間決定下來。
????????有趣的是人家去張家界玩得開心是因為景點(diǎn)漂亮,心情愉悅等等之類,嘿我們不同我們?nèi)埣医缤嬉餐﹂_心,但這種開心來自于和導(dǎo)游起哄,抬杠。學(xué)生嘛都沒什么錢,報了張家界旅游團(tuán),原來是440一位,我們講價搞成了320一位,心里還挺美。到了張家界玩了第一天,就發(fā)現(xiàn)不對勁了,到了一個景點(diǎn)還沒玩兩分鐘,導(dǎo)游就說時間不夠了趕緊拍照,要不下山?jīng)]飯吃了。開始我們還真以為是哦可能景點(diǎn)很多,時間確實比較緊,趕緊拍玩兩張照就走人。結(jié)果到了山下面,總共游玩時間3個鐘頭都不到,接下來導(dǎo)游就開始拉著我們?nèi)ベ徫锢?,還真是種類繁多啊,茶葉,洗腳,珠寶,涼果,牛肉,刀具等等。。。。一直搞到下午6點(diǎn)半,我考搞得老子火大發(fā)了。第二天游玩就不那么好說了,導(dǎo)游他說他的我們搞我們自己的,玩得慢點(diǎn)你還能剁我兩刀。做這個導(dǎo)游還真是要臉皮厚,當(dāng)然購物點(diǎn)他還是要拖我們?nèi)?,我們都不下車他就一個個來說,這本事哎我是服了。我們也不爽本來還欠旅行團(tuán)1000多,正好導(dǎo)游也不知道,我們也裝傻,直到最后也沒給。
???????? 張家界嘛感覺是沒有鳳凰好玩,當(dāng)然可能也是我們報的這個團(tuán)的問題,旅游團(tuán)變成了購物團(tuán),整個一個變形金剛。有些完全是在扯淡,10步一個景點(diǎn),你說那些山有什么看的,他還硬給每個山取了個名字,什么八戒娶親啊,觀音送子啊等,我是一個都沒看出來,問導(dǎo)游人家說這個嘛“三分靠外形,七分靠想象”。景點(diǎn)照相也很有意思,基本上屬于流水線操作,大家一個一個上,“1,2,3好,下一個”,回來整理相片都搞得像照相館里出來的,背景一模一樣的。
????????? 玩完張家界我就直接回家,這里要強(qiáng)烈bs一下某幾個同學(xué)自己錢又不帶,都向我借錢弄得我回家的錢都不夠。轉(zhuǎn)到長沙本來計劃住一晚,在長沙逛逛再回南昌的,現(xiàn)在只能買凌晨4點(diǎn)的火車回家。晚上8點(diǎn)到的長沙,要坐到早上4點(diǎn)上火車,恩這個辛苦我記得,那幾個人都躲不掉。在長沙逛到12點(diǎn)就郁悶啦,還有4個多小時干嘛呢,天氣又熱跑到24小時KFC躲涼去,買了杯可樂,找靠窗一坐。這世界上還真什么人都有,旁邊的一個阿哥,咚咚的跑過來要跟我聊天,聊就聊北。我想我跟你不熟,聊天的內(nèi)容基本上就是我說說廣東的發(fā)展啊,你說說湖南好玩的地方啊等等。那位阿哥不接我話茬,直接就聊他的感情問題,而且聊的內(nèi)容非常細(xì)致,我塞這人這么open的,估計是憋屈太久啦,這種事找熟人說不太好?;啬喜?,他還給我打過電話匯報事情進(jìn)展,哎這種真性情男人難得啊,祝好運(yùn)吧!
????????? 好不容易回趟家,把本科同學(xué)約出來聚聚,4年啊大家都變化不少啊,我還在學(xué)校里混著,慚愧慚愧。特別佩服慶銘老兄敢跳出來自己單干,這份激情沖勁自愧不如,感覺可能以后最有米的就要算這位老兄啦。"給自己一次機(jī)會",這句話反正我現(xiàn)在是不敢說。好累好累,跟寫論文樣的,就是廢話多。這天氣還真是熱,在宿舍都像洗桑拿,還是跑地鐵里去躲涼去。學(xué)校趕緊地發(fā)派遣證,我要去zh,我要空調(diào)?。?br />?????????
?
?????????









?????????
?????????
?????????

]]>
畢業(yè)安排http://m.tkk7.com/mphome/archive/2009/06/09/281013.html昨夜人生昨夜人生Tue, 09 Jun 2009 13:48:00 GMThttp://m.tkk7.com/mphome/archive/2009/06/09/281013.htmlhttp://m.tkk7.com/mphome/comments/281013.htmlhttp://m.tkk7.com/mphome/archive/2009/06/09/281013.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/281013.htmlhttp://m.tkk7.com/mphome/services/trackbacks/281013.html???????? 明天所里的同學(xué)集體去湖南鳳凰旅行,大家興致還是挺濃的,唯一的缺憾就是女生太少,哎這種情況一次次在工科學(xué)生旁邊發(fā)生,慘啊。聽說苗族的mm還是很水靈的,就近解渴和她們湊合湊合。
??????? 看看玩完后時間夠不夠,還是回家一趟吧。以后上班時間就不太好安排了,再說還要向大姨夫問個事,白白浪費(fèi)這么好個機(jī)會,怪不好意思,回去解釋解釋,再說有些事也不是我一個人弄說了算的。
??????? 23號回來后畢業(yè)照,,接下來就是請老師,所里同學(xué)大家一起吃飯,還有個校長捻絮儀式,學(xué)校還不錯這點(diǎn)學(xué)人家外國的辦得挺像模像樣的,就辛苦啦人家校長大人,一整天重復(fù)一套動作,握手,捻絮,發(fā)證書,微笑,擺pose,最后camera,估計今年得5000遍,換個體力不好的不搞慘才怪。還想看看有沒有機(jī)會請別人吃個飯,其實也不想怎么的,禮貌而已嘛。
??????? 畢業(yè)arrange差不多就這樣啦,很簡單也有些無聊,要問我讀研期間最大的遺憾是什么你就可以去換個問法“本科期間最大的遺憾是什么"因為答案都是一樣的,有時我也感到無語,按常理來說真的不至于啊。下次弄個面試版的調(diào)查,例如研究生期間做過最成功的一件事什么,最后悔的是什么,當(dāng)然不會像面試時那么冠冕彈簧,盡量做到不虛偽,恩這個一定得做。
??????? 另外蘇打綠的那個小情歌還正難唱,嚴(yán)重懷疑那個叫青什么峰的是不是個男人。


]]>
人物志http://m.tkk7.com/mphome/archive/2009/06/08/280585.html昨夜人生昨夜人生Mon, 08 Jun 2009 03:48:00 GMThttp://m.tkk7.com/mphome/archive/2009/06/08/280585.htmlhttp://m.tkk7.com/mphome/comments/280585.htmlhttp://m.tkk7.com/mphome/archive/2009/06/08/280585.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/280585.htmlhttp://m.tkk7.com/mphome/services/trackbacks/280585.html

澳門仔自歸大陸后,身形愈發(fā)消瘦,思循古法于入冬時加以補(bǔ)養(yǎng)。【注意身形愈發(fā)消瘦不是去了澳門才造成的,沒看到我天天堅持跑步啊,鍛煉結(jié)果Keep Fit,知不知啊】小三川之味,已去數(shù)次,漸厭之,眾人遂奔大巴適。為犒此仔拔毛之舉,夜敲此篇老毛,為RICA人物列傳開刀之作【很榮幸啊,看來錢沒有白花啊,雖然錢也是從萬惡的 Casino 拿來的,但誰知下次會不會再還回去呢】。
???
吾與此猥物同床異枕二載有余,甚悉之?!具@話說的,我是和你對腳,不是同床。反正我是沒有gay傾向,至于你有沒有我就不知啦】老毛悄然行至身后,吾不待轉(zhuǎn)首即感猥瑣之氣鋪天蓋地,料定必是此物,老毛訝之?!緦ξ胰绱酥P(guān)切,更加證明你的取向有問題,以后注意和我保持距離】
???
此君好戴一寵物圈于項,名曰健身,實未見效,【帶鈦白項圈好處有二:1.防止腰肌勞損,知不知腰對男人的重要性啊。2.美觀,引領(lǐng)時尚之風(fēng),君不見劉德華也開始學(xué)樣了嘛。】反有阻大腦供養(yǎng)之嫌,何以為證?近日老毛言語迥異于常。濤哥、阿杜皆不堪其擾,存滅其肉體而后快之意。老毛以寡敵眾,慷慨應(yīng)對,屢除其自生大規(guī)模殺傷化學(xué)武器保險,置于寢室上風(fēng)處,隨即頹勢立轉(zhuǎn)?!疚矣羞@么殘忍嘛,要怪就怪安踏不透氣,無心之作?!坑喔`以為此乃老毛漸歸本性之兆。
???
老毛長于言辯,眼光敏銳,領(lǐng)風(fēng)氣之先(數(shù)度拉吾下水),思維極為跳躍,擅傷女仔之心(略去數(shù)萬言。。。),而討大媽歡心。【反了反了,從來都是我被別人挫傷?!棵湍?span lang="EN-US">CALL
猥瑣毛,頗為傳神?!颈A羯贽q的權(quán)利】此仔將混跡于珠海某著名CM公司,余甚憂之。澳門場暗備此仔諸多劣跡,若這廝任職CM毛總,無間道恐將由其主演【雖然我玩了5次,大部分是有掙,誰知別人是不是小餌釣大魚】。。。

PS:
覓兔肉于巴適,半餉而不可得,痛憾之~

【感謝韓老大為我研究生三年做了個簡要的總結(jié),雖然大部分不是好話,弄得我都不好到處貼??偸菫槲艺砹讼滤悸罚_始寫自序了!】



]]>
今天真激動http://m.tkk7.com/mphome/archive/2008/05/27/203335.html昨夜人生昨夜人生Tue, 27 May 2008 13:50:00 GMThttp://m.tkk7.com/mphome/archive/2008/05/27/203335.html閱讀全文

]]>
龍應(yīng)臺:你應(yīng)該學(xué)會不相信---你來看此花時(好文)http://m.tkk7.com/mphome/archive/2008/04/27/196492.html昨夜人生昨夜人生Sun, 27 Apr 2008 09:37:00 GMThttp://m.tkk7.com/mphome/archive/2008/04/27/196492.htmlhttp://m.tkk7.com/mphome/comments/196492.htmlhttp://m.tkk7.com/mphome/archive/2008/04/27/196492.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/196492.htmlhttp://m.tkk7.com/mphome/services/trackbacks/196492.html?

二十歲之前相信的很多東西,后來一件一件變成不相信。

曾經(jīng)相信過愛國,后來知道“國”的定義有問題,通常那循循善誘要你愛國的人所定義的“國”,不一定可愛,不一定值得愛,而且更可能值得推翻。

曾經(jīng)相信過歷史,后來知道,原來歷史的一半是編造。前朝史永遠(yuǎn)是后朝人在寫,后朝人永遠(yuǎn)在否定前朝,他的后朝又來否定他,但是負(fù)負(fù)不一定得正,只是累積漸進(jìn)的扭曲變形移位,使真相永遠(yuǎn)掩蓋,無法復(fù)原。說“不容青史盡成灰”,表達(dá)的正是,不錯,青史往往是要成灰的。指鹿為馬,也往往是可以得逞和勝利的。

曾經(jīng)相信過文明的力量,后來知道,原來人的愚昧和野蠻不因文明的進(jìn)展而消失,只是愚昧野蠻有很多不同的面貌:純樸的農(nóng)民工人、深沉的知識分子、自信的政治領(lǐng)袖、替天行道的王師,都可能有不同形式的巨大愚昧和巨大野蠻,而且野蠻和文明之間,竟然只有極其細(xì)微、隨時可以被抹掉的一線之隔。

曾經(jīng)相信過正義,后來知道,原來同時完全可以存在兩種正義,而且彼此抵觸,冰火不容。選擇其中之一,正義同時就意味著不正義。而且,你絕對看不出,某些人在某一個特定的時機(jī)熱烈主張某一個特定的正義,其中隱藏著深不可測的不正義。

曾經(jīng)相信過理想主義者,后來知道,理想主義者往往經(jīng)不起權(quán)力的測試:一掌有權(quán)力,他或者變成當(dāng)初自己誓死反對的“邪惡”,或者,他在現(xiàn)實的場域里不堪一擊,一下就被弄權(quán)者拉下馬來,完全沒有機(jī)會去實現(xiàn)他的理想。理想主義者要有品格,才能不被權(quán)力腐化;理想主義者要有能力,才能將理想轉(zhuǎn)化為實踐。可是理想主義者兼具品格及能力者,幾希。

曾經(jīng)相信過愛情,后來知道,原來愛情必須轉(zhuǎn)化為親情才可能持久,但是轉(zhuǎn)化為親情的愛情,猶如化入杯水中的冰塊---它還是冰塊嗎?

曾經(jīng)相信過??菔癄€作為永恒不滅的表征,后來知道,原來海其實很容易枯,石,原來很容易爛。雨水,很可能不再來,滄海,不會再成桑田。原來,自己腳下所踩的地球,很容易被毀滅。??菔癄€的永恒,原來不存在。

二十歲之前相信的很多東西,有些其實到今天也還相信。

譬如國也許不可愛,但是土地和人可以愛。譬如史也許不能信,但是對于真相的追求可以無止盡。譬如文明也許脆弱不堪,但是除文明外我們其實別無依靠。譬如正義也許極為可疑,但是在乎正義比不在乎要安全。譬如理想主義者也許成就不了大事大業(yè),但是沒有他們社會一定不一樣。譬如愛情總是幻滅的多,但是螢火蟲在夜里發(fā)光從來就不是為了保持光。譬如??菔癄€的永恒也許不存在,但是如果一粒沙里有一個無窮的宇宙,一剎那里想必也有一個不變不移的時間。

那么,有沒有什么,是我二十歲前不相信的,現(xiàn)在卻信了呢?

有的,不過都是些最平凡的老生常談。曾經(jīng)不相信“性格決定命運(yùn)”,現(xiàn)在相信了。曾經(jīng)不相信“色即是空”,現(xiàn)在相信了。曾經(jīng)不相信“船到橋頭自然直”,現(xiàn)在有點(diǎn)信了。曾經(jīng)不相信無法實證的事情,現(xiàn)在也還沒準(zhǔn)備相信,但是,有些無關(guān)實證的感覺,我明白了,譬如李叔同圓寂前最后的手書:“君子之交,其淡如水,執(zhí)象而求,咫尺千里。問余何適,廓爾忘言,華枝春滿,天心月圓?!?/p>

相信與不相信之間,彷佛還有令人沉吟的深度。



]]>
<java pitfalls 中文版>讀書筆記http://m.tkk7.com/mphome/archive/2008/03/03/183563.html昨夜人生昨夜人生Mon, 03 Mar 2008 13:32:00 GMThttp://m.tkk7.com/mphome/archive/2008/03/03/183563.htmlhttp://m.tkk7.com/mphome/comments/183563.htmlhttp://m.tkk7.com/mphome/archive/2008/03/03/183563.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/183563.htmlhttp://m.tkk7.com/mphome/services/trackbacks/183563.html1.父類的靜態(tài)方法和最終方法不能被覆蓋。
2.用靜態(tài)方法覆蓋實例方法是通不過編譯的
3.String 的intern函數(shù)是將該String放入JVM的常量池中,避免出現(xiàn)String類型的多處應(yīng)用。
? 例如 b=a.intern();
?????? a==b 等于TRUE
4.訪問被覆蓋的方法,只能用super
5.只能通過傳遞數(shù)組來達(dá)到,基本數(shù)據(jù)類型數(shù)據(jù)引用的效果。
6.注意clone的深度,當(dāng)要克隆一個對象時,若該對象的內(nèi)部有對象,則需要將內(nèi)部對象也clone,也就是主要寫clone對象。
?
?
7.若以對象作為hashmap的索引值,需要重寫該對象的equal,和hashcode函數(shù)。???????

8.異常,如果對try{}catch(exception o){}的所有catch情況都考慮到了的話,調(diào)用者就不需要添加catch或throw exception啦

9.文件流: 分為字節(jié)流( 帶Input)和字符流(帶reader)
????????????? 例如FileInputStream??? 例如FileReader
?????????? 字符流不依賴於編碼,全部采用unicode編碼
?????????? 如果需要支持國際化的話就需要采用直接流啦 。
?????????? 示例:? FileInputStream is=new FileInputStream(f);
?????????????????? InputStreamReader r=new InputSteamReader(is,"utf-8");

? 另外可以使用System.getProperty("file.endcoding")來獲得系統(tǒng)的默認(rèn)編碼
10,數(shù)組和矢量Vector比較? 遍歷Vector比較慢,因為Vector是線程安全的,獲取值時采用了同步化,解決方法在遍歷是toArray()
??? 例外ArrayList具有vector的動態(tài)增加長度的特點(diǎn),但ArrayList是非同步的矢量。
11.在循環(huán)體內(nèi)鏈接字符串,使用StringBuffer效率更高;其他情況下使用+。



]]>
軟件最大的追求是什么? (轉(zhuǎn)載)http://m.tkk7.com/mphome/archive/2008/02/25/181984.html昨夜人生昨夜人生Mon, 25 Feb 2008 06:11:00 GMThttp://m.tkk7.com/mphome/archive/2008/02/25/181984.htmlhttp://m.tkk7.com/mphome/comments/181984.htmlhttp://m.tkk7.com/mphome/archive/2008/02/25/181984.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/181984.htmlhttp://m.tkk7.com/mphome/services/trackbacks/181984.html前段時間讀了《軟件的最大追求是什么》,擊節(jié)叫好,深以為然,雖然該文章很多地方顯得有點(diǎn)極端。

如今的軟件系統(tǒng)越來越復(fù)雜,如果軟件的結(jié)構(gòu)不好會影響軟件的可維護(hù)性,重構(gòu)代碼是一件極其痛苦的事情。

關(guān)于軟件的復(fù)雜性問題,我做了一些思考:

1) Cyclomatic Complexity (圈復(fù)雜性 = number of decision points +1    其中number of decision points是指一個if else之類的條件判斷語句 (引自《軟件的最大追求是什么》)

if else 語句可以被行為模式/策略模式代替,不妨看下列的例子:

假設(shè)我們要根據(jù)條件判斷來完成不同的行為,用if else 是這樣寫的:

main() {

if(case A){

//do with strategy A

}else(case B){

//do with strategy B

}else(case C){

//do with strategy C

}

}



用策略模式則如下:

class runner{

do();

}



class A extends runner{

do(){

//do with strategy A

}

}



class B extends runner{

do(){

//do with strategy B

}

}



class C extends runner {

do(){

//do with strategy C

}

}



main(){

runner.do();

}



用了策略模式后main()中的語句的確簡單多了,再也看不到該死的if else了^_^酷~~~



可實際上是這樣簡單嗎???仔細(xì)研究一下上面的代碼就能看出問題出來,首先這兩段代碼中的A、B、C的實際意義是不一樣的:第一段代碼中ABC代表的是某一個邏輯條件的值而第二段中的ABC則是具體的類;第二段得到如此簡化的前提是它得到的邏輯條件就是一個類;如果得到的仍然只是一個邏輯條件,那么為了達(dá)到代碼簡化的效果,必須由另一個類(或方法)完成這種邏輯條件到具體類的轉(zhuǎn)換,會出現(xiàn)類似下列的代碼

class RunnerFactory{

runner getInstante(case){

if (case A) return new A();

else if (case B) return new B();

else if (case C) return new C(); } }



從測試的角度來說,兩者的測試分支都是3,復(fù)雜度相同,而第二種方法在很多的時候貌似還要測試借口的有效性。用策略模式還有一個缺點(diǎn)就是會使系統(tǒng)中的類的數(shù)量大大的增加,如上的例子,采用if else類的數(shù)量為1,而采用策略模式的類個數(shù)為5個或6個(主要取決于邏輯映射是否用單獨(dú)的類)。

如果邏輯判斷的條件有三個,每個邏輯條件有三種可能的話,用策略模式系統(tǒng)至少會增加10個新類;如果條件更多的話類的個數(shù)也會更多 這么看來GOF的策略模式還要它干嘛??

當(dāng)然不是,策略模式在很多情況下是一種非常好的解決方案。

這還要從if else 語句造成程序復(fù)雜以至難以維護(hù)的真正原因說起。就我個人的感覺真正造成if else語句難以維護(hù)的原因是每一個邏輯分支中的處理語句過長。比如我現(xiàn)在工作中維護(hù)的代碼,常常一個條件下面的業(yè)務(wù)處理語句有兩三千行,每次我光確定某個邏輯分支的結(jié)束位置就要找半天,頭暈-_-!。如果是多層條件的話情況就更糟了。一個分支就一千多行,幾個分支上萬行自然很難維護(hù)。 if else 語句本質(zhì)上是程序的流程控制語句,而分支中N長的代碼通常是業(yè)務(wù)處理語句。

行為模式/策略模式就是把流程判斷和業(yè)務(wù)處理進(jìn)行了一次解耦,將業(yè)務(wù)邏輯封裝成一個個單獨(dú)的類。換句話說,行為模式/策略模式并不是不需要if else 語句(事實上該判斷的還是要判斷),只不過的換了地方或者是別的代碼幫你做了。另一方面,進(jìn)行邏輯判斷的語句被集中起來而不是分散在程序的各個角落,有利于邏輯本身的維護(hù)。策略模式/行為模式還有一個明顯的好處就是如果新增加了一種狀態(tài),我們只需要新增加一個策略類(同上的ABC)就可以了,避免了在程序中改動那些大段大段讓人厭煩的if else 語句。

所以對于你的程序來說到底是使用設(shè)計模式還是簡單的使用if else 關(guān)鍵在于你的程序是否復(fù)雜,有沒有必要將控制邏輯和業(yè)務(wù)邏輯進(jìn)行解耦。當(dāng)然如果你可以用別的方式實現(xiàn)解耦也是非常好的。



2) Response for Class(RFC) 當(dāng)一個類和很多其他類存在依賴時,它就變得復(fù)雜甚至難以修改和維護(hù),這樣,RFC值越大,表示你的系統(tǒng)味道越壞。(引自《軟件的最大追求是什么》)



復(fù)雜性是由類與類之間的依賴關(guān)系(dependency)造成的。

具體如下所示:

interface Runner;

class A implement runner{ do(){}; }



一個大型的系統(tǒng)中很多地方用到了runner接口,于是在很多地方出現(xiàn)了如下的相同代碼:

{

Runner r = new A();

r.do();

}



如果因為某種原因runner接口的實現(xiàn)類改為B,則在所有用到runner接口的地方代碼都要統(tǒng)統(tǒng)改為:

{

//Runner r = new A();

Runner r = new B(); r.do();

}



這些遍布系統(tǒng)各個角落的改動是繁瑣且容易出錯的。

于是出現(xiàn)了各種框架和模式,其中最著名的當(dāng)然是IOC(Inversion of Control)反轉(zhuǎn)控制或者稱之為依賴型注射(Dependency Injection) 那些討厭的代碼變成了如下:

{

ApplicationContext ctx = new FileSystemXmlApplicationContext("spring.xml");

Runner r = (Runner)ctx.getBean("Runner");

r.do();

}



這樣我們就不需要對各個角落的代碼進(jìn)行維護(hù)了,容器會自動的為我們選擇合適的類。

我到覺得維護(hù)的工作還是我們的,為了讓容器注射入合適的類,我們必須要維護(hù)一個叫Spring.xml的配置文件,或者如果你不喜歡配置文件這個東東的話(比如偶)就得自己寫一個注冊類,將依賴關(guān)系一一注冊進(jìn)去。你還要為使用該接口的類定義一個以該接口為參數(shù)的構(gòu)造函數(shù)或者該接口的setter方法,好讓容器可以將實現(xiàn)類順利的注射進(jìn)來。

該做的還是要做,只不過換了一個地方做而已。但就是換了個地方,實現(xiàn)了對依賴關(guān)系的集中維護(hù)(又是集中),大大的改善了系統(tǒng)的結(jié)構(gòu),明確了不同職責(zé)單位之間的分工。呵呵,有時自己也極端的覺得設(shè)計的工作說到底就是解決代碼結(jié)構(gòu)的問題^_^



IOC一直是和輕量級框架聯(lián)系在一起的。所謂的重量級框架EJB也有實現(xiàn)相同功能的解決方案:Service Locator Service Locator就是一個定位器,它維護(hù)了一個數(shù)據(jù)結(jié)構(gòu)(比如一個表),通過這個定位器你可以準(zhǔn)確的定位到你的接口想要的實現(xiàn)類,Service Locator同樣使你免去了改變接口實現(xiàn)類后的維護(hù)惡夢:

{

Runner r = (Runner)ServiceLocator.lookup("Runner");

r.do();

}



無論是IOC還是Service Locator都幫助你維護(hù)了類之間的依賴關(guān)系。那么是否我們在編程中一定要用呢,這又是個權(quán)衡的問題,IOC帶來了很多的好處,不過我個人認(rèn)為它的代碼是讓人費(fèi)解的(你根本不知道它做了什么),并且為了用它,一方面你要借助于容器,另一方面你要編寫配置文件,要為依賴型注射提供合適的途徑。

如果你的系統(tǒng)類之間的依賴型錯綜復(fù)雜,需求的變化常常導(dǎo)致實現(xiàn)類的變化,同時你又希望采用測試驅(qū)動的快速開發(fā)模式,IOC毫無疑問是一個完美的解決方案;如果你的系統(tǒng)不存在上述的問題,為什么不簡簡單單的在程序中寫死呢,何苦去維護(hù)一堆配置文件(我所在的開發(fā)部門貌似都比較痛恨配置文件這個東東)。Service Locator也有很多缺點(diǎn),被罵的最多的就是沒法快速測試。

反轉(zhuǎn)控制,即轉(zhuǎn)換控制權(quán)。依賴關(guān)系控制權(quán)的轉(zhuǎn)換是對代碼結(jié)構(gòu)的一次重構(gòu),重構(gòu)的目標(biāo)還是解耦,讓不同的職責(zé)代碼集中放到不同的地方,于是程序員可以更加專注的解決特定的問題,比如業(yè)務(wù)邏輯。

程序設(shè)計的發(fā)展就是對代碼結(jié)構(gòu)的不斷調(diào)整,不斷解耦,讓特定的代碼解決特定的問題而不是什么都混在一起。從面向過程到面向?qū)ο箅y道不是這樣嗎,封裝的本質(zhì)也是解耦。



在實際問題的解決當(dāng)中,最重要的信條就是合適,要記住任何結(jié)構(gòu)的改進(jìn)都會付出代價,你的改進(jìn)是否值得你為此付出的代價。比如當(dāng)你做一個嵌入式程序的時候你首要考慮的自然是效率問題;而如果你做的是一個ERP產(chǎn)品,在系統(tǒng)設(shè)計的時候,光系統(tǒng)的可維護(hù)性問題就讓你不得不絞盡腦汁考慮一下代碼的結(jié)構(gòu)。



一句話,只做最對的。

程序設(shè)計的最大追求就是在合適的地方做正確的事。

]]>
利用方法名稱執(zhí)行方法行為的源代碼http://m.tkk7.com/mphome/archive/2008/02/25/181951.html昨夜人生昨夜人生Mon, 25 Feb 2008 03:48:00 GMThttp://m.tkk7.com/mphome/archive/2008/02/25/181951.htmlhttp://m.tkk7.com/mphome/comments/181951.htmlhttp://m.tkk7.com/mphome/archive/2008/02/25/181951.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/181951.htmlhttp://m.tkk7.com/mphome/services/trackbacks/181951.html

public static void main(String[] args){

CommandLoader cl=new DefaultCommandLoader(new DefaultShowCommand());
cl.excute("executeShowList",null);
}
}

public interface CommandLoader {

void excute(String commandName,Object[] argument);
}


public class DefaultCommandLoader implements CommandLoader {


private ShowCommand showCommand;

private HashMap subCommandMap=new HashMap();

public DefaultCommandLoader(ShowCommand showCommand){
this.showCommand=showCommand;
init();
}


private void init() {

Method[] allMethod=this.showCommand.getClass().getMethods();
for(int i=0;i<allMethod.length;i++){
Method m=allMethod;
if(m.getName().startsWith("execute")){
subCommandMap.put(m.getName(), m);
}
}
}


public void excute(String commandName, Object[] argument) {

Method m=(Method) this.subCommandMap.get(commandName);

if(m==null){
throw new NullPointerException("not found command");
}
try{
m.invoke(this.showCommand,argument);
}
catch(Exception e){
throw new RuntimeException("Load command["+m.getName()+"error");
}
}
}

public interface ShowCommand {


public void executeShowList();

public void excuteShowString();

public void executeShowInteger();

public void executeShowLong();
}

public class DefaultShowCommand implements ShowCommand {

public void excuteShowString() {
System.out.println(String.class.getName());
}

public void executeShowInteger() {
System.out.println(Integer.class.getName());
}

public void executeShowList() {
System.out.println(List.class.getName());
}

public void executeShowLong() {
System.out.println(Long.class.getName());
}

}


]]>
你還在用if else嗎?(轉(zhuǎn)載)http://m.tkk7.com/mphome/archive/2008/02/25/181927.html昨夜人生昨夜人生Mon, 25 Feb 2008 02:57:00 GMThttp://m.tkk7.com/mphome/archive/2008/02/25/181927.htmlhttp://m.tkk7.com/mphome/comments/181927.htmlhttp://m.tkk7.com/mphome/archive/2008/02/25/181927.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/181927.htmlhttp://m.tkk7.com/mphome/services/trackbacks/181927.html傳統(tǒng)思維習(xí)慣分析

  為什么會業(yè)務(wù)邏輯層使用if else,其實使用者的目的也是為了重用,但是這是面向過程編程的重用,程序員只看到代碼重用,因為他看到if else幾種情況下大部分代碼都是重復(fù)的,只有個別不同,因此使用if else可以避免重復(fù)代碼,并且認(rèn)為這是模板Template模式。

  他范的錯誤是:程序員只從代碼運(yùn)行順序這個方向來看待它的代碼,這種思維類似水管或串行電路,水沿著水管流動(代碼運(yùn)行次序),當(dāng)遇到幾個分管(子管),就分到這幾個分管子在流動,這里就相當(dāng)于碰到代碼的if else處了。

  而使用OO,則首先打破這個代碼由上向下順序等同于運(yùn)行時的先后循序這個規(guī)律,代碼結(jié)構(gòu)不由執(zhí)行循序決定,由什么決定呢?由OO設(shè)計;設(shè)計模式會取代這些if else,但是最后總是由一個Service等總類按照運(yùn)行順序組裝這些OO模塊,只有一處,這處可包含事務(wù),一般就是Service,EJB中是Session bean。

  一旦需求變化,我們更多的可能是Service中各個OO模塊,甚至是只改動Service中的OO模塊執(zhí)行順序就能符合需求。

  這里我們也看到OO分離的思路,將以前過程語言的一個Main函數(shù)徹底分解,將運(yùn)行順序與代碼其他邏輯分離開來,而不是象面向過程那樣混亂在一起。所以有人感慨,OO也是要順序的,這是肯定的,關(guān)鍵是運(yùn)行順序要單獨(dú)分離出來。

  是否有if else可以看出你有沒有將運(yùn)行順序分離到家。

設(shè)計模式的切入口

  經(jīng)常有人反映,設(shè)計模式是不錯,但是我很難用到,其實如果你使用if else來寫代碼時(除顯示控制以外),就是在寫業(yè)務(wù)邏輯,只不過使用簡單的判斷語句來作為現(xiàn)實情況的替代者。

   還是以大家熟悉的論壇帖子為例子,如ForumMessage是一個模型,但是實際中帖子分兩種性質(zhì):主題貼(第一個根貼)和回帖(回以前帖子的帖子),這里有一個樸素的解決方案:
建立一個ForumMessage,然后在ForumMessage加入isTopic這樣判斷語句,注意,你這里一個簡單屬性的判斷引入,可能導(dǎo)致你的程序其他地方到處存在if else 的判斷。

  如果我們改用另外一種分析實現(xiàn)思路,以對象化概念看待,實際中有主題貼和回帖,就是兩種對象,但是這兩種對象大部分是一致的,因此,我將ForumMessage設(shè)為表達(dá)主題貼;然后創(chuàng)建一個繼承ForumMessage的子類ForumMessageReply作為回帖,這樣,我在程序地方,如Service中,我已經(jīng)確定這個Model是回帖了,我就直接下溯為ForumMessageReply即可,這個有點(diǎn)類似向Collection放入對象和取出時的強(qiáng)制類型轉(zhuǎn)換。通過這個手段我消滅了以后程序中if else的判斷語句出現(xiàn)可能。

  從這里體現(xiàn)了,如果分析方向錯誤,也會導(dǎo)致誤用模式。

  討論設(shè)計模式舉例,不能沒有業(yè)務(wù)上下文場景的案例,否則無法決定是否該用模式,下面舉兩個對比的例子:

  第一. 這個帖子中舉例的第一個代碼案例是沒有上下文的,文中只說明有一段代碼:

main() {

if(case A){

//do with strategy A

}else(case B){

//do with strategy B

}else(case C){

//do with strategy C

}

}

?

  這段代碼只是純粹的代碼,沒有業(yè)務(wù)功能,所以,在這種情況下,我們就很難確定使用什么模式,就是一定用策略模式等,也逃不過還是使用if else的命運(yùn),設(shè)計模式不是魔法,不能將一段毫無意義的代碼變得簡單了,只能將其體現(xiàn)的業(yè)務(wù)功能更加容易可拓展了。

  第二.在這個帖子中,作者舉了一個PacketParser業(yè)務(wù)案例,這段代碼是體現(xiàn)業(yè)務(wù)功能的,是一個數(shù)據(jù)包的分析,作者也比較了各種模式使用的不同,所以我們還是使用動態(tài)代理模式或Command模式來消滅那些可能存在的if else

  由以上兩個案例表明:業(yè)務(wù)邏輯是我們使用設(shè)計模式的切入點(diǎn),而在分解業(yè)務(wù)邏輯時,我們習(xí)慣則可能使用if else來實現(xiàn),當(dāng)你有這種企圖或者已經(jīng)實現(xiàn)代碼了,那么就應(yīng)該考慮是否需要重構(gòu)Refactoring了。

if else替代者

  那么實戰(zhàn)中,哪些設(shè)計模式可以替代if else呢?其實GoF設(shè)計模式都可以用來替代if else,我們分別描述如下:

  • 狀態(tài)模式 
      當(dāng)數(shù)據(jù)對象存在各種可能性的狀態(tài),而且這種狀態(tài)將會影響到不同業(yè)務(wù)結(jié)果時,那么我們就應(yīng)該考慮是否使用狀態(tài)模式,當(dāng)然,使用狀態(tài)模式之前,你必須首先有內(nèi)存狀態(tài)這個概念,而不是數(shù)據(jù)庫概念,因為在傳統(tǒng)的面向過程的/面向數(shù)據(jù)庫的系統(tǒng)中,你很難發(fā)現(xiàn)狀態(tài)的,從數(shù)據(jù)庫中讀取某個值,然后根據(jù)這個值進(jìn)行代碼運(yùn)行分流,這是很多初學(xué)者常干的事情。參考文章:狀態(tài)對象:數(shù)據(jù)庫的替代者
      使用傳統(tǒng)語言思維的情況還有:使用一個類整數(shù)變量標(biāo)識狀態(tài):

    ?

    public class Order{

    private int status;

    //說明:

    //status=1 表示訂貨但為查看 ;

    //status=2 表示已經(jīng)查看未處理;

    //status=3 表示已經(jīng)處理未付款

    //status=4 表示已經(jīng)付款未發(fā)貨

    //status=5 表示已經(jīng)發(fā)貨

    }


      上述類設(shè)計,無疑是將類作為傳統(tǒng)語言的函數(shù)來使用,這樣導(dǎo)致程序代碼中存在大量的if else。

  • 策略模式 
      當(dāng)你面臨幾種算法或者公式選擇時,可以考慮策略模式,傳統(tǒng)過程語言情況是:從數(shù)據(jù)庫中讀取算法數(shù)值,數(shù)值1表示策略1,例如保存到數(shù)據(jù)庫;數(shù)值為2表示策略2,例如保存到XMl文件中。這里使用if else作為策略選擇的開關(guān)。

  • command模式 
      傳統(tǒng)過程的思維情況是:如果客戶端發(fā)出代號是1或"A",那么我調(diào)用A.java這個對象來處理;如果代號是2或"B",我就調(diào)用B.java來處理,通過if else來判斷客戶端發(fā)送過來的代碼,然后按事先約定的對應(yīng)表,調(diào)用相應(yīng)的類來處理。

  • MVC模式 
      MVC模式的傳統(tǒng)語言誤用和Command模式類似,在一個Action類中,使用if else進(jìn)行前后臺調(diào)度,如果客戶端傳送什么命令;我就調(diào)用后臺什么結(jié)果;如果后臺處理什么結(jié)構(gòu),再決定推什么頁面,不過,現(xiàn)在我們使用Struts/JSF這樣MVC模式的框架實現(xiàn)者就不必范這種低級錯誤。

  • 職責(zé)鏈模式 
      職責(zé)鏈模式和Command模式是可選的,如果你實在不知道客戶端會發(fā)出什么代號;也沒有一個事先定義好的對照表,那么你只能編寫一個個類去碰運(yùn)氣一樣打開這個包看一下就可以。與Command是不同在AOP vs Decorator一文中有分析。

  • 代理或動態(tài)代理模式 
      代理對象可以是符合某種條件的代表者,比如,權(quán)限檢驗,傳統(tǒng)面向過程思維是:當(dāng)一個用戶登陸后,訪問某資源時,使用if else進(jìn)行判斷,只有某種條件符合時,才能允許訪問,這樣權(quán)限判斷和業(yè)務(wù)數(shù)據(jù)邏輯混亂在一起,使用代理模式可以清晰分離,如果嫌不太好,使用動態(tài)代理,或者下面AOP等方式。

  • AOP或Decorator模式
      
      其實使用filter過濾器也可以替代我們業(yè)務(wù)中的if else,過濾器起到一種過濾和篩選作用,將符合本過濾器條件的對象攔截下來做某件事情,這就是一個過濾器的功能,多個過濾器組合在一起實際就是if else的組合。
      所以,如果你實在想不出什么辦法,可以使用過濾器,將過濾器看成防火墻就比較好理解,當(dāng)客戶端有一個請求時,經(jīng)過不同性質(zhì)的防火墻,這個防火墻是攔截端口的;那個防火墻是安全檢查攔截等等。過濾器也如同紅藍(lán)白各種光濾鏡;紅色濾鏡只能將通過光線中的紅色攔截了;藍(lán)色濾鏡將光線中的藍(lán)色攔截下來,這實際上是對光線使用if else進(jìn)行分解。


      如圖,通過一個個條件過濾器我們立體地實現(xiàn)了對信號的分離,如果你使用if else,說明你是將圖中的條件1/2/3/4合并在一起,在同一個地方實現(xiàn)條件判斷。
      需要深入了解過濾器的實現(xiàn)細(xì)節(jié)和微小區(qū)別,請參考文章:AOP vs Decorator

    OO設(shè)計的總結(jié)  

      還有一種偽模式,雖然使用了狀態(tài)等模式,但是在模式內(nèi)部實質(zhì)還是使用if else或switch進(jìn)行狀態(tài)切換或重要條件判斷,那么無疑說明還需要進(jìn)一步努力。更重要的是,不能以模式自居,而且出書示人。

      真正掌握面向?qū)ο筮@些思想是一件困難的事情,目前有各種屬于揪著自己頭發(fā)向上拔的解說,都是誤人子弟的,所以我覺得初學(xué)者讀Thinking in Java(Java編程思想)是沒有用,它試圖從語言層次來講OO編程思想,非常失敗,作為語言參考書可以,但是作為Java體現(xiàn)的OO思想的學(xué)習(xí)資料,就錯了。

      OO編程思想是一種方法論,方法論如果沒有應(yīng)用比較,是無法體會這個方法論的特點(diǎn)的,禪是古代一個方法論,悟禪是靠挑水砍柴這些應(yīng)用才能體會。

      那么OO思想靠什么應(yīng)用能夠體會到了?是GoF設(shè)計模式,GoF設(shè)計模式是等于軟件人員的挑水砍柴等基本活,所以,如果一個程序員連基本活都不會,他何以自居OO程序員?從事OO專業(yè)設(shè)計編程這個工作,如果不掌握設(shè)計模式基本功,就象一個做和尚的人不愿意挑水砍柴,他何以立足這個行業(yè)?早就被師傅趕下山。

      最后總結(jié):將if else用在小地方還可以,如簡單的數(shù)值判斷;但是如果按照你的傳統(tǒng)習(xí)慣思維,在實現(xiàn)業(yè)務(wù)功能時也使用if else,那么說明你的思維可能需要重塑,你的編程經(jīng)驗越豐富,傳統(tǒng)過程思維模式就容易根深蒂固,想靠自己改變很困難;建議接受專業(yè)頭腦風(fēng)暴培訓(xùn)。

      用一句話總結(jié):如果你做了不少系統(tǒng),很久沒有使用if else了,那么說明你可能真正進(jìn)入OO設(shè)計的境地了。(這是本人自己發(fā)明的實戰(zhàn)性的衡量考核標(biāo)準(zhǔn))。



  • ]]>
    servlet的啟動順序http://m.tkk7.com/mphome/archive/2007/12/26/170636.html昨夜人生昨夜人生Wed, 26 Dec 2007 09:02:00 GMThttp://m.tkk7.com/mphome/archive/2007/12/26/170636.htmlhttp://m.tkk7.com/mphome/comments/170636.htmlhttp://m.tkk7.com/mphome/archive/2007/12/26/170636.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/170636.htmlhttp://m.tkk7.com/mphome/services/trackbacks/170636.html當(dāng)一個web容器產(chǎn)生一個servlet實例時,它的基本順序如下:
    1、?servlet容器首先調(diào)用這個servlet的init()方法,它建會初始化一個資源給servlet使用。列如一個logger。這個init()方法在整個servlet的生存周期只會被調(diào)用一次。
    2、?init()方法初始化了一個對象,對象繼承了java.servlet.ServletConfig接口。這個對象使servlet能夠初始化那些被聲明在部署描述符的參數(shù)。ServletConfig也使servlet有權(quán)使用一個 javax.servlet.ServletContext 的對象,用這個對象servlet可以記錄信息,分派請求到其他的web組件上并且能夠使用在同一個應(yīng)用上的其他web資源。
    3、?servlet容器調(diào)用這個servlet的service()方法去響應(yīng)servlet的一些請求。根據(jù)HttpServlets,service()自動的調(diào)用合適的HTTP方法去處理請求通過調(diào)用servlet的doGet()或者doPost()方法。幾個例子,用戶發(fā)送了個Post請求這時servlet通過doPost()方法的執(zhí)行來響應(yīng)這個請求。
    4、?當(dāng)調(diào)用兩個主要的HttpServlet的doPost(),doGet()方法,這個servlet容器將產(chǎn)生javax..servlet.http.HttpServletRequest和HttpServletResponse 的對象并且把它們作為參數(shù)傳到這些處理請求的方法中。
    ?
    5、?管理一個servlet的生命周期,或者決定這個servlet實例對request請求的處理,在java虛擬機(jī)上的存在時間。當(dāng)一個servlet容器開始移除一個servlet的時候?qū)⒄{(diào)用servlet的destroy()方法,在這個方法中能夠釋放所有的資源,比如一個數(shù)據(jù)庫連接。


    ]]>
    jetty Servlet 技術(shù)http://m.tkk7.com/mphome/archive/2007/12/24/170153.html昨夜人生昨夜人生Mon, 24 Dec 2007 13:00:00 GMThttp://m.tkk7.com/mphome/archive/2007/12/24/170153.htmlhttp://m.tkk7.com/mphome/comments/170153.htmlhttp://m.tkk7.com/mphome/archive/2007/12/24/170153.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/170153.htmlhttp://m.tkk7.com/mphome/services/trackbacks/170153.html???????????? 1.將NIO概念加入到servlet中,(具體的技術(shù)還是不太)
    ???????????? 2.引入了continuation 機(jī)制。說白了就是將每個連接connection從servlet的suspend換到container的suspend,不在占用servlet的資源,此處需要考慮換入繼續(xù)執(zhí)行的問題。用通俗的話來講就是給serlvet加入了記憶功能。
    ???????????? 3.Split buffers:使用改技術(shù)的前提是采用continuation,也就是在讀寫的時候加入緩存塊
    ???????????? 4.Delayed dispatch:好像這方面的改進(jìn)作用不大,只是對那些request的請求一起到,在將其發(fā)送到servlet去處理。



    ????????????? 暫時看懂的就這么多

    ]]>
    12.21 開題報告http://m.tkk7.com/mphome/archive/2007/12/21/169419.html昨夜人生昨夜人生Fri, 21 Dec 2007 10:28:00 GMThttp://m.tkk7.com/mphome/archive/2007/12/21/169419.htmlhttp://m.tkk7.com/mphome/comments/169419.htmlhttp://m.tkk7.com/mphome/archive/2007/12/21/169419.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/169419.htmlhttp://m.tkk7.com/mphome/services/trackbacks/169419.html??????????????????????????????? JGroup
    ??????????????????????????????? XMPP COMETD

    ]]>
    數(shù)據(jù)庫master/slave模式http://m.tkk7.com/mphome/archive/2007/12/12/167327.html昨夜人生昨夜人生Wed, 12 Dec 2007 12:40:00 GMThttp://m.tkk7.com/mphome/archive/2007/12/12/167327.htmlhttp://m.tkk7.com/mphome/comments/167327.htmlhttp://m.tkk7.com/mphome/archive/2007/12/12/167327.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/167327.htmlhttp://m.tkk7.com/mphome/services/trackbacks/167327.html采用ReplicationConnection鏈接后,設(shè)置Connection.setReadOnly(true)時,讀寫可以從master,slave中任意讀寫。
    設(shè)置Connection.setReadOnly(false)只能從master中讀取。
    采用此方法可以做到只在master上更新數(shù)據(jù),利用slave來讀取數(shù)據(jù)。
    詳細(xì)介紹
    http://dev.mysql.com/doc/refman/5.1/en/connector-j-reference-replication-connection.html




    ]]>
    java中double運(yùn)算的問題http://m.tkk7.com/mphome/archive/2007/12/10/166783.html昨夜人生昨夜人生Mon, 10 Dec 2007 12:47:00 GMThttp://m.tkk7.com/mphome/archive/2007/12/10/166783.htmlhttp://m.tkk7.com/mphome/comments/166783.htmlhttp://m.tkk7.com/mphome/archive/2007/12/10/166783.html#Feedback1http://m.tkk7.com/mphome/comments/commentRss/166783.htmlhttp://m.tkk7.com/mphome/services/trackbacks/166783.htmldouble t1=34.0;
    double t2=2.55
    System.out.println(t1*t2);
    結(jié)果不等于 86.7

    解決方案 采用 java.math.BigDecimal
    此處有一個通用類

    1. import ?java.math.BigDecimal; ??
    2. ??
    3. /**?*/ /** ?
    4. *?由于Java的簡單類型不能夠精確的對浮點(diǎn)數(shù)進(jìn)行運(yùn)算,這個工具類提供精 ?
    5. *?確的浮點(diǎn)數(shù)運(yùn)算,包括加減乘除和四舍五入。 ?
    6. */ ??
    7. ??
    8. public ? class ?Arith{ ??
    9. ??
    10. //默認(rèn)除法運(yùn)算精度 ??
    11. ??
    12. private ? static ? final ? int ?DEF_DIV_SCALE?=? 10 ; ??
    13. ??
    14. //這個類不能實例化 ??
    15. ??
    16. private ?Arith(){ ??
    17. ??
    18. } ??
    19. ??
    20. /**?*/ /** ?
    21. *?提供精確的加法運(yùn)算。 ?
    22. *?@param?v1?被加數(shù) ?
    23. *?@param?v2?加數(shù) ?
    24. *?@return?兩個參數(shù)的和 ?
    25. */ ??
    26. ??
    27. public ? static ? double ?add( double ?v1, double ?v2){ ??
    28. ??
    29. BigDecimal?b1?=? new ?BigDecimal(Double.toString(v1)); ??
    30. ??
    31. BigDecimal?b2?=? new ?BigDecimal(Double.toString(v2)); ??
    32. ??
    33. return ?b1.add(b2).doubleValue(); ??
    34. ??
    35. } ??
    36. ??
    37. /**?*/ /** ?
    38. *?提供精確的減法運(yùn)算。 ?
    39. *?@param?v1?被減數(shù) ?
    40. *?@param?v2?減數(shù) ?
    41. *?@return?兩個參數(shù)的差 ?
    42. */ ??
    43. ??
    44. public ? static ? double ?sub( double ?v1, double ?v2){ ??
    45. ??
    46. BigDecimal?b1?=? new ?BigDecimal(Double.toString(v1)); ??
    47. ??
    48. BigDecimal?b2?=? new ?BigDecimal(Double.toString(v2)); ??
    49. ??
    50. return ?b1.subtract(b2).doubleValue(); ??
    51. ??
    52. } ??
    53. ??
    54. /**?*/ /** ?
    55. *?提供精確的乘法運(yùn)算。 ?
    56. *?@param?v1?被乘數(shù) ?
    57. *?@param?v2?乘數(shù) ?
    58. *?@return?兩個參數(shù)的積 ?
    59. */ ??
    60. ??
    61. public ? static ? double ?mul( double ?v1, double ?v2){ ??
    62. ??
    63. BigDecimal?b1?=? new ?BigDecimal(Double.toString(v1)); ??
    64. ??
    65. BigDecimal?b2?=? new ?BigDecimal(Double.toString(v2)); ??
    66. ??
    67. return ?b1.multiply(b2).doubleValue(); ??
    68. ??
    69. } ??
    70. ??
    71. /**?*/ /** ?
    72. *?提供(相對)精確的除法運(yùn)算,當(dāng)發(fā)生除不盡的情況時,精確到 ?
    73. *?小數(shù)點(diǎn)以后10位,以后的數(shù)字四舍五入。 ?
    74. *?@param?v1?被除數(shù) ?
    75. *?@param?v2?除數(shù) ?
    76. *?@return?兩個參數(shù)的商 ?
    77. */ ??
    78. ??
    79. public ? static ? double ?div( double ?v1, double ?v2){ ??
    80. ??
    81. return ?div(v1,v2,DEF_DIV_SCALE); ??
    82. ??
    83. } ??
    84. ??
    85. /**?*/ /** ?
    86. *?提供(相對)精確的除法運(yùn)算。當(dāng)發(fā)生除不盡的情況時,由scale參數(shù)指 ?
    87. *?定精度,以后的數(shù)字四舍五入。 ?
    88. *?@param?v1?被除數(shù) ?
    89. *?@param?v2?除數(shù) ?
    90. *?@param?scale?表示表示需要精確到小數(shù)點(diǎn)以后幾位。 ?
    91. *?@return?兩個參數(shù)的商 ?
    92. */ ??
    93. ??
    94. public ? static ? double ?div( double ?v1, double ?v2, int ?scale){ ??
    95. ??
    96. if (scale< 0 ){ ??
    97. ??
    98. throw ? new ?IllegalArgumentException( ??
    99. ??
    100. "The?scale?must?be?a?positive?integer?or?zero" ); ??
    101. ??
    102. } ??
    103. ??
    104. BigDecimal?b1?=? new ?BigDecimal(Double.toString(v1)); ??
    105. ??
    106. BigDecimal?b2?=? new ?BigDecimal(Double.toString(v2)); ??
    107. ??
    108. return ?b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue(); ??
    109. ??
    110. } ??
    111. ??
    112. /**?*/ /** ?
    113. *?提供精確的小數(shù)位四舍五入處理。 ?
    114. *?@param?v?需要四舍五入的數(shù)字 ?
    115. *?@param?scale?小數(shù)點(diǎn)后保留幾位 ?
    116. *?@return?四舍五入后的結(jié)果 ?
    117. */ ??
    118. ??
    119. public ? static ? double ?round( double ?v, int ?scale){ ??
    120. ??
    121. if (scale< 0 ){ ??
    122. ??
    123. throw ? new ?IllegalArgumentException( ??
    124. ??
    125. "The?scale?must?be?a?positive?integer?or?zero" ); ??
    126. ??
    127. } ??
    128. ??
    129. BigDecimal?b?=? new ?BigDecimal(Double.toString(v)); ??
    130. ??
    131. BigDecimal?one?=? new ?BigDecimal( "1" ); ??
    132. ??
    133. return ?b.divide(one,scale,BigDecimal.ROUND_HALF_UP).doubleValue(); ??
    134. ??
    135. } ??
    136. ??
    137. } ??


    ]]>
    eclipse快捷鍵大全http://m.tkk7.com/mphome/archive/2007/12/03/165021.html昨夜人生昨夜人生Mon, 03 Dec 2007 14:05:00 GMThttp://m.tkk7.com/mphome/archive/2007/12/03/165021.htmlhttp://m.tkk7.com/mphome/comments/165021.htmlhttp://m.tkk7.com/mphome/archive/2007/12/03/165021.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/165021.htmlhttp://m.tkk7.com/mphome/services/trackbacks/165021.htmleclipse快捷鍵大全??????????????????????????????????????

    eclipse快捷鍵大全

    1. 常用快捷鍵
    (1)Ctrl+Space
    說明:內(nèi)容助理。提供對方法,變量,參數(shù),javadoc等得提示,應(yīng)運(yùn)在多種場合,總之需要提示的時候可先按此快捷鍵。
    注:避免輸入法的切換設(shè)置與此設(shè)置沖突

    (2)Ctrl+Shift+Space
    說明:變量提示
    (3)Ctrl+/
    說明:添加/消除//注釋,在eclipse2.0中,消除注釋為Ctrl+\

    (4)Ctrl+Shift+/
    說明:添加/* */注釋

    (5)Ctrl+Shift+\
    說明:消除/* */注釋

    (6)Ctrl+Shift+F
    說明:自動格式化代碼

    (7)Ctrl+1
    說明:批量修改源代碼中的變量名,此外還可用在catch塊上.

    (8)Ctril+F6
    說明:界面切換

    (9)Ctril+Shift+M
    說明:查找所需要得包

    (10)Ctril+Shift+O
    說明:自動引入所需要得包

    (11)Ctrl+Alt+S
    說明:源代碼得快捷菜單。其中的Generate getters and setters 和 Surround with try/catch
    block比較常用.建議把它們添加為快捷鍵.快捷鍵設(shè)置在windows->preferences->Workbench->Keys

    2. 快捷鍵列表

    編輯
    作用域 功能 快捷鍵
    全局 查找并替換 Ctrl+F
    文本編輯器 查找上一個 Ctrl+Shift+K
    文本編輯器 查找下一個 Ctrl+K
    全局 撤銷 Ctrl+Z
    全局 復(fù)制 Ctrl+C
    全局 恢復(fù)上一個選擇 Alt+Shift+↓
    全局 剪切 Ctrl+X
    全局 快速修正 Ctrl1+1
    全局 內(nèi)容輔助 Alt+/
    全局 全部選中 Ctrl+A
    全局 刪除 Delete
    全局 上下文信息 Alt+?Alt+Shift+?Ctrl+Shift+Space
    Java編輯器 顯示工具提示描述 F2
    Java編輯器 選擇封裝元素 Alt+Shift+↑
    Java編輯器 選擇上一個元素 Alt+Shift+←
    Java編輯器 選擇下一個元素 Alt+Shift+→
    文本編輯器 增量查找 Ctrl+J
    文本編輯器 增量逆向查找 Ctrl+Shift+J
    全局 粘貼 Ctrl+V
    全局 重做 Ctrl+Y

    查看
    作用域 功能 快捷鍵
    全局 放大 Ctrl+=
    全局 縮小 Ctrl+-

    窗口
    作用域 功能 快捷鍵
    全局 激活編輯器 F12
    全局 切換編輯器 Ctrl+Shift+W
    全局 上一個編輯器 Ctrl+Shift+F6
    全局 上一個視圖 Ctrl+Shift+F7
    全局 上一個透視圖 Ctrl+Shift+F8
    全局 下一個編輯器 Ctrl+F6
    全局 下一個視圖 Ctrl+F7
    全局 下一個透視圖 Ctrl+F8
    文本編輯器 顯示標(biāo)尺上下文菜單 Ctrl+W
    全局 顯示視圖菜單 Ctrl+F10
    全局 顯示系統(tǒng)菜單 Alt+-

    導(dǎo)航
    作用域 功能 快捷鍵
    Java編輯器 打開結(jié)構(gòu) Ctrl+F3
    全局 打開類型 Ctrl+Shift+T
    全局 打開類型層次結(jié)構(gòu) F4
    全局 打開聲明 F3
    全局 打開外部javadoc Shift+F2
    全局 打開資源 Ctrl+Shift+R
    全局 后退歷史記錄 Alt+←
    全局 前進(jìn)歷史記錄 Alt+→
    全局 上一個 Ctrl+,
    全局 下一個 Ctrl+.
    Java編輯器 顯示大綱 Ctrl+O
    全局 在層次結(jié)構(gòu)中打開類型 Ctrl+Shift+H
    全局 轉(zhuǎn)至匹配的括號 Ctrl+Shift+P
    全局 轉(zhuǎn)至上一個編輯位置 Ctrl+Q
    Java編輯器 轉(zhuǎn)至上一個成員 Ctrl+Shift+↑
    Java編輯器 轉(zhuǎn)至下一個成員 Ctrl+Shift+↓
    文本編輯器 轉(zhuǎn)至行 Ctrl+L

    搜索
    作用域 功能 快捷鍵
    全局 出現(xiàn)在文件中 Ctrl+Shift+U
    全局 打開搜索對話框 Ctrl+H
    全局 工作區(qū)中的聲明 Ctrl+G
    全局 工作區(qū)中的引用 Ctrl+Shift+G

    文本編輯
    作用域 功能 快捷鍵
    文本編輯器 改寫切換 Insert
    文本編輯器 上滾行 Ctrl+↑
    文本編輯器 下滾行 Ctrl+↓

    文件
    作用域 功能 快捷鍵
    全局 保存 Ctrl+X Ctrl+S
    全局 打印 Ctrl+P
    全局 關(guān)閉 Ctrl+F4
    全局 全部保存 Ctrl+Shift+S
    全局 全部關(guān)閉 Ctrl+Shift+F4
    全局 屬性 Alt+Enter
    全局 新建 Ctrl+N

    項目
    作用域 功能 快捷鍵
    全局 全部構(gòu)建 Ctrl+B

    源代碼
    作用域 功能 快捷鍵
    Java編輯器 格式化 Ctrl+Shift+F
    Java編輯器 取消注釋 Ctrl+\
    Java編輯器 注釋 Ctrl+/
    Java編輯器 添加導(dǎo)入 Ctrl+Shift+M
    Java編輯器 組織導(dǎo)入 Ctrl+Shift+O
    Java編輯器 使用try/catch塊來包圍 未設(shè)置,太常用了,所以在這里列出,建議自己設(shè)置。也可以使用Ctrl+1自動修正。

    運(yùn)行
    作用域 功能 快捷鍵
    全局 單步返回 F7
    全局 單步跳過 F6
    全局 單步跳入 F5
    全局 單步跳入選擇 Ctrl+F5
    全局 調(diào)試上次啟動 F11
    全局 繼續(xù) F8
    全局 使用過濾器單步執(zhí)行 Shift+F5
    全局 添加/去除斷點(diǎn) Ctrl+Shift+B
    全局 顯示 Ctrl+D
    全局 運(yùn)行上次啟動 Ctrl+F11
    全局 運(yùn)行至行 Ctrl+R
    全局 執(zhí)行 Ctrl+U

    重構(gòu)
    作用域 功能 快捷鍵
    全局 撤銷重構(gòu) Alt+Shift+Z
    全局 抽取方法 Alt+Shift+M
    全局 抽取局部變量 Alt+Shift+L
    全局 內(nèi)聯(lián) Alt+Shift+I
    全局 移動 Alt+Shift+V
    全局 重命名 Alt+Shift+R
    全局 重做 Alt+Shift+Y



    ]]>
    轉(zhuǎn)載:JAVA如何調(diào)用DOS命令 http://m.tkk7.com/mphome/archive/2007/12/03/165019.html昨夜人生昨夜人生Mon, 03 Dec 2007 14:02:00 GMThttp://m.tkk7.com/mphome/archive/2007/12/03/165019.htmlhttp://m.tkk7.com/mphome/comments/165019.htmlhttp://m.tkk7.com/mphome/archive/2007/12/03/165019.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/165019.htmlhttp://m.tkk7.com/mphome/services/trackbacks/165019.html用Java編寫應(yīng)用時,有時需要在程序中調(diào)用另一個現(xiàn)成的可執(zhí)行程序或系統(tǒng)命令,這時可以通過組合使用Java提供的Runtime類和Process類的方法實現(xiàn)。下面是一種比較典型的程序模式:
    ...
    Process process = Runtime.getRuntime().exec(".\\p.exe");
    process.waitfor( );
    ...
    在上面的程序中,第一行的“.\\p.exe”是要執(zhí)行的程序名,Runtime.getRuntime()返回當(dāng)前應(yīng)用程序的Runtime對象,該對象的exec()方法指示Java虛擬機(jī)創(chuàng)建一個子進(jìn)程執(zhí)行指定的可執(zhí)行程序,并返回與該子進(jìn)程對應(yīng)的Process對象實例。通過Process可以控制該子進(jìn)程的執(zhí)行或獲取該子進(jìn)程的信息。第二條語句的目的等待子進(jìn)程完成再往下執(zhí)行。
    但在windows平臺上,如果處理不當(dāng),有時并不能得到預(yù)期的結(jié)果。下面是筆者在實際編程中總結(jié)的幾種需要注意的情況:
    1、執(zhí)行DOS的內(nèi)部命令
    如果要執(zhí)行一條DOS內(nèi)部命令,有兩種方法。一種方法是把命令解釋器包含在exec()的參數(shù)中。例如,執(zhí)行dir命令,在NT上, 可寫成exec("cmd.exe /c dir"),在windows 95/98下,可寫成“command.exe /c dir”,其中參數(shù)“/c”表示命令執(zhí)行后關(guān)閉Dos立即關(guān)閉窗口。另一種方法是,把內(nèi)部命令放在一個批命令my_dir.bat文件中,在Java程序中寫成exec("my_dir.bat")。如果僅僅寫成exec("dir"),Java虛擬機(jī)則會報運(yùn)行時錯誤。前一種方法要保證程序的可移植性,需要在程序中讀取運(yùn)行的操作系統(tǒng)平臺,以調(diào)用不同的命令解釋器。后一種方法則不需要做更多的處理。
    2、打開一個不可執(zhí)行的文件
    打開一個不可執(zhí)行的文件,但該文件存在關(guān)聯(lián)的應(yīng)用程序,則可以有兩種方式。 以打開一個word文檔a.doc文件為例,Java中可以有以下兩種寫法:
    exec("start .\\a.doc");
    exec(" c:\\Program Files\\Microsoft Office\\office\\winword.exe .\\a.doc");
    顯然,前一種方法更為簡捷方便。
    3、執(zhí)行一個有標(biāo)準(zhǔn)輸出的DOS可執(zhí)行程序
    在windows平臺上,運(yùn)行被調(diào)用程序的DOS窗口在程序執(zhí)行完畢后往往并不會自動關(guān)閉,從而導(dǎo)致Java應(yīng)用程序阻塞在waitfor( )。導(dǎo)致該現(xiàn)象的一個可能的原因是,該可執(zhí)行程序的標(biāo)準(zhǔn)輸出比較多,而運(yùn)行窗口的標(biāo)準(zhǔn)輸出緩沖區(qū)不夠大。解決的辦法是,利用Java提供的Process類提供的方法讓Java虛擬機(jī)截獲被調(diào)用程序的DOS運(yùn)行窗口的標(biāo)準(zhǔn)輸出,在waitfor()命令之前讀出窗口的標(biāo)準(zhǔn)輸出緩沖區(qū)中的內(nèi)容。一段典型的程序如下:
    ...
    String ls_1;
    Process process = Runtime.getRuntime().exec("cmd /c dir \\windows");
    BufferedReader bufferedReader = new BufferedReader( \
    new InputStreamReader(process.getInputStream());
    while ( (ls_1=bufferedReader.readLine()) != null)
    System.out.println(ls_1);

    process.waitfor( );
    ...

    以上內(nèi)容為轉(zhuǎn)載~下面內(nèi)容為原創(chuàng)!

    今天在做客戶端程序的自動更新,簡單描述一下,就是從服務(wù)器上將更新包下載下來,然后在本地解壓縮,最后刪掉~功能很簡單~

    但是問題出在使用JAVA的ZIP模塊做文件的解壓縮不是想象的那么簡單,資源需要釋放,一個不小心就沒有辦法刪除掉原有ZIP文件了~資源的占用確實是個大問題,但是好在,客戶端程序更新完是要重啟的,一切都煙消云散了~對于刪除不掉ZIP文件的問題,我也流氓一下~用DEL硬刪除~此處一定要注意!

    Process process = Runtime.getRuntime().exec("cmd /c del f:\\aaa.doc");
    這樣的調(diào)用是沒有問題~

    Process process = Runtime.getRuntime().exec("del f:\\aaa.doc");
    這樣寫是不可能對的~

    記錄一下,警告一下后人!


    Ref from:http://m.tkk7.com/leeguannan/archive/2007/11/29/164044.html



    ]]>
    11月12日http://m.tkk7.com/mphome/archive/2007/11/13/160072.html昨夜人生昨夜人生Mon, 12 Nov 2007 16:08:00 GMThttp://m.tkk7.com/mphome/archive/2007/11/13/160072.htmlhttp://m.tkk7.com/mphome/comments/160072.htmlhttp://m.tkk7.com/mphome/archive/2007/11/13/160072.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/160072.htmlhttp://m.tkk7.com/mphome/services/trackbacks/160072.html?????????晚上使用apache的ad壓力測試竟然把公司的網(wǎng)站給搞癱了,出乎意料.學(xué)了一招以后看誰不順眼,給他來一下。這個星期要請別人去吃大餐,,唉可憐的我的那點(diǎn)工資還有我的張學(xué)友演唱會門票。
    ????????

    ]]>
    菩提本無樹,明鏡亦非臺,本來無一物,何處惹塵埃http://m.tkk7.com/mphome/archive/2007/09/03/142464.html昨夜人生昨夜人生Mon, 03 Sep 2007 15:00:00 GMThttp://m.tkk7.com/mphome/archive/2007/09/03/142464.htmlhttp://m.tkk7.com/mphome/comments/142464.htmlhttp://m.tkk7.com/mphome/archive/2007/09/03/142464.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/142464.htmlhttp://m.tkk7.com/mphome/services/trackbacks/142464.html???? 9月3日是開學(xué)的第一天,很多新生都開始上課啦,怎么感覺現(xiàn)在的大一新生長得都比較成熟啊,看上去和大四的學(xué)生精神面貌,個頭都差不多??粗麄冞€真挺懷念都大學(xué)的時候,讀大學(xué)和讀研究生還真是區(qū)別很大。主要還是人開始考慮現(xiàn)實的東西比較多了。我還真挺佩服那些自由職業(yè)者,需要錢的時候就找分工作干兩個月,掙夠了錢繼續(xù)開始旅游或干自己想做的事,這還真不是普通人能做到的。
    ????

    ]]>
    師弟要來了,新的學(xué)年http://m.tkk7.com/mphome/archive/2007/08/31/141567.html昨夜人生昨夜人生Thu, 30 Aug 2007 16:02:00 GMThttp://m.tkk7.com/mphome/archive/2007/08/31/141567.htmlhttp://m.tkk7.com/mphome/comments/141567.htmlhttp://m.tkk7.com/mphome/archive/2007/08/31/141567.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/141567.htmlhttp://m.tkk7.com/mphome/services/trackbacks/141567.html???? 每天下班吃飯是一個大問題,要不食堂就是關(guān)門要不就沒菜,老吃方便面,太慘啦。回來的時候碰到女同學(xué),問到她怎么解決吃飯時,她竟然說在寢室弄飯,太強(qiáng)啦。怎么我沒有分到和她一個寢室啊。呵呵,這是不可能的?。。?br />??? 項目需求開始看JBPM,看了一下午感覺還是挺簡單的,網(wǎng)上教程挺多,具體怎樣利用jbpm定制流程是搞清除啦,明天要開始結(jié)合strut來做做簡單的公文流轉(zhuǎn)看。
    ??? 晚上抽空看了《破綻》,發(fā)覺里面的女主角羅莎蒙派克(其實戲份很少的)挺漂亮的,是偶喜歡的類型,記錄一下。

    ]]>
    差距不是一日形成的http://m.tkk7.com/mphome/archive/2007/08/29/141100.html昨夜人生昨夜人生Wed, 29 Aug 2007 13:55:00 GMThttp://m.tkk7.com/mphome/archive/2007/08/29/141100.htmlhttp://m.tkk7.com/mphome/comments/141100.htmlhttp://m.tkk7.com/mphome/archive/2007/08/29/141100.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/141100.htmlhttp://m.tkk7.com/mphome/services/trackbacks/141100.html?????????? 最近老在寫文檔,為了畫流程圖到網(wǎng)上找寫素材時無意中逛到了幾個在微軟工作人的blog而且還都是做UI設(shè)計。牛人果然是不同,blog的風(fēng)格非常獨(dú)特,從blog的字里行間中能體會出他們對工作的那份激情??磥碓诤玫墓ぷ鳝h(huán)境中對個人的提高是巨大的。
    ?????????? 還有件好玩的事,中午的我在廁所方便碰到同事,隨便聊起了上午股票的行情,聊得真起勁的時候,廁所的單間突然走出老總,我和同事都吃了一驚,但老總也沒說什么,看了我們一眼就走了。頓時我們無語,我到?jīng)]什么,反正是實習(xí)生,拿得錢又少,管他老總怎么想??晌腋杏X出來同事肯定要郁悶半天???,現(xiàn)在才感覺到實習(xí)生也是有好處的。
    ????????? 無意中翻看大學(xué)同學(xué)的QQ簽名,發(fā)現(xiàn)原來一個比較悶騷的室友的簽名非常有感覺,趕緊copy下來(不是為了誰,只是沒有緣故的傷感,這就像某些人見到一個和分手戀人很像的背影而潛然淚下。和軟弱無關(guān)).?有點(diǎn)懷疑是抄的,那天問問看。
    ?????????

    ]]>
    無聊的一天http://m.tkk7.com/mphome/archive/2007/08/26/139634.html昨夜人生昨夜人生Sun, 26 Aug 2007 14:08:00 GMThttp://m.tkk7.com/mphome/archive/2007/08/26/139634.htmlhttp://m.tkk7.com/mphome/comments/139634.htmlhttp://m.tkk7.com/mphome/archive/2007/08/26/139634.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/139634.htmlhttp://m.tkk7.com/mphome/services/trackbacks/139634.html??????????明天又開始上班,聽說移動的需求又加了不少,媽的又要修改標(biāo)書,什么時候才能搞完啊 。老大,我是實習(xí)生不要叫我老寫文檔好 不好啊。
    ???????????為什么我老是對某件事不能專注下去,即時是玩游戲也很難有非常強(qiáng)的耐心通關(guān),但在沒有開始卻興趣非常的強(qiáng)。我很懷疑是不是? 很少人會這樣。
    ????????? 公司要進(jìn)新人啦,好像有女的哦,暗喜!??!要知道我們公司連做美工的都是男的,老總可能是看不過去啦,調(diào)節(jié)一下男女比例,雖然我也只是想看看,養(yǎng)眼而已。
    ?????????

    ]]>
    死灰復(fù)燃8.24http://m.tkk7.com/mphome/archive/2007/08/24/139129.html昨夜人生昨夜人生Fri, 24 Aug 2007 08:36:00 GMThttp://m.tkk7.com/mphome/archive/2007/08/24/139129.htmlhttp://m.tkk7.com/mphome/comments/139129.htmlhttp://m.tkk7.com/mphome/archive/2007/08/24/139129.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/139129.htmlhttp://m.tkk7.com/mphome/services/trackbacks/139129.html???????????? 8月24日,上班也有一個月啦,本以為剛來實習(xí)就可以立馬做項目,哪知道剛來開始就看文檔,看了一個星期后,又來寫投標(biāo)書,大失所望啊。每天只好之間看看教程啦。
    ??????????? 今天主要將WAP程序設(shè)計看了一遍,畢竟下一個項目是有關(guān)WAP的,臨時抱佛腳吧。感覺WAP還是挺簡單的,只不過和HTML在標(biāo)簽上有說區(qū)別。而且在給變量賦值在=前后竟然不能有空格,不知道那個傻子設(shè)計的,怪不得WAP發(fā)展的不是很好。
    ??????????? 最近正在看JBOSS和MySee,關(guān)于JBOSS還真不知道從那里下手,整體的設(shè)計理念是了解,但具體如何應(yīng)用挺費(fèi)解的。要好好象師兄請教一下。Mysee開源的東東,也已經(jīng)看看很久啦 ,同志要加緊啊 。
    ??????????? 提醒:公司空調(diào)很冷,以后要記得帶長袖衣服。???
    ??????????????? 2007.8.24

    ]]>
    Tomcat 亂碼的最終解決方案http://m.tkk7.com/mphome/archive/2006/12/03/85107.html昨夜人生昨夜人生Sat, 02 Dec 2006 16:01:00 GMThttp://m.tkk7.com/mphome/archive/2006/12/03/85107.htmlhttp://m.tkk7.com/mphome/comments/85107.htmlhttp://m.tkk7.com/mphome/archive/2006/12/03/85107.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/85107.htmlhttp://m.tkk7.com/mphome/services/trackbacks/85107.html1.解決POST傳送亂碼的問題.
    <filter>
    ??? <filter-name>Set Character Encoding</filter-name>
    ??? <filter-class>com.util.filters.SetCharacterEncodingFilter</filter-class>
    ??? <init-param>
    ????? <param-name>encoding</param-name>
    ????? <param-value>UTF-8</param-value>
    ??? </init-param>
    ? </filter>
    ? <filter-mapping>
    ??? <filter-name>Set Character Encoding</filter-name>
    ??? <url-pattern>/*</url-pattern>
    ? </filter-mapping>

    SetCharacterEncodingFilter:

    package com.util.filters;

    import java.io.IOException;
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.UnavailableException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;


    public class SetCharacterEncodingFilter
    ??? implements Filter {


    ? protected String encoding = null;

    ? protected FilterConfig filterConfig = null;

    ? protected boolean ignore = true;

    ? public void destroy() {

    ??? this.encoding = null;
    ??? this.filterConfig = null;

    ? }

    ? public void doFilter(ServletRequest request, ServletResponse response,
    ?????????????????????? FilterChain chain) throws IOException, ServletException {

    ??? // Conditionally select and set the character encoding to be used
    ?? request.setCharacterEncoding("GBK");
    ??? // Pass control on to the next filter
    ??? chain.doFilter(request, response);

    ? }

    ? public void init(FilterConfig filterConfig) throws ServletException {

    ??? this.filterConfig = filterConfig;
    ??? this.encoding = filterConfig.getInitParameter("encoding");
    ??? String value = filterConfig.getInitParameter("ignore");
    ??? if (value == null) {
    ????? this.ignore = true;
    ??? }
    ??? else if (value.equalsIgnoreCase("true")) {
    ????? this.ignore = true;
    ??? }
    ??? else if (value.equalsIgnoreCase("yes")) {
    ????? this.ignore = true;
    ??? }
    ??? else {
    ????? this.ignore = false;
    ??? }

    ? }

    ? protected String selectEncoding(ServletRequest request) {

    ??? return (this.encoding);

    ? }

    }

    2.解決GET方式出現(xiàn)亂碼的方案


    tomcat的server.xml中
    <Connector connectionTimeout="20000" maxSpareThreads="75" maxThreads="150" minSpareThreads="25" port="8080" redirectPort="8443" uRIEncoding="UTF-8" useBodyEncodingForURI="true">
    </Connector>
    注意其中的useBodyEncodingForURI="true"這句是是解決問題的關(guān)鍵,但缺省情況下沒有,自己加進(jìn)去。
    然后再用Filter方案解決 解決GET的問題

    3.亂碼字符轉(zhuǎn)換 
      byte[] bytes = str.getBytes("ISO8859-1");
    ??? String dept=new String(bytes);

    AJAX
    在用XMLHttpRequest發(fā)送請求時如用post方式傳送數(shù)據(jù),容易出現(xiàn)中文亂碼問題!
    在Ajax中,默認(rèn)的編碼方式是UTF-8,所以在服務(wù)器端用request.setCharacterEncoding("UTF-8");(對于java言,其它語言可能類似方法)設(shè)置編碼即可解決大部份的編碼問題!

    ?對于服務(wù)器端返回的XML文件在用responseXML讀取時也要注意編碼問題!

    以下是正確的處理方法:

    response.setCharacterEncoding("UTF-8");-----(1)
    PrintWriter out=response.getWriter();------(2)
    out.println("返回內(nèi)容");

    如上所示,如果1、2的先后順序發(fā)生變化就會產(chǎn)生亂碼!



    ]]>
    我又來拉http://m.tkk7.com/mphome/archive/2006/11/29/84197.html昨夜人生昨夜人生Tue, 28 Nov 2006 16:49:00 GMThttp://m.tkk7.com/mphome/archive/2006/11/29/84197.htmlhttp://m.tkk7.com/mphome/comments/84197.htmlhttp://m.tkk7.com/mphome/archive/2006/11/29/84197.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/84197.htmlhttp://m.tkk7.com/mphome/services/trackbacks/84197.html   今天終于有一點(diǎn)想通了 ,路是自己選的,還是盡量將現(xiàn)在的路走好.將來的事留給明天吧.

       送一段比較現(xiàn)實的格言,只要有錢,年齡不是問題,身高不是距離.

       操作CSV文件有用的兩個類:CSVprinter,CsvDriver.

    ?getOutputStream() has already been called for this response問題的解決?????

    在jsp向頁面輸出圖片的時候,使用response.getOutputStream()會有這樣的提示:java.lang.IllegalStateException:getOutputStream() has already been called for this response,會拋出Exception

    原因一:
    ?JSP默認(rèn)的輸出流為PrintWriter ,即<% %>以外的東西所默認(rèn)的輸出方式,如果你嘗試在JSP中使用ServletOutputStream就會引起錯誤.要嘛直接改用Servlet輸出(復(fù)寫service方法),要嘛刪除除%><%中的任何東西(包括HTML標(biāo)簽,空格,回車等東西)應(yīng)該就可以。
    對于這樣的情況應(yīng)該這樣來解決,刪除%><%之間的所有內(nèi)容包括空格和換行符,最后也要消除空格和換行符,最好再加上一句response.reset()。
    原因二:
    ?????
    在J2EE的API參考里有這么個:

    ServletResponse的getWriter()方法里會拋出這個異常,

    IllegalStateException - if the getOutputStream method has already been called
    for this response object

    而它的getOutputStream()方法里會拋出這個異常.

    IllegalStateException - if the getOutputStream method has already been called for this response object

    并且兩者的函數(shù)申明里都有這么樣的一句
    Either this method or getOutputStream() may be called to write the body, not both.
    Either this method or getWriter() may be called to write the body, not both.

    ?以上說明也解釋了為什么在往頁面中寫入圖片的時候要使用如下循環(huán)格式
    OutputStream output=response.getOutputStream();
    ?while((len=in.read(b)) >0)
    ??{
    ??output.write(b,0,len); ?
    ??
    ??}
    ?output.flush();
    而不是把response.getOutputStream().write()放到循環(huán)體內(nèi)


    ]]>
    點(diǎn)滴11月21日http://m.tkk7.com/mphome/archive/2006/11/21/82475.html昨夜人生昨夜人生Tue, 21 Nov 2006 03:25:00 GMThttp://m.tkk7.com/mphome/archive/2006/11/21/82475.htmlhttp://m.tkk7.com/mphome/comments/82475.htmlhttp://m.tkk7.com/mphome/archive/2006/11/21/82475.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/82475.htmlhttp://m.tkk7.com/mphome/services/trackbacks/82475.htmlString s="c:\\dir\\file.txt";
    System.out.println(s.split(\\\\));
    得到c:?? dir?? file.txt

    終于找到了一片好的AOP教程拉,以前看的教程都是一上來就講Spring關(guān)于AOP的支持,根本看不明白.

    我認(rèn)為講Sping關(guān)于AOP的支持的話最好先學(xué)習(xí)一下ApestJ.個人建議,哈哈!

    貼上教程地址:http://www.easyjf.com/spring/spring2-aop.pdf



    ]]>
    記要http://m.tkk7.com/mphome/archive/2006/11/21/82407.html昨夜人生昨夜人生Mon, 20 Nov 2006 16:28:00 GMThttp://m.tkk7.com/mphome/archive/2006/11/21/82407.htmlhttp://m.tkk7.com/mphome/comments/82407.htmlhttp://m.tkk7.com/mphome/archive/2006/11/21/82407.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/82407.htmlhttp://m.tkk7.com/mphome/services/trackbacks/82407.htmljavascript判斷數(shù)字
    function isdigit(s)
    {
    var r,re;
    re = /\d*/i; //\d表示數(shù)字,*表示匹配多個數(shù)字
    r = s.match(re);
    return (r==s)?1:0;
    }

    request.getParameter("ss") 若ss不存在,值為null
    ??????????????????????????????????????? 若ss的value為空,返回值為""

    明天要看完AOP, 一定一定

    ]]>
    checkbox選取值的獲取http://m.tkk7.com/mphome/archive/2006/11/04/79008.html昨夜人生昨夜人生Fri, 03 Nov 2006 16:49:00 GMThttp://m.tkk7.com/mphome/archive/2006/11/04/79008.htmlhttp://m.tkk7.com/mphome/comments/79008.htmlhttp://m.tkk7.com/mphome/archive/2006/11/04/79008.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/79008.htmlhttp://m.tkk7.com/mphome/services/trackbacks/79008.html? ? ? <input ? type=checkbox ? name="a1" ? value="1">CPU ?
    ? ? ? <input ? type=checkbox ? name="a2" ? value="1">主板 ?
    ? ? ? <input ? type=checkbox ? name="a3" ? value="1">內(nèi)存 ?
    ? 以名稱為依據(jù)的判斷: ?
    ? ? ? request.getParameter("a1")==null ?
    ? ?
    ? 二:名稱相同,值不同 ?
    ? ? ? <input ? type=checkbox ? name="a" ? value="1">CPU ?
    ? ? ? <input ? type=checkbox ? name="a" ? value="2">主板 ?
    ? ? ? <input ? type=checkbox ? name="a" ? value="3">內(nèi)存 ?
    ? 以值為依據(jù)的判斷: ?
    ? ? ? String[] ? a ? = ? request.getParameterValues("a"); ?
    ? ? ? 看a數(shù)組中是否有相應(yīng)的值。如果選中"CPU",則a[0]="1"??

    ]]>
    commons-fileupload用戶指南(轉(zhuǎn))http://m.tkk7.com/mphome/archive/2006/11/03/78984.html昨夜人生昨夜人生Fri, 03 Nov 2006 12:51:00 GMThttp://m.tkk7.com/mphome/archive/2006/11/03/78984.htmlhttp://m.tkk7.com/mphome/comments/78984.htmlhttp://m.tkk7.com/mphome/archive/2006/11/03/78984.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/78984.htmlhttp://m.tkk7.com/mphome/services/trackbacks/78984.html根據(jù)你的應(yīng)用需求,fileupload可以有許多不同的使用方式。在最簡單的情況下,你可以調(diào)用一個簡單的方法來解析servlet請求,然后在他們提交到你的應(yīng)用時處理表單列表。在其它規(guī)模的終端上,你也可能決定將fileupload進(jìn)行自定義,以完全控制個別表單項存儲的方法。比如,你或許會將內(nèi)容流化來保存到數(shù)據(jù)中。
    在這里。我們將要描述fileupload的基本使用方法,然后解釋一些更簡單的,以及最常用的使用模式。fileupload的個性化在這里得到了描述。

    它怎么工作

    一個文件上傳請求由有序表單項的列表組成,這些表單是根據(jù)RFC1867來編碼的,是在html中基于表單的文件上傳。fileupload能解析這樣一個請求然后向你的應(yīng)用提供一個單獨(dú)的上傳表單項的列表。每一個這樣的表單項實現(xiàn)了FileItem接口,而不需要考慮它潛在的實現(xiàn)方式。每個文件的表單項擁有一系列可能對你的應(yīng)用有用的屬性,比如,每個項目都有一個名字和文件類型,你就可以提供一個InputStream來取它的數(shù)據(jù)。從另一方面說,你可能需要對這些選項進(jìn)行不同的處理,這個可以根據(jù)對這個選項是不是一個規(guī)則的表單項來判斷,即可以根據(jù)這個數(shù)據(jù)是否來源于普通的文本框或者一個簡單的html表單域,還是一個能被上傳的文件。FileItem接口提供了多種方法來判斷它是否是一個可上傳的文件,然后你就可以用最合適的方式來處理這些數(shù)據(jù)了。FileUpload使用FileItemFactory來創(chuàng)建新的文件項目。這正是給FileUpload帶來靈活性的原因。這個工廠最終控制每個項目的創(chuàng)建。默認(rèn)的工廠在內(nèi)存或者磁盤上保存了項目的數(shù)據(jù),這個可以根據(jù)項目的大小來定(例如,字節(jié)數(shù)據(jù))。當(dāng)然,這個動作可以通過自定義來滿足你應(yīng)用的需要。

    解析請求

    在你對要上傳的選項處理之前,很顯然的你得先解析這些請求本身。很直接的就是要確保這個請求是不是一個要上傳的文件,然而FileUpload使這一點(diǎn)簡單化了,你只需提供一個靜態(tài)的方法來做到這一點(diǎn)。

    //檢查是否是一個文件上傳請求
    boolean isMultipart = FileUpload.isMultipartContent(request);


    現(xiàn)在我們就可以準(zhǔn)備解析這個請求到一個備選的選項了。解析的結(jié)果是一個文件選項的List,每個這樣的選項都實現(xiàn)了FileItem接口,處理這些選項將在下面得到討論。

    最簡單的情況

    最簡單的使用場景可以參照下面:

    • 被上傳得選項必須以適度的大小駐留在內(nèi)存中;
    • 比較大的文件上傳選項必須寫入到磁盤的臨時文件中去;
    • 大文件上傳請求必須不被允許;
    • 默認(rèn)的駐留內(nèi)存的選項的最大大小,最大允許的上傳文件請求,和臨時文件的存儲地方是可以接受的;

    在這種情景下處理這樣一個請求并不是很簡單的:


    //創(chuàng)建一個新的文件上傳句柄
    DiskFileUpload upload = new DiskFileUpload();
    //解析請求
    List /* FileItem */ items = upload.parseRequest(request);


    這就是所有我們需要做的,真的!
    解析的結(jié)果是一個文件項目的List,每一個都實現(xiàn)了FileItem接口。處理這些項目將在下面討論。

    練習(xí)更多的控制

    如果你的使用情景非常接近最簡單的使用方式,在上文中可以看到,但是你需要更多的控制臨界的大小和臨時文件的駐留地址,你可以使用DiskFileUpload類的方法來自定義這些動作,就像這樣:


    //創(chuàng)建一個新的文件上傳句柄
    DiskFileUpload upload = new DiskFileUpload();
    //設(shè)置上傳參數(shù)
    upload.setSizeThrehold(最大內(nèi)存大小);
    upload.setSizeMax(最大請求大小);
    upload.setRepositoryPath(臨時目錄);
    //解析請求
    List /* FileItem */ items = upload.parseRequest(request);


    當(dāng)然,每個配置方法都是獨(dú)立于其它的,但是如果你想一次就配置它們,你可以使用可選的parseRequest()方法,像這樣:


    // 建立一個新的文件上傳句柄
    DiskFileUpload upload = new DiskFileUpload();
    // 解析請求
    List /* FileItem */ items = upload.parseRequest(request,
    ??????? 內(nèi)存大小, 允許上傳的最大文件, 臨時目錄);


    如果你想更多地控制請求的解析,比如把上傳選項存儲到其它地方,例如,存到數(shù)據(jù)庫中-你可以參照自定義FileUpload。

    處理上傳選項

    一旦解析過程完畢,你就可以獲得一個文件選項的List,以便進(jìn)一步處理。在大多數(shù)情況下,你將會根據(jù)規(guī)則的表單域來不同地處理文件的上傳。所以你可能以這樣的方式來處理:


    // 處理上傳的選項
    Iterator iter = items.iterator();
    while (iter.hasNext()) {
    ??? FileItem item = (FileItem) iter.next();

    ??? if (item.isFormField()) {
    ??????? processFormField(item);
    ??? } else {
    ??????? processUploadedFile(item);
    ??? }
    }


    對于一個規(guī)則的表單域來說,你對它感興趣的可能就只有它的名字以及它的字符串值。你也會想到,處理它們是簡單的:


    //處理一個規(guī)則表單域
    if (item.isFormField()) {
    ??? String name = item.getFieldName();
    ??? String value = item.getString();
    ??? ...
    }


    而對于一個文件的上傳,在你處理它的內(nèi)容之前,可以有好多令你想知道的不同的東西,這里有一個采用了一些你可能感興趣的方法的例子


    // 處理一個文件上傳
    if (!item.isFormField()) {
    ??? String fieldName = item.getFieldName();
    ??? String fileName = item.getName();
    ??? String contentType = item.getContentType();
    ??? boolean isInMemory = item.isInMemory();
    ??? long sizeInBytes = item.getSize();
    ??? ...
    }


    對于這些上傳的文件,你一般不想通過內(nèi)存來存取它們,除非它們很小,或者你沒有其它好的方法,更進(jìn)一步,你想將內(nèi)容當(dāng)作文件流來處理,或者將整個文件寫到最終的地址。FileUpload提供了簡單的方法來完成這些 操作。


    // 處理一個文件上傳的情況
    if (writeToFile) {
    ??? File uploadedFile = new File(...);
    ??? item.write(uploadedFile);
    } else {
    ??? InputStream uploadedStream = item.getInputStream();
    ??? ...
    ??? uploadedStream.close();
    }


    注意到,在默認(rèn)的FileUpload的實現(xiàn)中,write()方法將嘗試把文件改名以將它保存到特定的地點(diǎn),如果數(shù)據(jù)已經(jīng)在臨時文件中了,如果重命名失敗,實際的復(fù)制文件就完成了(?),在其它原因看來,或者數(shù)據(jù)已經(jīng)在內(nèi)存中了。如果你的確需要在內(nèi)存中取上傳的數(shù)據(jù),你只需簡單的調(diào)用get()方法來把它當(dāng)作一個字符數(shù)組來獲得。



    // 在內(nèi)存中處理一個上傳的文件
    byte[] data = item.get();
    ...



    和殺毒軟件的相互作用

    當(dāng)web容器在運(yùn)行時,而殺毒軟件又同時運(yùn)行在同樣的系統(tǒng)上,這種情況下在應(yīng)用中使用FileUpload容易導(dǎo)致一些很難預(yù)料的事情.這部分將描述一些你可能要遇到的情況,我們會提供一些方法來處理它們。默認(rèn)的FileUpload實現(xiàn)將會使超過它在內(nèi)存中大小的上傳的選項寫入到磁盤。而當(dāng)這樣的文件關(guān)閉后,任何系統(tǒng)中的殺毒軟件都會被喚醒,然后去檢查它,然后會潛在地隔離這個文件--就是說,將它移動到一個不產(chǎn)生問題的特定地方。這樣一來,對開發(fā)者來說當(dāng)然是一個意外,因為剛剛上傳的文件將不能被處理了。從另一方面來說,小于設(shè)定的內(nèi)存大小的那些上傳的文件將被保持在內(nèi)存中,這樣一來,將不會被殺毒軟件所檢測到,這樣就有可能使病毒以某種方式駐留在了系統(tǒng)中了(雖然如果一旦它被寫入到磁盤,殺毒軟件就會定位并檢測到它)。一個通用的解決方法是在系統(tǒng)中專門設(shè)置一個目錄來存放這些上傳的文件,然后配置殺毒軟件忽略這個目錄。這樣將確保上傳的文件在系統(tǒng)中不被隔離,但是這樣就把掃描病毒的責(zé)任交給了應(yīng)用程序的開發(fā)者了。掃描這些上傳的文件的任務(wù)可以在外部的處理中實現(xiàn)。這樣可以將干凈的文件移動到一個“改進(jìn)”過的地方,或者也可以把殺毒集成到應(yīng)用中去。至于怎么將外部處理或集成病毒掃描到一個
    應(yīng)用,這個已經(jīng)超出了本文檔的討論范圍。

    下一步是什么

    希望這個頁面能提供給你一個好的意見,讓你在你自己的應(yīng)用中能使用FileUpload。更多關(guān)于這里介紹的方法,以及其它可用的方法,你可以參照api文檔。這里介紹的用法已經(jīng)可以滿足大多數(shù)的文件上傳的需要了,當(dāng)然,如果你還有更多的復(fù)雜的需求,使用它的靈活的自定義配置的能力,F(xiàn)ileUpload一定可以能夠幫助你。

    另一個實例:


    commons.fileupload實現(xiàn)文件的上傳,代碼如下:
    <%!
    ?//服務(wù)器端保存上傳文件的路徑
    ??? String saveDirectory = "g:\\upload\\";
    ??? // 臨時路徑 一旦文件大小超過getSizeThreshold()的值時數(shù)據(jù)存放在硬盤的目錄
    ??? String tmpDirectory = "g:\\upload\\tmp\\";
    ??? // 最多只允許在內(nèi)存中存儲的數(shù)據(jù)大小,單位:字節(jié)
    ??? int maxPostSize = 1024 * 1024;
    %>
    <%
    ??? // 文件內(nèi)容?
    ??? String FileDescription = null;
    ??? // 文件名(包括路徑)
    ??? String FileName = null;
    ??? // 文件大小
    ??? long FileSize = 0;
    ??? // 文件類型
    ??? String ContentType = null;

    %>

    <%
    ?? DiskFileUpload fu = new DiskFileUpload();
    ??? // 設(shè)置允許用戶上傳文件大小,單位:字節(jié)
    ?? fu.setSizeMax(200*1024*1024);
    ??? // 設(shè)置最多只允許在內(nèi)存中存儲的數(shù)據(jù),單位:字節(jié)
    ?? fu.setSizeThreshold(maxPostSize);
    ??? // 設(shè)置一旦文件大小超過getSizeThreshold()的值時數(shù)據(jù)存放在硬盤的目錄
    ?? fu.setRepositoryPath("g:\\upload\\tmp\\");
    ??? //開始讀取上傳信息 得到所有文件
    ?? try{
    ????? List fileItems = fu.parseRequest(request);
    ???? }catch(FileUploadException e){
    ???????? //這里異常產(chǎn)生的原因可能是用戶上傳文件超過限制、不明類型的文件等
    ???????? //自己處理的代碼
    ???? }
    %>
    <%
    ?? // 依次處理每個上傳的文件
    ?? Iterator iter = fileItems.iterator();
    ?? while (iter.hasNext()) {
    ???? FileItem item = (FileItem) iter.next();
    ?????? //忽略其他不是文件域的所有表單信息
    ???? if (!item.isFormField()) {
    ?????? String name = item.getName();
    ?????? long size = item.getSize();
    ?????? String? contentType = item.getContentType();
    ???? if((name==null||name.equals("")) && size==0)
    ?????? continue;
    %>
    <%
    ?? //保存上傳的文件到指定的目錄
    ? String[] names=StringUtils.split(name,"\\");? //對原來帶路徑的文件名進(jìn)行分割
    ?? name = names[names.length-1];
    ?? item.write(new File(saveDirectory+ name));
    ? }
    }
    %>
    ?下面是其簡單的使用場景:
    ?A、上傳項目只要足夠小,就應(yīng)該保留在內(nèi)存里。
    ?B、較大的項目應(yīng)該被寫在硬盤的臨時文件上。
    ?C、非常大的上傳請求應(yīng)該避免。
    ?D、限制項目在內(nèi)存中所占的空間,限制最大的上傳請求,并且設(shè)定臨時文件的位置。
    ?
    ?可以根據(jù)具體使用用servlet來重寫,具體參數(shù)配置可以統(tǒng)一放置到一配置文件
    ?



    ?文件的下載用servlet實現(xiàn)
    ????? public void doGet(HttpServletRequest request,
    ?????????????????????? HttpServletResponse response)
    ???? {
    ??????? ?String aFilePath = null;??? //要下載的文件路徑
    ???????? String aFileName = null;??? //要下載的文件名
    ???????? FileInputStream in = null;? //輸入流
    ???????? ServletOutputStream out = null;? //輸出流

    ???????? try
    ???{
    ???????? ?
    ???????????? aFilePath = getFilePath(request);
    ???????????? aFileName = getFileName(request);

    ???????????? response.setContentType(getContentType(aFileName) + "; charset=UTF-8");
    ???????????? response.setHeader("Content-disposition", "attachment; filename=" + aFileName);

    ???????????? in = new? FileInputStream(aFilePath + aFileName); //讀入文件
    ??????????? out = response.getOutputStream();
    ??????????? out.flush();
    ?????????? ?int aRead = 0;
    ?????????? while((aRead = in.read()) != -1 & in != null)
    ?????? ?{
    ???????????? out.write(aRead);
    ???????? }
    ?????????? out.flush();
    ????? }
    ?????? catch(Throwable e)
    ???? {
    ???? log.error("FileDownload doGet() IO error!",e);
    ????? }
    ???????? finally
    ???????? {
    ???????????? try
    ???????????? {
    ???????????????? in.close();
    ???????????????? out.close();
    ???????????? }
    ???????????? catch(Throwable e)
    ???????????? {
    ???????????? ?log.error("FileDownload doGet() IO close error!",e);
    ???????????? }
    ???????? }
    ???? }






    ]]>
    轉(zhuǎn)貼 jsp生成隨機(jī)圖片 http://m.tkk7.com/mphome/archive/2006/11/03/78809.html昨夜人生昨夜人生Thu, 02 Nov 2006 16:02:00 GMThttp://m.tkk7.com/mphome/archive/2006/11/03/78809.htmlhttp://m.tkk7.com/mphome/comments/78809.htmlhttp://m.tkk7.com/mphome/archive/2006/11/03/78809.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/78809.htmlhttp://m.tkk7.com/mphome/services/trackbacks/78809.html??? 原型參考ALIBABA http://china.alibaba.com/member/showimage 產(chǎ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)證碼不易被其它程序探測到
    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ù)出來的顏色相同,可能是因為種子太接近,所以只能直接生成
    ??? g.drawString(rand,13*i+6,16);
    }

    // 將認(rèn)證碼存入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>認(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="提交檢測"></td>
    </tr>
    </form>
    </body>
    </html>


    驗證的頁面check.jsp

    <%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
    <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>
    <%
    ?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>



    ]]>
    Blog開題http://m.tkk7.com/mphome/archive/2006/11/02/78785.html昨夜人生昨夜人生Thu, 02 Nov 2006 13:45:00 GMThttp://m.tkk7.com/mphome/archive/2006/11/02/78785.htmlhttp://m.tkk7.com/mphome/comments/78785.htmlhttp://m.tkk7.com/mphome/archive/2006/11/02/78785.html#Feedback0http://m.tkk7.com/mphome/comments/commentRss/78785.htmlhttp://m.tkk7.com/mphome/services/trackbacks/78785.html
    ??? 記錄以下今天寫程序時的總結(jié):

    ?????? 1.不要將ResultSet的對象通過setAttribute來傳遞,應(yīng)為如果對應(yīng)的connection關(guān)閉的話ResultSet會失效的。
    ?????? 2.Hibernate中的CreateQuery("from Table as a where a.name =?")? 中的name是其*.bml.htm中定義的字段和數(shù)據(jù)庫中的字段是不同的。
    ?????? 3.Struts中使用普通的表單元素
    ?????????????<html:form action="/register.do">
    ??????????????????用戶名:<html:text property="username"/><br/>
    ????????????????? 密碼1: <html:text property="password1"/><br/>
    ??????????????????密碼2:<html:text property="password2"/><br/>
    ????????????
    ?????????????????????????????? <html:submit value="Register"/>
    ???????????</html:form>?? 可以
    ????????????<html:form action="/register.do">
    ??????????????????用戶名:<input type="button"><br/>
    ?????????????????
    ???????????</html:form>?? 可以

    ??????? <form action="/register.do">
    ??????????? <input type="text" name="username" value="" /><br/>
    ??????????? <input type="text" name="password1" value="" /><br/>
    ??????????? <input type="text" name="password2" value="" /><br/>
    ??????????? <input type="submit" value="ok" />
    ??????? </form>??不可以
    ??
    ???????? 注意Form的action,如果用struts標(biāo)簽的話"/"表示當(dāng)前web應(yīng)用的根目錄,如果用html標(biāo)記的話"/"表示localhost的根目錄。第三種
    ??????????? 把/register.do?改成register.do。

    ??? 感覺自己編寫的代碼太沒有質(zhì)量拉 ,要多看看別人的代碼,學(xué)會總結(jié)。
    ??
    ?? 還有英語作文要寫,哦還有車牌識別系統(tǒng)? ,事情真多? 。

    ?? 明天繼續(xù).byby

    ]]>
    主站蜘蛛池模板: 亚洲人成在线免费观看| 国拍在线精品视频免费观看| 亚洲综合免费视频| 亚洲AV永久精品爱情岛论坛| 国产乱妇高清无乱码免费| 免费一看一级毛片| 黄色免费网址大全| 亚洲美女在线国产| 久久久久久噜噜精品免费直播| 亚洲一区日韩高清中文字幕亚洲| 免费看黄福利app导航看一下黄色录像 | 亚洲国产精品一区二区第四页| 综合一区自拍亚洲综合图区| 国产免费怕怕免费视频观看| 美女黄色免费网站| 在线日韩日本国产亚洲| 久草免费福利资源站| 91久久亚洲国产成人精品性色 | 好先生在线观看免费播放 | 一级女性全黄生活片免费看| 亚洲中文字幕无码久久2017| 国产免费无码AV片在线观看不卡| 亚洲欧洲在线观看| 久久久久久99av无码免费网站 | 亚洲性猛交XXXX| 人妻丰满熟妇无码区免费| 亚洲欧洲日本精品| 永久黄网站色视频免费| 国产精品hd免费观看| 亚洲国产人成在线观看69网站| 午夜福利不卡片在线播放免费| 亚洲成熟丰满熟妇高潮XXXXX| 亚洲阿v天堂在线2017免费| 黄网站色视频免费在线观看的a站最新| 亚洲国产精品综合久久2007| 国产jizzjizz视频免费看| 最近免费mv在线观看动漫| 亚洲婷婷第一狠人综合精品| 久久久青草青青国产亚洲免观 | 亚洲AV无码一区东京热久久 | 免费一看一级毛片全播放|