編者按:2008年8月4日,StackOverflow 網(wǎng)友 Bert F 發(fā)帖提問:哪本最具影響力的書,是每個(gè)程序員都應(yīng)該讀的?
“如果能時(shí)光倒流,回到過(guò)去,作為一個(gè)開發(fā)人員,你可以告訴自己在職業(yè)生涯初期應(yīng)該讀一本, 你會(huì)選擇哪本書呢?我希望這個(gè)書單列表內(nèi)容豐富,可以涵蓋很多東西。”
很多程序員響應(yīng),他們?cè)谕扑]時(shí)也寫下自己的評(píng)語(yǔ)。 以前就有國(guó)內(nèi)網(wǎng)友介紹這個(gè)程序員書單,不過(guò)都是推薦數(shù) Top 10的書。
其實(shí)除了前10本之外,推薦數(shù)前30左右的書籍都算經(jīng)典,筆者整理編譯這個(gè)問答貼,同時(shí)摘譯部分推薦人的評(píng)語(yǔ)。
下面就按照各本書的推薦數(shù)排列。
1、《代碼大全》 史蒂夫·邁克康奈爾
推薦數(shù):1684
“優(yōu)秀的編程實(shí)踐的百科全書,《代碼大全》注重個(gè)人技術(shù),其中所有東西加起來(lái), 就是我們本能所說(shuō)的“編寫整潔的代碼”。這本書有50頁(yè)在談?wù)摯a布局。” —— Joel Spolsky
對(duì)于新手來(lái)說(shuō),這本書中的觀念有點(diǎn)高階了。到你準(zhǔn)備閱讀此書時(shí),你應(yīng)該已經(jīng)知道并實(shí)踐過(guò)書中99%的觀念。– esac
Steve McConnell的原作《代碼大全》(第1版)是公認(rèn)的關(guān)于編程的最佳實(shí)踐指南之一, 在過(guò)去的十多年間,本書一直在幫助開發(fā)人員編寫更好的軟件。
現(xiàn)在,作者將這本經(jīng)典著作全新演繹,融入了最前沿的實(shí)踐技術(shù),加入了上百個(gè)嶄新的代碼示例, 充分展示了軟件構(gòu)建的藝術(shù)性和科學(xué)性。 McConnell匯集了來(lái)自研究機(jī)構(gòu)、學(xué)術(shù)界以及業(yè)界日常實(shí)踐的主要知識(shí), 把最高效的技術(shù)和最重要的原理交織融會(huì)為這本既清晰又實(shí)用的指南。
無(wú)論您的經(jīng)驗(yàn)水平如何,也不管您在怎樣的開發(fā)環(huán)境中工作,也無(wú)論項(xiàng)目是大是小, 本書都將激發(fā)您的思維并幫助您構(gòu)建高品質(zhì)的代碼。
《代碼大全(第2版))》做了全面的更新,增加了很多與時(shí)俱進(jìn)的內(nèi)容,包括對(duì)新語(yǔ)言、新的開發(fā)過(guò)程與方法論的討論等等。
推薦數(shù):1504
對(duì)于那些已經(jīng)學(xué)習(xí)過(guò)編程機(jī)制的程序員來(lái)說(shuō),這是一本卓越的書。 或許他們還是在校生,但對(duì)要自己做什么,還感覺不是很安全。
就像草圖和架構(gòu)之間的差別。雖然你在學(xué)校課堂上學(xué)到的是畫圖,你也可以畫的很漂亮, 但如果你覺得你不太知道從哪兒下手,如果某人要你獨(dú)自畫一個(gè)P2P的音樂交換網(wǎng)絡(luò)圖,那這本書就適合你了。—— Joel
《程序員修煉之道:從小工到專家》內(nèi)容簡(jiǎn)介:《程序員修煉之道》由一系列獨(dú)立的部分組成, 涵蓋的主題從個(gè)人責(zé)任、職業(yè)發(fā)展,知道用于使代碼保持靈活、并且易于改編和復(fù)用的各種架構(gòu)技術(shù), 利用許多富有娛樂性的奇聞?shì)W事、有思想性的例子及有趣的類比, 全面闡釋了軟件開發(fā)的許多不同方面的最佳實(shí)踐和重大陷阱。
無(wú)論你是初學(xué)者,是有經(jīng)驗(yàn)的程序員,還是軟件項(xiàng)目經(jīng)理,《程序員修煉之道:從小工到專家》都適合你閱讀。
推薦數(shù):916
就個(gè)人而言,這本書目前為止對(duì)我影響醉倒的一本編程書。
《代碼大全》、《重構(gòu)》和《設(shè)計(jì)模式》這些經(jīng)典書會(huì)教給你高效的工作習(xí)慣和交易細(xì)節(jié)。 其他像《人件集》、《計(jì)算機(jī)編程心理學(xué)》和《人月神話》這些書會(huì)深入軟件開發(fā)的心理層面。 其他書籍則處理算法。這些書都有自己所屬的位置。
然而《計(jì)算機(jī)程序的構(gòu)造和解釋》與這些不同。 這是一本會(huì)啟發(fā)你的書,它會(huì)燃起你編寫出色程序的熱情; 它還將教會(huì)你認(rèn)識(shí)并欣賞美; 它會(huì)讓你有種敬畏,讓你難以抑制地渴望學(xué)習(xí)更多的東西。
其他書或許會(huì)讓你成為一位更出色的程序員,但此書將一定會(huì)讓你成為一名程序員。
同時(shí),你將會(huì)學(xué)到其他東西,函數(shù)式編程(第三章)、惰性計(jì)算、元編程、虛擬機(jī)、解釋器和編譯器。
一些人認(rèn)為此書不適合新手。 個(gè)人認(rèn)為,雖然我并不完全認(rèn)同要有一些編程經(jīng)驗(yàn)才能讀此書,但我還是一定推薦給初學(xué)者。 畢竟這本書是寫給著名的6.001,是麻省理工學(xué)院的入門編程課程。 此書或許需要多做努力(尤其你在做練習(xí)的時(shí)候,你也應(yīng)當(dāng)如此),但這個(gè)價(jià)是對(duì)得起這本書的。
推薦數(shù):774
這本書簡(jiǎn)潔易讀,會(huì)教給你三件事:C 編程語(yǔ)言;如何像程序員一樣思考;底層計(jì)算模型。 (這對(duì)理解“底層”非常重要)—— Nathan
《C程序設(shè)計(jì)語(yǔ)言》(第2版新版)講述深入淺出,配合典型例證,通俗易懂,實(shí)用性強(qiáng), 適合作為大專院校計(jì)算機(jī)專業(yè)或非計(jì)算機(jī)專業(yè)的C語(yǔ)言教材,也可以作為從事計(jì)算機(jī)相關(guān)軟硬件開發(fā)的技術(shù)人員的參考書。
《C程序設(shè)計(jì)語(yǔ)言》(第2版新版)原著即為C語(yǔ)言的設(shè)計(jì)者之一Dennis M.Ritchie和著名的計(jì)算機(jī)科學(xué)家Brian W.Kernighan合著的 一本介紹C語(yǔ)言的權(quán)威經(jīng)典著作。 我們現(xiàn)在見到的大量論述C語(yǔ)言程序設(shè)計(jì)的教材和專著均以此書為藍(lán)本。 原著第1版中介紹的C語(yǔ)言成為后來(lái)廣泛使用的C語(yǔ)言版本——標(biāo)準(zhǔn)C的基礎(chǔ)。
人們熟知的“hello,world”程序就是由本書首次引入的,現(xiàn)在,這一程序已經(jīng)成為所有程序設(shè)計(jì)語(yǔ)言入門的第一課。
推薦數(shù):671
《代碼大全》教你如何正確編程; 《人月神話》教你如何正確管理; 《設(shè)計(jì)模式》教你如何正確設(shè)計(jì)……
在我看來(lái),代碼只是一個(gè)工具,并非精髓。 開發(fā)軟件的主要部分是創(chuàng)建新算法或重新實(shí)現(xiàn)現(xiàn)有算法。 其他部分則像重新組裝樂高磚塊或創(chuàng)建“管理”層。
我依然夢(mèng)想這樣的工作,我的大部分時(shí)間(>50%)是在寫算法,其他“管理”細(xì)節(jié)則留給其他人…… —— Ran Biron
- 經(jīng)典的算法書,被亞馬遜網(wǎng),《程序員》等評(píng)選為2006年最受讀者喜愛的十大IT圖書之一。
- 算法領(lǐng)域的標(biāo)準(zhǔn)教材,全球多所知名大學(xué)選用
- MIT名師聯(lián)手鑄就,被譽(yù)為“計(jì)算機(jī)算法的圣經(jīng)”
- 編寫上采用了“五個(gè)一”,即一章介紹一個(gè)算法、一種設(shè)計(jì)技術(shù)、一個(gè)應(yīng)用領(lǐng)域和一個(gè)相關(guān)話題。
推薦數(shù):617
《重構(gòu):改善既有代碼的設(shè)計(jì)》清晰地揭示了重構(gòu)的過(guò)程,解釋了重構(gòu)的原理和最佳實(shí)踐方式, 并給出了何時(shí)以及何地應(yīng)該開始挖掘代碼以求改善。 書中給出了70多個(gè)可行的重構(gòu),每個(gè)重構(gòu)都介紹了一種經(jīng)過(guò)驗(yàn)證的代碼變換手法的動(dòng)機(jī)和技術(shù)。
《重構(gòu):改善既有代碼的設(shè)計(jì)》提出的重構(gòu)準(zhǔn)則將幫助你一次一小步地修改你的代碼,從而減少了開發(fā)過(guò)程中的風(fēng)險(xiǎn)。
《重構(gòu):改善既有代碼的設(shè)計(jì)》適合軟件開發(fā)人員、項(xiàng)目管理人員等閱讀, 也可作為高等院校計(jì)算機(jī)及相關(guān)專業(yè)師生的參考讀物。
我想我不得不推薦《重構(gòu)》:改進(jìn)現(xiàn)有代碼的設(shè)計(jì)。—— Martin
我必須承認(rèn),我最喜歡的編程語(yǔ)錄是出自這本書:任何一個(gè)傻瓜都能寫出計(jì)算機(jī)能理解的程序, 而優(yōu)秀的程序員卻能寫出別人能讀得懂的程序。—— Martin Fowler
推薦數(shù):617
自1995年出版以來(lái),本書一直名列Amazon和各大書店銷售榜前列。 近10年后,本書仍是Addison-Wesley公司2003年最暢銷的圖書之一。 中文版銷售逾4萬(wàn)冊(cè)。
就我而言,我認(rèn)為四人幫編著的《設(shè)計(jì)模式》是一本極為有用的書。 雖然此書并不像其他建議一樣有關(guān)“元”編程,但它強(qiáng)調(diào)封裝諸如模式一類的優(yōu)秀編程技術(shù), 因而鼓勵(lì)其他人提出新模式和反模式(antipatterns),并運(yùn)用于編程對(duì)話中。—— Chris Jester-Young
推薦數(shù):588
在軟件領(lǐng)域,很少能有像《人月神話》一樣具有深遠(yuǎn)影響力并且暢銷不衰的著作。
Brooks博士為人們管理復(fù)雜項(xiàng)目提供了最具洞察力的見解。 既有很多發(fā)人深省的觀點(diǎn),又有大量軟件工程的實(shí)踐。 本書內(nèi)容來(lái)自Brooks博士在IBM公司System/360家族和OS/360中的項(xiàng)目管理經(jīng)驗(yàn)。
該書英文原版一經(jīng)面世,即引起業(yè)內(nèi)人士的強(qiáng)烈反響,后又譯為德、法、日、俄中等多種語(yǔ)言,全球銷量數(shù)百萬(wàn)冊(cè)。 確立了其在行業(yè)內(nèi)的經(jīng)典地位。
推薦數(shù):542
《計(jì)算機(jī)程序設(shè)計(jì)藝術(shù)》系列著作對(duì)計(jì)算機(jī)領(lǐng)域產(chǎn)生了深遠(yuǎn)的影響。 這一系列堪稱一項(xiàng)浩大的工程,自1962年開始編寫,計(jì)劃出版7卷,目前已經(jīng)出版了4卷。
《美國(guó)科學(xué)家》雜志曾將這套書與愛因斯坦的《相對(duì)論》等書并列稱為20世紀(jì)最重要的12本物理學(xué)著作。 目前Knuth正將畢生精力投入到這部史詩(shī)性著作的撰寫中。
這是高德納傾注心血寫的一本書。—— Peter Coulton
10、《編譯原理》(龍書)
推薦數(shù):462
我很奇怪,居然沒人提到龍書。(或許已有推薦,我沒有看到)。 我從沒忘過(guò)此書的第一版封面。 此書讓我知道了編譯器是多么地神奇絕妙。- DB
推薦數(shù):445
強(qiáng)大的寫作陣容。
- 《Head First設(shè)計(jì)模式》(中文版) 作者Eric Freeman;
- ElElisabeth Freeman是作家、講師和技術(shù)顧問。
- Eric擁有耶魯大學(xué)的計(jì)算機(jī)科學(xué)博士學(xué)位,E1isabath擁有耶魯大學(xué)的計(jì)算機(jī)科學(xué)碩士學(xué)位。
- Kathy Sierra(javaranch.com的創(chuàng)始人)FHBert Bates是暢銷的HeadFirst系列書籍的創(chuàng)立者,也是Sun公司Java開發(fā)員認(rèn)證考試的開發(fā)者。
本書的產(chǎn)品設(shè)計(jì)應(yīng)用神經(jīng)生物學(xué)、認(rèn)知科學(xué),以及學(xué)習(xí)理論,這使得這本書能夠?qū)⑦@些知識(shí)深深地印在你的腦海里, 不容易被遺忘。
本書的編寫方式采用引導(dǎo)式教學(xué),不直接告訴你該怎么做,而是利用故事當(dāng)作引子,帶領(lǐng)讀者思考并想辦法解決問題。 解決問題的過(guò)程中又會(huì)產(chǎn)生一些新的問題,再繼續(xù)思考、繼續(xù)解決問題,這樣可以加深體會(huì)。
作者以大量的生活化故事當(dāng)背景,例如第1章是鴨子,第2章是氣象站,第3章是咖啡店, 書中搭配大量的插圖(幾乎每一頁(yè)都有圖),所以閱讀起來(lái)生動(dòng)有趣,不會(huì)感覺到昏昏欲睡。
作者還利用歪歪斜斜的手寫字體,增加“現(xiàn)場(chǎng)感”。 精心設(shè)計(jì)許多爆笑的對(duì)白,讓學(xué)習(xí)過(guò)程不會(huì)太枯燥。 還有模式告白節(jié)目,將設(shè)計(jì)模式擬人化成節(jié)目來(lái)賓,暢談其內(nèi)在的一切。 每一章都有數(shù)目不等的測(cè)驗(yàn)題。 每章最后有一頁(yè)要點(diǎn)整理,這也是精華所在,我都是利用這一頁(yè)做復(fù)習(xí)。
我知道四人幫的《設(shè)計(jì)模式》是一本標(biāo)準(zhǔn)書,但倒不如先看看這部大部頭,此書更為簡(jiǎn)易。 一旦你了解了解了基本原則,可以去看四人幫的那本圣經(jīng)了。- Calanus
推薦數(shù):437
如果下昂真正深入閱讀,我推薦道格拉斯·侯世達(dá)(Douglas Hofstadter)的《哥德爾、艾舍爾、巴赫書》。 他極為深入研究了程序員每日都要面對(duì)的問題:遞歸、驗(yàn)證、證明和布爾代數(shù)。 這是一本很出色的讀物,難度不大,偶爾有挑戰(zhàn),一旦你要鏖戰(zhàn)到底,將是非常值得的。 – Jonik
推薦數(shù):329
細(xì)節(jié)之中自有天地,整潔成就卓越代碼
盡管糟糕的代碼也能運(yùn)行,但如果代碼不整潔,會(huì)使整個(gè)開發(fā)團(tuán)隊(duì)泥足深陷, 寫得不好的代碼每年都要耗費(fèi)難以計(jì)數(shù)的時(shí)間和資源。 然而這種情況并非無(wú)法避免。
著名軟件專家RoberfC.Marlin在《代碼整潔之道》中為你呈現(xiàn)出了革命性的視野。 Martin攜同ObjectMetltor公司的同事,從他們有關(guān)整潔代碼的最佳敏捷實(shí)踐中提煉出軟件技藝的價(jià)值觀, 以饗讀者,讓你成為更優(yōu)秀的程序員——只要你著手研讀《代碼整潔之道》。
閱讀《代碼整潔之道》需要你做些什么呢?你將閱讀代碼——大量代碼。 《代碼整潔之道》促使你思考代碼中何謂正確,何謂錯(cuò)誤。 更重要的是,《代碼整潔之道》將促使你重新評(píng)估自己的專業(yè)價(jià)值觀,以及對(duì)自己技藝的承諾。
從《代碼整潔之道》中可以學(xué)到:
- 好代碼和糟糕的代碼之間的區(qū)別;
- 如何編寫好代碼,如何將糟糕的代碼轉(zhuǎn)化為好代碼;
- 如何創(chuàng)建好名稱、好函數(shù)、好對(duì)象和好類;
- 如何格式化代碼以實(shí)現(xiàn)其可讀性的最大化;
- 如何在不妨礙代碼邏輯的前提下充分實(shí)現(xiàn)錯(cuò)誤處理;
- 如何進(jìn)行單元測(cè)試和測(cè)試驅(qū)動(dòng)開發(fā)。
雖然《代碼整潔之道》和《代碼大全》有很多共同之處,但它有更為簡(jiǎn)潔更為實(shí)際的清晰例子。 – Craig P. Motlin
推薦數(shù):297
在我職業(yè)生涯早期,Scott Meyer的《Effective C++》和后續(xù)的《More Effective C++》都對(duì)我的編程能力有著直接影響。 正如當(dāng)時(shí)的一位朋友所說(shuō),這些書縮短你培養(yǎng)編程技能的過(guò)程,而其他人可能要花費(fèi)數(shù)年。
去年對(duì)我影響最大的一本書是《大教堂與市集》,該書教會(huì)我很有關(guān)開源開發(fā)過(guò)程如何運(yùn)作,和如何處理我代碼中的Bug。 – John Channing
推薦數(shù):282
多年以來(lái),當(dāng)程序員們推選出最心愛的計(jì)算機(jī)圖書時(shí),《編程珠璣》總是位列前列。 正如自然界里珍珠出自細(xì)沙對(duì)牡蠣的磨礪,計(jì)算機(jī)科學(xué)大師Jon Bentley以其獨(dú)有的洞察力和創(chuàng)造力, 從磨礪程序員的實(shí)際問題中凝結(jié)出一篇篇不朽的編程“珠璣”, 成為世界計(jì)算機(jī)界名刊《ACM通訊》歷史上最受歡迎的專欄, 最終結(jié)集為兩部不朽的計(jì)算機(jī)科學(xué)經(jīng)典名著,影響和激勵(lì)著一代又一代程序員和計(jì)算機(jī)科學(xué)工作者。
本書為第一卷,主要討論計(jì)算機(jī)科學(xué)中最本質(zhì)的問題:如何正確選擇和高效地實(shí)現(xiàn)算法。
盡管我不得不羞愧地承認(rèn),書中一半的東西我都沒有理解,但我真的推薦《編程珠璣》,書中有些令人驚奇的東西。 – Matt Warren
本書是繼《重構(gòu)》和《重構(gòu)與模式》之后探討修改代碼技術(shù)的又一里程碑式的著作, 而且從涵蓋面和深度上都超過(guò)了前兩部經(jīng)典。 書中不僅講述面向?qū)ο笳Z(yǔ)言(Java、C#和C++)代碼,也有專章討論C這樣的過(guò)程式語(yǔ)言。
作者將理解、測(cè)試和修改代碼的原理、技術(shù)和最新工具(自動(dòng)化重構(gòu)工具、單元測(cè)試框架、仿對(duì)象、集成測(cè)試框架等), 與解依賴技術(shù)和大量開發(fā)和設(shè)計(jì)優(yōu)秀代碼的原則、最佳實(shí)踐相結(jié)合,許多內(nèi)容非常深入,而且常常發(fā)前人所未發(fā)。
書中處處體現(xiàn)出作者獨(dú)到的洞察力,以及多年開發(fā)和指導(dǎo)軟件項(xiàng)目所積累的豐富經(jīng)驗(yàn)和深厚功力。 通過(guò)這部集大成之作,你不僅能掌握最頂尖的修改代碼技術(shù),還可以大大提高對(duì)代碼和軟件開發(fā)的領(lǐng)悟力。
我認(rèn)為沒有任何一本書能向這本書一樣影響了我的編程觀點(diǎn)。 它明確地告訴你如何處理其他人的代碼,含蓄地教會(huì)你避免哪些(以及為什么要避免)。- Wolfbyte
同意。很多開發(fā)人員討論用干凈的石板來(lái)編寫軟件。 但我想幾乎所有開發(fā)人員的某些時(shí)候是在吃其他開發(fā)人員的狗食。– Bernard Dy
這是一本講述計(jì)算機(jī)工作原理的書。
不過(guò),你千萬(wàn)不要因?yàn)?#8220;工作原理”之類的字眼就武斷地認(rèn)為,它是晦澀而難懂的。 作者用豐富的想象和清晰的筆墨將看似繁雜的理論闡述得通俗易懂,你絲毫不會(huì)感到枯燥和生硬。 更重要的是,你會(huì)因此而獲得對(duì)計(jì)算機(jī)工作原理較深刻的理解。 這種理解不是抽象層面上的,而是具有一定深度的,這種深度甚至不遜于“電氣工程師”和“程序員”的理解。
不管你是計(jì)算機(jī)高手,還是對(duì)這個(gè)神奇的機(jī)器充滿敬畏之心的菜鳥, 都不妨翻閱一下《編碼:隱匿在計(jì)算機(jī)軟硬件背后的語(yǔ)言》,讀一讀大師的經(jīng)典作品,必然會(huì)有收獲。
我推薦Charles Petzold的《編碼》。 在這個(gè)充滿工具和IDE的年代,很多復(fù)雜度已經(jīng)從程序員那“抽取”走了,這本書一本開眼之作。 – hemil
對(duì)我影響最大的那本書是 Robert Pirsig 的《禪與摩托車維修藝術(shù)》。 不管你做什么事,總是要力求完美,徹底了解你手中的工具和任務(wù),更為重要的是, 要有樂趣(因?yàn)槿绻阕鍪掠袠啡?,一切將自發(fā)引向更好的結(jié)果)。 – akr
Demarco 和 Lister 表明,軟件開發(fā)中的首要問題是人,并非技術(shù)。 他們的答案并不簡(jiǎn)單,只是令人難以置信的成功。 第二版新增加了八章內(nèi)容。 – Eduardo Molteni
這是一本訪談筆錄,記錄了當(dāng)今最具個(gè)人魅力的15位軟件先驅(qū)的編程生涯。 包括DonaldKnuth、Jamie Zawinski、Joshua Bloch、Ken Thompson等在內(nèi)的業(yè)界傳奇人物,為我們講述了 他們是怎么學(xué)習(xí)編程的,在編程過(guò)程中發(fā)現(xiàn)了什么以及他們對(duì)未來(lái)的看法, 并對(duì)諸如應(yīng)該如何設(shè)計(jì)軟件等長(zhǎng)久以來(lái)一直困擾很多程序員的問題談了自己的觀點(diǎn)。
一本非常有影響力的書,可以從中學(xué)到一些業(yè)界頂級(jí)人士的經(jīng)驗(yàn),了解他們?nèi)绾嗡伎疾⒐ぷ鳌?– Jahanzeb Farooq
21、《Surely You’re Joking, Mr. Feynman! / 別鬧了,費(fèi)曼先生!》
雖然這本書可能有點(diǎn)偏題,但不管你信不信,這本書曾在計(jì)算機(jī)科學(xué)專業(yè)課程的閱讀列表之上。 一個(gè)優(yōu)秀的角色模型,一本有關(guān)好奇心的優(yōu)秀書籍。 – mike511
此書第二版教你如何編寫漂亮并高效的代碼,雖然這是一本Java書,但其中有很多跨語(yǔ)言的理念。 – Marcio Aguiar
很奇怪,還沒人推薦 Martin Fowler 的《企業(yè)應(yīng)用架構(gòu)模式》- levi rosol
24、《The Little Schemer》和《The Seasoned Schemer》 nmiranda
這兩本是LISP的英文書,尚無(wú)中文版。 美國(guó)東北大學(xué)網(wǎng)站上也有電子版。
25、《交互設(shè)計(jì)之路》英文名:《The Inmates Are Running The Asylum: Why High Tech Products Drive Us Crazy and How to Restore the Sanity》該書作者:Alan Cooper,人稱Visual Basic之父,交互設(shè)計(jì)之父。
本書是基于眾多商務(wù)案例,講述如何創(chuàng)建更好的、高客戶忠誠(chéng)度的軟件產(chǎn)品和基于軟件的高科技產(chǎn)品的書。 本書列舉了很多真實(shí)可信的實(shí)際例子,說(shuō)明目前在軟件產(chǎn)品和基于軟件的高科技產(chǎn)品中,普遍存在著“難用”的問題。
作者認(rèn)為,“難用”問題是由這些產(chǎn)品中存在著的高度“認(rèn)知摩擦”引起的, 而產(chǎn)生這個(gè)問題的根源在于現(xiàn)今軟件開發(fā)過(guò)程中欠缺了一個(gè)為用戶利益著想的前期“交互設(shè)計(jì)”階段。 “難用”的產(chǎn)品不僅損害了用戶的利益,最終也將導(dǎo)致企業(yè)的失敗。
本書通過(guò)一些生動(dòng)的實(shí)例,讓人信服地講述了由作者倡導(dǎo)的“目標(biāo)導(dǎo)向”交互設(shè)計(jì)方法在解決“難用”問題方面的有效性, 證實(shí)了只有改變現(xiàn)有觀念,才能有效地在開發(fā)過(guò)程中引入交互設(shè)計(jì),將產(chǎn)品的設(shè)計(jì)引向成功。
本書雖然是一本面向商務(wù)人員而編寫的書,但也適合于所有參與軟件產(chǎn)品和基于軟件的高科技產(chǎn)品開發(fā)的專業(yè)人士, 以及關(guān)心軟件行業(yè)和高科技行業(yè)現(xiàn)狀與發(fā)展的人士閱讀。
他還有另一本中文版著作:《About Face 3 交互設(shè)計(jì)精髓》
26、《Why’s (Poignant) Guide to Ruby 》
如果你不是程序員,閱讀此書可能會(huì)很有趣,但如果你已經(jīng)是個(gè)程序員,可能會(huì)有點(diǎn)乏味。
27、《Unix編程藝術(shù)》
It is useful regardless operating system you use. – J.F. Sebastian
不管你使用什么操作系統(tǒng),這本書都很有用。 – J.F. Sebastian
45個(gè)習(xí)慣,分為7個(gè)方面:工作態(tài)度、學(xué)習(xí)、軟件交付、反饋、編碼、調(diào)試和協(xié)作。
每一個(gè)具體的習(xí)慣里,一開始提出一個(gè)謬論,然后展開分析,之后有正隊(duì)性地提出正確的做法,并設(shè)身處地地講出了正確做法給你個(gè)人的“切身感受”,最后列出幾條注意事項(xiàng),幫助你修正自己的做法(“平衡的藝術(shù)”)。
前面已經(jīng)提到的很多書都啟發(fā)了我,并影響了我,但這本書每位程序員都應(yīng)該讀。 它向我展示了單元測(cè)試和TDD的重要性,并讓我很快上手。 – Curro
我不關(guān)心你的代碼有多好或優(yōu)雅。 如果你沒有測(cè)試,你或許就如同沒有編寫代碼。 這本書得到的推薦數(shù)應(yīng)該更高些。 人們討論編寫用戶喜歡的軟件,或既設(shè)計(jì)出色并健壯的高效代碼,但如果你的軟件有一堆bug,談?wù)撃切〇|西毫無(wú)意義。– Adam Gent
可用性設(shè)計(jì)是Web設(shè)計(jì)中最重要也是難度最大的一項(xiàng)任務(wù)。 《點(diǎn)石成金-訪客至上的網(wǎng)頁(yè)設(shè)計(jì)秘笈(原書第二版)》作者根據(jù)多年從業(yè)的經(jīng)驗(yàn),剖析用戶的心理, 在用戶使用的模式、為掃描進(jìn)行設(shè)計(jì)、導(dǎo)航設(shè)計(jì)、主頁(yè)布局、可用性測(cè)試等方面提出了許多獨(dú)特的觀點(diǎn), 并給出了大量簡(jiǎn)單、易行的可用性設(shè)計(jì)的建議。
本書短小精煉,語(yǔ)言輕松詼諧,書中穿插大量色彩豐富的屏幕截圖、趣味叢生的卡通插圖以及包含大量信息的圖表, 使枯燥的設(shè)計(jì)原理變得平易近人。
本書適合從事Web設(shè)計(jì)和Web開發(fā)的技術(shù)人員閱讀,特別適合為如何留住訪問者而苦惱的網(wǎng)站/網(wǎng)頁(yè)設(shè)計(jì)人員閱讀。 這是一本關(guān)于Web設(shè)計(jì)原則而不是Web設(shè)計(jì)技術(shù)的書。
本書作者是Web設(shè)計(jì)專家,具有豐富的實(shí)踐經(jīng)驗(yàn)。 他用幽默的語(yǔ)言為你揭示W(wǎng)eb設(shè)計(jì)中重要但卻容易被忽視的問題,只需幾個(gè)小時(shí), 你便能對(duì)照書中講授的設(shè)計(jì)原則找到網(wǎng)站設(shè)計(jì)的癥結(jié)所在,令你的網(wǎng)站煥然一新。
取決于你所追求的目標(biāo)。 我喜歡《代碼大全》是因純編程,《點(diǎn)石成金》是一本有關(guān)UI設(shè)計(jì)的卓越書籍。 – Justin Standard
posted @
2012-08-14 17:46 justjavac(迷渡) 閱讀(206) |
評(píng)論 (0) |
編輯 收藏
php新手開發(fā)的作品通常都有以下不足:
1、網(wǎng)站目錄不合理,無(wú)法分辨各個(gè)功能的文件夾及文件,沒有系統(tǒng)內(nèi)核。
2、網(wǎng)站未經(jīng)過(guò)初始化,沒有安全過(guò)濾,沒有統(tǒng)一入口。
3、基本沒有class,甚至連function都很難找到,冗余代碼多,并有大量的重復(fù)文件。
4、PHP代碼混編,非MVC模式。
發(fā)現(xiàn)了自己的不足,就要針對(duì)不足之處加強(qiáng)技術(shù)學(xué)習(xí),多從成熟的系統(tǒng)作品中學(xué)習(xí),
先解決以上幾個(gè)方面的問題,再多了解最新的php安全漏洞,以及編程技巧,你就會(huì)
逐漸成為開發(fā)高手!
最后一點(diǎn),php上手雖快,但沒有系統(tǒng)學(xué)習(xí)過(guò)軟件專業(yè)的課程和知識(shí)是肯定不夠的,
無(wú) 論你是哪一種語(yǔ)言和工具的開發(fā)者,算法設(shè)計(jì)與分析是你一定要精通的,認(rèn)真
扎實(shí)地學(xué)過(guò)數(shù)據(jù)結(jié)構(gòu)、算法、編繹原理這些專業(yè)課程后,你會(huì)發(fā)現(xiàn):
你 不論學(xué)什么開發(fā),都會(huì)感到的自己的悟性非凡!
posted @
2010-07-02 11:54 justjavac(迷渡) 閱讀(150) |
評(píng)論 (0) |
編輯 收藏
1. CI中的controller都應(yīng)當(dāng)小寫。剛開始為了區(qū)分單詞,把第二個(gè)單詞大寫了,結(jié)果就是不認(rèn)default_controller。事實(shí)證明這是錯(cuò)誤的。放到linux下面就不靈了,應(yīng)該全部小寫,如果你大寫了,CI會(huì)認(rèn)為這是libraries里面的東西。不管怎樣都應(yīng)該全部小寫,至少可以避免linux下區(qū)分大小寫的問題。
2. 分頁(yè)的問題。CI的官方論壇下提供了一些源代碼,怎樣寫分頁(yè)函數(shù)我就不多說(shuō)了,可以直接看高手的。關(guān)鍵是傳遞頁(yè)面參數(shù)的時(shí)候,不要忘了修改segment。一開始怎么傳都不對(duì),后來(lái)才想起來(lái)我的網(wǎng)址已經(jīng)是localhost/codeigniter/aaa/bbb/3/10了,這樣segment也要相應(yīng)改變。分頁(yè)參數(shù)在第幾個(gè)/后,他就是uri->segment(幾)。如果是搜索之后的分頁(yè),那么$config['total_rows']就不是count_all了,而是加入where之后的query的記錄數(shù)。想起來(lái)倒是有一個(gè)問題還沒解決,就是在你點(diǎn)search之后,一般需要用JS把網(wǎng)址轉(zhuǎn)換成CI固有的模式,但是怎樣使這個(gè)js生成的網(wǎng)址包含到site_url中,我沒有解決,只能手工了(仔細(xì)想想還是挺簡(jiǎn)單的呵呵,自己造網(wǎng)址不用site_url)。
3. MVC模式我已經(jīng)比較適應(yīng)了。將頁(yè)面都放在view中,控制語(yǔ)句放在controller中,而函數(shù)放在model中。剛開始有很多人和我一樣想要在view或者control中加一些語(yǔ)句,只能說(shuō),不行,也不規(guī)范。最好的辦法是寫成helper,如果是數(shù)據(jù)庫(kù)的二次調(diào)用的話,可以用inner join合并。
4. htaccess的問題。很多人肯定和我一樣,一開始接觸的時(shí)候就是感興趣怎樣可以去掉index.php。雖然網(wǎng)上已經(jīng)泛濫了,但是我再寫一次吧。其實(shí)就兩個(gè)工作,第一,在根目錄寫一個(gè).htaccess的文檔,第二,開啟apache中的rewrite模塊。
1)htaccess的寫法很多。這是基于你對(duì)CI各層目錄的安排決定的。我的安排:除了application中的內(nèi)容外。將其他所有東西放在根目錄下的www目錄下,其中圖片放在www/images/下,flash放在www/flash/下,xml放在www/xml下,js放在www/js下。。。??傊言趙ww里面。所有views在title下面加上<base href="<?=base_url()?>" />這句話,系統(tǒng)就能識(shí)別你的根目錄了,所有鏈接改成site_url()就可以保證路徑不會(huì)出錯(cuò)了。于是,我的htaccess是這樣的:
RewriteEngine on
RewriteCond $1 !^(index\.php|www|uploadfiles|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L] [L]
第一行是將rewrite打開,第二行是不rewrite的例外,包括index.php本身,www目錄,uploadfiles(這個(gè)參見5),還有robots搜索,第三行自然就是將index.php隱藏的rewrite規(guī)則了,即剩下的網(wǎng)址由于原來(lái)都是localhost/codeigniter/index.php/aaa/bbb的模式,現(xiàn)在可以去掉index.php了。而www下的網(wǎng)址不涉及index.php,用不到這個(gè)規(guī)則,所以要排除。
2)首先找到apache下面的http.conf,路徑是apache的conf目錄下。找到這一行:LoadModule rewrite_module modules/mod_rewrite.so,將前面的#去掉,也就是說(shuō)開啟這個(gè)module。另外需要找到rewrite的目錄行,將AllowOverride設(shè)置為All,其實(shí)就是roadmodule下面的那個(gè)directory.
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
AllowOverride All
3)在CI的config目錄下的config.php中,將$config['index_page'] = "index.php"改為$config['index_page'] = “”,這樣就大功告成啦??!不用輸入index.php也可以訪問了。其實(shí)更關(guān)鍵的是你的各個(gè)目錄的路徑安排。
5.FCKEditor的問題。應(yīng)該說(shuō)我在應(yīng)用的時(shí)候沒有遇到任何麻煩,除了上傳時(shí)候的路徑讓我一頓好找。我覺得設(shè)置成根目錄下的/uploadfiles是不錯(cuò)的選擇,當(dāng)然別忘了在htaccess中把uploadfiles也放在不rewrite的隊(duì)伍中。因?yàn)槲椰F(xiàn)在的習(xí)慣是所有的文件編碼都設(shè)置成utf-8,所以網(wǎng)上經(jīng)常說(shuō)的亂碼的現(xiàn)象沒有遇到。
基本上就是這些基本的問題了,我做的其實(shí)就是簡(jiǎn)單的企業(yè)網(wǎng)站,沒有高級(jí)應(yīng)用,所以也沒有遇到更復(fù)雜的問題。等考完GT可以嘗試做一個(gè)更復(fù)雜的網(wǎng)站,和AJAX結(jié)合后再寫一些心得。下次要再做這樣的CMS,后臺(tái)直接搞定,省了不少時(shí)間。而且對(duì)于我這樣的PHP爛人來(lái)說(shuō),CI幫我解決了很多安全問題,同時(shí)也提高了效率。
有點(diǎn)過(guò)度興奮了,寫得超級(jí)亂,我自己都不愿意回過(guò)頭去細(xì)細(xì)檢查了,具體問題可以再聯(lián)系我,只要我能解答。最后上傳一個(gè)驗(yàn)證碼的helper吧,版權(quán)歸CI論壇上的同學(xué)所有,我只是轉(zhuǎn)一下,順便寫一下用法。。。
點(diǎn)擊下載此文件
1)首先在controller中引用getcode_helper.php, $this->load->helper('getcode');
建立一個(gè)function比如
- function createcode()
- {
- code();
- }
2)驗(yàn)證碼圖片鏈接地址:<img id="codeimage" src="<?=site_url('controller路徑/createcode')?>
3)表單提交時(shí)驗(yàn)證函數(shù):
- function seccode_check($str)
- {
- if(chk_code($str))
- {
- return TRUE;
- }
- else
- {
- return FALSE;
- }
- }
posted @
2010-07-02 11:53 justjavac(迷渡) 閱讀(231) |
評(píng)論 (0) |
編輯 收藏
在與許多客戶的接觸中,我發(fā)現(xiàn)有必要建立一套SOA的基本原則。下面的部分將介紹SOA中應(yīng)有的基本原則。這些并非絕對(duì)真理,它們更像一個(gè)用于SOA相關(guān)討論的參考框架。你會(huì)發(fā)現(xiàn):前四項(xiàng)衍生自Don Box提出的四項(xiàng)原則,盡管隨著時(shí)間的流逝,這四項(xiàng)原則的描述可能已經(jīng)有了些變化。
相關(guān)廠商內(nèi)容
1. 明確邊界:服務(wù)被調(diào)用時(shí),與實(shí)現(xiàn)其功能相關(guān)的內(nèi)容都應(yīng)被傳遞過(guò)來(lái)。對(duì)服務(wù)的所有訪問都應(yīng)該通過(guò)公共接口進(jìn)行。調(diào)用服務(wù)時(shí),非隱含的假設(shè)是必須的。“服務(wù)與消息緊密聯(lián)系,因?yàn)閰?shù)進(jìn)出服務(wù)的唯一方式是通過(guò)消息進(jìn)行的”。作為通用的模式,服務(wù)調(diào)用不應(yīng)依賴于共享的上下文,而應(yīng)被作為無(wú)狀態(tài)的模塊。契約描述了服務(wù)的功能性與非功能性的能力和特點(diǎn),管理著服務(wù)提供的接口。服務(wù)調(diào)用是一個(gè)具有業(yè)務(wù)邏輯效果的行為,可能有大量的資源開銷,并且導(dǎo)致一系列不同于本地方法調(diào)用和遠(yuǎn)程過(guò)程調(diào)用的錯(cuò)誤。服務(wù)的調(diào)用絕非遠(yuǎn)程過(guò)程調(diào)用。
服務(wù)的使用和提供應(yīng)該盡可能地簡(jiǎn)單,因此與服務(wù)間的交互沒必要被隱藏得太多。在SOA中,服務(wù)發(fā)送和接收的消息、服務(wù)契約以及服務(wù)本身都應(yīng)當(dāng)是最好的構(gòu)件。這就意味著,例如,被用到的編程模型和工具至少應(yīng)該提供一個(gè)API,這個(gè)API會(huì)幫助服務(wù)的編程人員了解上述概念。總的來(lái)說(shuō),一個(gè)明確的接口會(huì)封裝服務(wù)的內(nèi)在實(shí)現(xiàn),而服務(wù)通過(guò)該接口發(fā)布自己的功能;與服務(wù)交互是一個(gè)具體的行為,它依賴于服務(wù)使用者和提供者之間消息的傳遞。
2. 共享契約和架構(gòu),而不是類:基于一份服務(wù)描述(一份契約),服務(wù)使用者和服務(wù)提供者都可以獲得使用或提供服務(wù)的全部所需。根據(jù)松耦合原則,服務(wù)提供者不能依靠服務(wù)使用者來(lái)重用那些依賴于使用者環(huán)境的代碼。畢竟,服務(wù)使用者可能使用不同的開發(fā)環(huán)境和運(yùn)行環(huán)境。這條原則給SOA體系中所能交換的數(shù)據(jù)加上了嚴(yán)格的限制。理想的情況是,數(shù)據(jù)以符合一種或多種模式的XML文檔形式被交換,因?yàn)檫@種方式可應(yīng)用于任何你能想到的編程環(huán)境。因此,因?yàn)檫@條原則在基于DCOM和基于RMI的環(huán)境中是不可能被遵守的,所以這兩種環(huán)境基本上無(wú)法成為SOA的可用選項(xiàng)。
3. 策略驅(qū)動(dòng):為了與服務(wù)交互,必須滿足以下兩組不同的要求:
- 提供者提供的功能、語(yǔ)法和語(yǔ)義必須適應(yīng)使用者的需求;
- 技術(shù)能力與需要必須匹配。
例如,一個(gè)服務(wù)提供者提供了能夠精確滿足用戶需求的服務(wù),但該服務(wù)是基于JMS的,可使用者只能使用HTTP方式(比如,服務(wù)被應(yīng)用于.NET平臺(tái))。服務(wù)提供者可能要求消息級(jí)別的加密采用XML加密標(biāo)準(zhǔn),而使用者只支持采用SSL技術(shù)來(lái)保障傳輸層上的安全。即使在那些交互雙方都擁有足夠能力的案例中,它們的這些能力仍舊需要被“啟用”。例如,
提供者可能根據(jù)不同的使用者需求,對(duì)響應(yīng)的消息使用不同的算法進(jìn)行加密。 為了使盡可能多的形形色色的使用者能對(duì)服務(wù)進(jìn)行訪問,一種策略機(jī)制已經(jīng)被作為SOA工具集的一部分引入了。在服務(wù)接口對(duì)功能進(jìn)行描述的同時(shí),策略對(duì)不同的,非功能性的能力和需求進(jìn)行了指定。(譯者注:
策略指定的是服務(wù)之外的補(bǔ)充信息,是對(duì)服務(wù)使用者提出的特征要求)。
4. 自治:與明確邊界原則相關(guān),服務(wù)自治意味著,接口成為服務(wù)與外界聯(lián)系的唯一方式,至少?gòu)腟OA的角度來(lái)看是這樣的。需要注意的是,服務(wù)的運(yùn)行環(huán)境一定是可變的。例如,在絲毫不影響使用者的情況下,就可以從輕量級(jí)的原型實(shí)現(xiàn)轉(zhuǎn)換到成熟的、基于應(yīng)用服務(wù)器的協(xié)同組件集。
服務(wù)能夠被彼此獨(dú)立的修改、部署、發(fā)布新版本和管理。服務(wù)提供者不能寄希望于服務(wù)使用者,期望它們依靠自己的能力迅速適應(yīng)新版本的服務(wù),有的使用者可能甚至沒這個(gè)能力或者根本不愿去適應(yīng)新版本的服務(wù)接口(尤其是當(dāng)這些服務(wù)接口超出了服務(wù)提供者控制范圍的時(shí)候)。
5. 采用可傳輸?shù)膮f(xié)議格式,而非API:服務(wù)通常采用協(xié)議格式來(lái)發(fā)布,協(xié)議格式應(yīng)該是明確的、可傳輸?shù)牟⑶冶环?wù)所支持的。這一點(diǎn)與前兩條原則非常相關(guān),但卻帶來(lái)了新的見解:為保證一個(gè)服務(wù)最大程度的可訪問性(及長(zhǎng)期的可用性),只要交互過(guò)程遵守為該服務(wù)定義的策略,那么由任何依照服務(wù)接口進(jìn)行消息交換的平臺(tái)都可以訪問該服務(wù)。例如,通過(guò)以這一原則來(lái)測(cè)試主流的動(dòng)態(tài)編程語(yǔ)言(如Perl、Python或Ruby),我們可以去考慮該語(yǔ)言能否使用或提供一個(gè)特定的服務(wù)。雖然,在現(xiàn)有的技術(shù)實(shí)現(xiàn)里,這條原則可能還沒有發(fā)揮作用,但這個(gè)思路可以作為下列準(zhǔn)則的試金石:
- 使用開放的標(biāo)準(zhǔn)或者可閱讀的描述來(lái)描述所有消息格式。
- 不需要特定的資源就可以創(chuàng)造出符合這些合理的模式的消息。
- 成功通信所必需的附加信息,例如包含安全性或可靠性約束的頭信息,它們的語(yǔ)義和語(yǔ)法要遵循公開的規(guī)范和標(biāo)準(zhǔn)。
- 服務(wù)交互時(shí)所使用的傳輸(或傳遞)協(xié)議中至少有一個(gè)是標(biāo)準(zhǔn)的網(wǎng)絡(luò)協(xié)議,或它可以通過(guò)標(biāo)準(zhǔn)的網(wǎng)絡(luò)協(xié)議來(lái)訪問。
6. 面向文檔:服務(wù)交互時(shí),數(shù)據(jù)是以文檔的形式來(lái)傳遞的。
文檔是一個(gè)被明確模塊化的,有層次結(jié)構(gòu)的數(shù)據(jù)容器。面向文檔的一個(gè)重要特征就是自描述。最理想的情況下,文檔是對(duì)現(xiàn)實(shí)世界中的文件(如訂單、發(fā)票或帳單)的建模。文檔應(yīng)該被設(shè)計(jì)來(lái)確保它在問題域的上下文中發(fā)揮作用,這意味著它們可能應(yīng)用于一個(gè)或更多的服務(wù)。
與現(xiàn)實(shí)世界的紙制文檔相似,和服務(wù)交換信息的文檔將包含冗余的信息。例如,
文檔中可能同時(shí)包含了客戶ID和客戶地址信息(盡管客戶ID可能已經(jīng)足夠了)。這種冗余是可以接受的,因?yàn)樗鼘⒎?wù)使用者和提供者雙方的服務(wù)接口和隱含數(shù)據(jù)模型隔離開來(lái)。應(yīng)用面向文檔的模式的同時(shí),服務(wù)調(diào)用成為有意義的業(yè)務(wù)邏輯消息的交換,而非上下文無(wú)關(guān)的RPC調(diào)用。雖然通??梢哉J(rèn)為XML將被作為服務(wù)文檔的格式和語(yǔ)法,但它還沒有成為標(biāo)準(zhǔn)。
在一個(gè)SOA連接中,參與者之間的消息流轉(zhuǎn)于不同的系統(tǒng),使得各個(gè)系統(tǒng)之間彼此獨(dú)立。松耦合原則要求參與者對(duì)共知的依賴越少越好。當(dāng)消息在分布式對(duì)象或RPC基礎(chǔ)架構(gòu)中發(fā)送時(shí),客戶端和服務(wù)器端使用由同一個(gè)接口描述文檔生成的代理類(stub和skeleton)。如果不是這種情況的話,當(dāng)契約不支持雙方的交互時(shí),通訊就會(huì)停止。因?yàn)檫@個(gè)原因,RPC風(fēng)格的基礎(chǔ)架構(gòu)要求客戶端和服務(wù)器端程序代碼的同步運(yùn)行。
7. 松耦合:多數(shù)SOA的倡導(dǎo)者都認(rèn)為松耦合是一個(gè)很重要的概念。不幸的是,對(duì)于究竟哪些特征造成一個(gè)系統(tǒng)松耦合,有許多不同的看法。一個(gè)系統(tǒng)可以在多個(gè)維度表現(xiàn)為松耦合或緊耦合,它依賴于具體的要求和上下文,系統(tǒng)可能會(huì)在一些維度是松耦合的,在另一些維度是緊耦合的。這些維度包括:
- 時(shí)間:當(dāng)參與者在時(shí)間上是松耦合時(shí),它們不需要在同一時(shí)間啟動(dòng)并進(jìn)行通訊。這要求兩者之間采用某種緩沖或隊(duì)列機(jī)制,盡管這種機(jī)制與松耦合無(wú)關(guān)。當(dāng)參與的一方向另一方發(fā)送消息時(shí),交互的繼續(xù)不依賴于邏輯上或物理上能否立即返回應(yīng)答消息。
- 位置:如果一方參與者查詢與之通信的另一方參與者的地址,另一方的地址可以透明地進(jìn)行變更,不需要重新編程、重新配置或者甚至不需要通信伙伴的重新啟動(dòng)。這意味著查找(lookup)過(guò)程采用某種目錄或地址來(lái)存儲(chǔ)服務(wù)終端的地址。(對(duì)應(yīng)SOA提供的目錄服務(wù))
- 類型:同靜態(tài)與動(dòng)態(tài),弱類型與強(qiáng)類型這些編程的概念類似,參與者既可以全部依賴也可以部分依賴文檔結(jié)構(gòu)來(lái)實(shí)現(xiàn)它的功能。
- 版本:參與者可以依賴服務(wù)接口的特定版本,也可以兼容某個(gè)范圍內(nèi)的版本。所需匹配的版本越確切,參與者在這個(gè)方面上的松耦合性就越差。一個(gè)好的原則是遵循Postel法則(譯者注:Postel’s Law——“Be liberal in what you accept, and conservative in what you send.”):服務(wù)提供者應(yīng)盡可能兼容許多不同的版本,這將使它更加健壯(可能甚至需要容錯(cuò)),服務(wù)使用者應(yīng)盡可能遵循精確的語(yǔ)法和文檔類型。這將增加整個(gè)系統(tǒng)的穩(wěn)定性和靈活性。
- 基數(shù):服務(wù)消費(fèi)者和提供者可能是1對(duì)1的關(guān)系,尤其是在請(qǐng)求或響應(yīng)交互發(fā)生時(shí),或隊(duì)列被明確使用的情況下。在別的情況下,服務(wù)使用者(在這種情況下,稱作“消息發(fā)送者”或“事件源”更為合理)可能既不知道也不關(guān)心有多少人接受了消息。
- 查找(Lookup):參與者打算調(diào)用服務(wù)時(shí),既可以依賴服務(wù)提供者的物理名或邏輯名,也可以先通過(guò)一組功能描述來(lái)執(zhí)行查找(lookup)操作。這意味著存在一個(gè)注冊(cè)表和(或)倉(cāng)庫(kù),對(duì)存儲(chǔ)其中的使用者需求和提供者能力進(jìn)行直接或間接的匹配。
- 接口:參與者可能要綁定到一個(gè)特定的服務(wù)接口或是支持一個(gè)通用的接口。如果使用通用接口,所有該接口的使用者都能與所有該接口的提供者進(jìn)行交互。盡管可能乍看起來(lái)這有些笨拙,但單一通用(統(tǒng)一)接口的原則就是WWW架構(gòu)的核心。
創(chuàng)造一個(gè)滿足以上所有維度的松耦合系統(tǒng),既不可行,也沒必要。不同類型的服務(wù)要做不同的取舍。Carlos Perez的經(jīng)典之作中(如這里和這里)有更多的關(guān)于松耦合各個(gè)維度的討論。
8. 遵循標(biāo)準(zhǔn):一個(gè)SOA應(yīng)用中應(yīng)遵循的一個(gè)關(guān)鍵原則是,
信賴標(biāo)準(zhǔn)而非專有的API和格式。標(biāo)準(zhǔn)存在于技術(shù)方面,如數(shù)據(jù)格式、元數(shù)據(jù)、傳輸協(xié)議;也存在于業(yè)務(wù)層面,如文檔的類型。(例如,UBL中所提到的那些)(譯者注:UBL定義了業(yè)務(wù)文檔的通用XML庫(kù),UBL的文檔類型包括訂單、發(fā)票等)
很顯然,一些人認(rèn)為專有的解決方案,如一些EAI或消息服務(wù)提供商提供的方案,都遵循SOA原則。這個(gè)原則不遺余力地強(qiáng)調(diào)標(biāo)準(zhǔn)的重要性。當(dāng)然,由于有太多可供選擇的標(biāo)準(zhǔn),什么情況用何種標(biāo)準(zhǔn)成了頗具爭(zhēng)議的問題。標(biāo)準(zhǔn)的一個(gè)重要方面是它的可接受性(在Web服務(wù)的標(biāo)準(zhǔn)中,基本上可以認(rèn)為“Microsoft肯定要插上一腳”)。
9. 獨(dú)立于軟件供應(yīng)商:任何架構(gòu)性的原則都不應(yīng)依賴特定供應(yīng)商的產(chǎn)品。將抽象的概念轉(zhuǎn)化為具體的,可運(yùn)行的系統(tǒng)的過(guò)程中,不可避免的要決定使用何種具體的產(chǎn)品,包括商業(yè)的或者免費(fèi)開源的軟件。這些決定都不應(yīng)影響架構(gòu)層。這就意味著要盡可能的依賴互操作性和可移植性的標(biāo)準(zhǔn)。因此,要應(yīng)用支持適當(dāng)標(biāo)準(zhǔn)的技術(shù)來(lái)構(gòu)建服務(wù)提供者和使用者,不要受限于任何軟件供應(yīng)商的技術(shù)路線。
10. 元數(shù)據(jù)驅(qū)動(dòng):SOA中所有的元數(shù)據(jù)對(duì)象都需要被按照一種方式儲(chǔ)存起來(lái),這種方式將確保元數(shù)據(jù)對(duì)象能夠在設(shè)計(jì)和運(yùn)行時(shí)被發(fā)現(xiàn)、檢索和解釋。
元數(shù)據(jù)對(duì)象包括對(duì)服務(wù)接口、參與者、端點(diǎn)和綁定信息、組織單元和職責(zé)、文檔類型或模式、使用者或提供者關(guān)系等的描述。這些對(duì)象的用途應(yīng)當(dāng)是被代碼自動(dòng)生成或者解釋,成為服務(wù)和參與者生命周期的一部分。
以上是我的原則列表。 即使你不完全同意——而坦率地講,我也不希望你完全同意, 至少不是全部都同意——我希望你能帶著它們來(lái)引發(fā)一些討論!
posted @
2010-07-02 11:53 justjavac(迷渡) 閱讀(185) |
評(píng)論 (0) |
編輯 收藏
引領(lǐng)科技為您講解配置 codeigniter,codeigniter 基本配置信息在 application/config/config.php 文件,本文詳細(xì)講解每一個(gè)基本配置選項(xiàng),從而快速掌握 codeigniter 進(jìn)行開發(fā)。
$config['base_url'] = "http://www.example.com/"
您網(wǎng)站的網(wǎng)址,codeigniter 會(huì)根據(jù)這個(gè)網(wǎng)址來(lái)生成鏈接、表單地址等。
$config['index_page'] = "index.php"
codeigniter 根目錄下的 index.php 文件名,codeigniter 會(huì)使用它來(lái)生成鏈接地址。如果使用隱藏 index.php 的 URL,將其設(shè)置為空字符串:$config['index_page'] = ""。
$config['uri_protocol'] = "AUTO"
codeigniter 生成 URL 使用的格式,設(shè)置為“AUTO”自動(dòng)探測(cè)。如果鏈接不能正常工作,可以嘗試以下值:
PATH_INFO、QUERY_STRING、REQUEST_URI、ORIG_PATH_INFO。
$config['url_suffix'] = ""
codeigniter 產(chǎn)生鏈接時(shí)使用的 URL 后綴,如果要實(shí)現(xiàn)偽靜態(tài),可以設(shè)置 $config['url_suffix'] = ".html"。
$config['language'] = "english"
codeigniter 程序默認(rèn)使用的語(yǔ)言
$config['charset'] = "UTF-8"
codeigniter 程序默認(rèn)使用的字符集
$config['enable_hooks'] = FALSE
是否啟用鉤子,鉤子功能使得您可以在不修改系統(tǒng)核心文件的基礎(chǔ)上來(lái)改變或增加系統(tǒng)的核心運(yùn)行功能。
$config['subclass_prefix'] = 'MY_'
設(shè)置擴(kuò)展 codeigniter 類庫(kù)時(shí)使用的類名前綴
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-'
設(shè)置 codeigniter URL 中允許使用的字符,這是一個(gè)正則表達(dá)式。當(dāng)訪問者試圖訪問的 codeigniter URL 包含其它字符時(shí),會(huì)得到一個(gè)警告。應(yīng)該盡量限制 codeigniter URL 使用的字符來(lái)提高安全性,可以有效的過(guò)濾注入攻擊。如果設(shè)置為空,允許使用所有字符,強(qiáng)烈建議不要這么做。
$config['enable_query_strings'] = FALSE
codeigniter URL 默認(rèn)使用分段的 URL,此選項(xiàng)也允許 codeigniter 開啟查詢字符串形式 URL。您可以使用查詢字符串來(lái)傳遞要訪問的控制器和函數(shù)。例如: index.php?c=controller&m=method。codeigniter 默認(rèn)使用分段的 URL,查詢字符串的 URL 很多特性不被支持。
$config['controller_trigger'] = 'c'
codeigniter 將查詢字符串中此選項(xiàng)對(duì)應(yīng)的值當(dāng)做 codeigniter 控制器的名字。
$config['function_trigger'] = 'm'
codeigniter 將查詢字符串中此選項(xiàng)對(duì)應(yīng)的值當(dāng)做 codeigniter 控制器方法的名字
$config['log_threshold'] = 0
啟用錯(cuò)誤日志,設(shè)置記錄哪些類型的錯(cuò)誤。
0 = 關(guān)閉錯(cuò)誤日志記錄
1 = 記錄錯(cuò)誤信息
2 = 記錄調(diào)試信息
3 = 記錄通知信息
4 = 記錄所有信息
$config['log_path'] = ''
如果您不想使用默認(rèn)的錯(cuò)誤日志記錄目錄配置(system/logs/),可以設(shè)置完整的服務(wù)器目錄。
$config['log_date_format'] = 'Y-m-d H:i:s'
codeigniter 錯(cuò)誤日志時(shí)間格式
$config['cache_path'] = ''
如果您不想使用默認(rèn)的緩存目錄(system/cache/)來(lái)存儲(chǔ)緩存,可以設(shè)置完整的服務(wù)器目錄
$config['encryption_key'] = ""
codeigniter 使用的密鑰
$config['global_xss_filtering'] = FALSE
是否對(duì)輸入數(shù)據(jù)(GET、POST)自動(dòng)過(guò)濾跨腳本攻擊
$config['compress_output'] = FALSE
啟用Gzip壓縮達(dá)到最快的頁(yè)面加載速度
$config['time_reference'] = 'local'
設(shè)置時(shí)間格式:"local"、"GMT"
$config['rewrite_short_tags'] = FALSE
如果您想要使用短標(biāo)記,但 PHP 服務(wù)器不支持,codeigniter 可以通過(guò)重寫短標(biāo)記來(lái)支持這一功能。
$config['proxy_ips'] = ''
如果訪問者通過(guò)代理服務(wù)器來(lái)訪問您的網(wǎng)站,您必須設(shè)置代理服務(wù)器 IP 列表,以識(shí)別出訪問者真正的 IP
posted @
2010-07-02 11:49 justjavac(迷渡) 閱讀(1334) |
評(píng)論 (0) |
編輯 收藏
EL表達(dá)式
1、EL簡(jiǎn)介
1)語(yǔ)法結(jié)構(gòu)
${expression}
2)[]與.運(yùn)算符
EL 提供.和[]兩種運(yùn)算符來(lái)存取數(shù)據(jù)。
當(dāng)要存取的屬性名稱中包含一些特殊字符,如.或?等并非字母或數(shù)字的符號(hào),就一定要使用 []。
例如:
${user.My-Name}應(yīng)當(dāng)改為${user["My-Name"] }
如果要?jiǎng)討B(tài)取值時(shí),就可以用[]來(lái)做,而.無(wú)法做到動(dòng)態(tài)取值。例如:
${sessionScope.user[data]}中data 是一個(gè)變量
3)變量
EL存取變量數(shù)據(jù)的方法很簡(jiǎn)單,例如:${username}。它的意思是取出某一范圍中名稱為
username的變量。
因?yàn)槲覀儾]有指定哪一個(gè)范圍的username,所以它會(huì)依序從Page、Request、Session、
Application范圍查找。
假如途中找到username,就直接回傳,不再繼續(xù)找下去,但是假如全部的范圍都沒有找到時(shí),
就回傳null。
屬性范圍在EL中的名稱
Page PageScope
Request RequestScope
Session SessionScope
Application ApplicationScope
4) 1--EL表達(dá)式用${}表示,可用在所有的HTML和JSP標(biāo)簽中作用是代替JSP頁(yè)面中復(fù)雜的JAVA代碼.
2--EL表達(dá)式可操作常量 變量 和隱式對(duì)象. 最常用的 隱式對(duì)象有${param}和${paramValues}.
${param}表示返回請(qǐng)求參數(shù)中單個(gè)字符串的值. ${paramValues}表示返回請(qǐng)求參數(shù)的一組
值.pageScope表示頁(yè)面范圍的變量.requestScope表示請(qǐng)求對(duì)象的變量. sessionScope表示會(huì)話
范圍內(nèi)的變量.applicationScope表示應(yīng)用范圍的變量.
3 --<%@ page isELIgnored="true"%> 表示是否禁用EL語(yǔ)言,TRUE表示禁止.FALSE表示不禁
止.JSP2.0中默認(rèn)的啟用EL語(yǔ)言.
4-- EL語(yǔ)言可顯示 邏輯表達(dá)式如${true and false}結(jié)果是false 關(guān)系表達(dá)式如${5>6} 結(jié)
果是false 算術(shù)表達(dá)式如 ${5+5} 結(jié)果是10
5--EL中的變量搜索范圍是:page request session application 點(diǎn)運(yùn)算符(.)和"[ ]"都是
表示獲取變量的值.區(qū)別是[ ]可以顯示非詞類的變量
2、EL隱含對(duì)象
1)與范圍有關(guān)的隱含對(duì)象
與范圍有關(guān)的EL 隱含對(duì)象包含以下四個(gè):pageScope、requestScope、sessionScope 和
applicationScope;
它們基本上就和JSP的pageContext、request、session和application一樣;
在EL中,這四個(gè)隱含對(duì)象只能用來(lái)取得范圍屬性值,即getAttribute(String name),卻不能取得
其他相關(guān)信息。
例如:我們要取得session中儲(chǔ)存一個(gè)屬性u(píng)sername的值,可以利用下列方法:
session.getAttribute("username") 取得username的值,
在EL中則使用下列方法
${sessionScope.username}
2)與輸入有關(guān)的隱含對(duì)象
與輸入有關(guān)的隱含對(duì)象有兩個(gè):param和paramValues,它們是EL中比較特別的隱含對(duì)象。
例如我們要取得用戶的請(qǐng)求參數(shù)時(shí),可以利用下列方法:
request.getParameter(String name)
request.getParameterValues(String name)
在EL中則可以使用param和paramValues兩者來(lái)取得數(shù)據(jù)。
${param.name}
${paramValues.name}
3.其他隱含對(duì)象
1)cookie
JSTL并沒有提供設(shè)定cookie的動(dòng)作,
例:要取得cookie中有一個(gè)設(shè)定名稱為userCountry的值,可以使用${cookie.userCountry} 來(lái)
取得它。
2)header和headerValues
header 儲(chǔ)存用戶瀏覽器和服務(wù)端用來(lái)溝通的數(shù)據(jù)
例:要取得用戶瀏覽器的版本,可以使用${header["User-Agent"]}。
另外在鮮少機(jī)會(huì)下,有可能同一標(biāo)頭名稱擁有不同的值,此時(shí)必須改為使用headerValues 來(lái)取得
這些值。
3)initParam
initParam取得設(shè)定web站點(diǎn)的環(huán)境參數(shù)(Context)
例:一般的方法String userid = (String)application.getInitParameter("userid");
可以使用 ${initParam.userid}來(lái)取得名稱為userid
4)pageContext
pageContext取得其他有關(guān)用戶要求或頁(yè)面的詳細(xì)信息。
${pageContext.request.queryString} 取得請(qǐng)求的參數(shù)字符串
${pageContext.request.requestURL} 取得請(qǐng)求的URL,但不包括請(qǐng)求之參數(shù)字符串
${pageContext.request.contextPath} 服務(wù)的web application 的名稱
${pageContext.request.method} 取得HTTP 的方法(GET、POST)
${pageContext.request.protocol} 取得使用的協(xié)議(HTTP/1.1、HTTP/1.0)
${pageContext.request.remoteUser} 取得用戶名稱
${pageContext.request.remoteAddr } 取得用戶的IP 地址
${pageContext.session.new} 判斷session 是否為新的
${pageContext.session.id} 取得session 的ID
${pageContext.servletContext.serverInfo} 取得主機(jī)端的服務(wù)信息
4) 條件標(biāo)簽>
1.算術(shù)運(yùn)算符有五個(gè):+、-、*或$、/或div、%或mod
2.關(guān)系運(yùn)算符有六個(gè):==或eq、!=或ne、<或lt、>或gt、<=或le、>=或ge
3.邏輯運(yùn)算符有三個(gè):&&或and、||或or、!或not
4.其它運(yùn)算符有三個(gè):Empty運(yùn)算符、條件運(yùn)算符、()運(yùn)算符
例:${empty param.name}、${A?B:C}、${A*(B+C)}
5) EL函數(shù)(functions)
語(yǔ)法:ns:function( arg1, arg2, arg3 …. argN)
其中ns為前置名稱(prefix),它必須和taglib 指令的前置名稱一置
6) 補(bǔ)充:
<%@ taglib prefix="c" http://java.sun.com/jstl/core_rt">http://java.sun.com/jstl/core_rt" %>
FOREACH:
<c:forEach items="${messages}"
var="item"
begin="0"
end="9"
step="1"
varStatus="var">
……
</c:forEach>
OUT:
<c:out value="/${logininfo.username}"/>
c:out>將value 中的內(nèi)容輸出到當(dāng)前位置,這里也就是把logininfo 對(duì)象的
username屬性值輸出到頁(yè)面當(dāng)前位置。
${……}是JSP2.0 中的Expression Language(EL)的語(yǔ)法。它定義了一個(gè)表達(dá)式,
其中的表達(dá)式可以是一個(gè)常量(如上),也可以是一個(gè)具體的表達(dá)語(yǔ)句(如forEach循環(huán)體中
的情況)。典型案例如下:
? ${logininfo.username}
這表明引用logininfo 對(duì)象的username 屬性。我們可以通過(guò)“.”操作符引
用對(duì)象的屬性,也可以用“[]”引用對(duì)象屬性,如${logininfo[username]}
與${logininfo.username}達(dá)到了同樣的效果。
“[]”引用方式的意義在于,如果屬性名中出現(xiàn)了特殊字符,如“.”或者“-”,
此時(shí)就必須使用“[]”獲取屬性值以避免語(yǔ)法上的沖突(系統(tǒng)開發(fā)時(shí)應(yīng)盡量避免
這一現(xiàn)象的出現(xiàn))。
與之等同的JSP Script大致如下:
LoginInfo logininfo =
(LoginInfo)session.getAttribute(“l(fā)ogininfo”);
String username = logininfo.getUsername();
可以看到,EL大大節(jié)省了編碼量。
這里引出的另外一個(gè)問題就是,EL 將從哪里找到logininfo 對(duì)象,對(duì)于
${logininfo.username}這樣的表達(dá)式而言,首先會(huì)從當(dāng)前頁(yè)面中尋找之前是
否定義了變量logininfo,如果沒有找到則依次到Request、Session、
Application 范圍內(nèi)尋找,直到找到為止。如果直到最后依然沒有找到匹配的
變量,則返回null.
如果我們需要指定變量的尋找范圍,可以在EL表達(dá)式中指定搜尋范圍:
${pageScope.logininfo.username}
${requestScope.logininfo.username}
${sessionScope.logininfo.username}
${applicationScope.logininfo.username}
在Spring 中,所有邏輯處理單元返回的結(jié)果數(shù)據(jù),都將作為Attribute 被放
置到HttpServletRequest 對(duì)象中返回(具體實(shí)現(xiàn)可參見Spring 源碼中
org.springframework.web.servlet.view.InternalResourceView.
exposeModelAsRequestAttributes方法的實(shí)現(xiàn)代碼),也就是說(shuō)Spring
MVC 中,結(jié)果數(shù)據(jù)對(duì)象默認(rèn)都是requestScope。因此,在Spring MVC 中,
以下尋址方法應(yīng)慎用:
${sessionScope.logininfo.username}
${applicationScope.logininfo.username}
? ${1+2}
結(jié)果為表達(dá)式計(jì)算結(jié)果,即整數(shù)值3。
? ${i>1}
如果變量值i>1的話,將返回bool類型true。與上例比較,可以發(fā)現(xiàn)EL會(huì)自
動(dòng)根據(jù)表達(dá)式計(jì)算結(jié)果返回不同的數(shù)據(jù)類型。
表達(dá)式的寫法與java代碼中的表達(dá)式編寫方式大致相同。
IF / CHOOSE:
<c:if test="${var.index % 2 == 0}">
*
</c:if>
判定條件一般為一個(gè)EL表達(dá)式。
<c:if>并沒有提供else子句,使用的時(shí)候可能有些不便,此時(shí)我們可以通過(guò)<c:choose>
tag來(lái)達(dá)到類似的目的:
<c:choose>
<c:when test="${var.index % 2 == 0}">
*
</c:when>
<c:otherwise>
!
</c:otherwise>
</c:choose>
類似Java 中的switch 語(yǔ)句,<c:choose>提供了復(fù)雜判定條件下的簡(jiǎn)化處理手法。其
中<c:when>子句類似case子句,可以出現(xiàn)多次。上面的代碼,在奇數(shù)行時(shí)輸出“*”號(hào),
而偶數(shù)行時(shí)輸出“!”。
經(jīng)驗(yàn):1、如果EL表達(dá)式無(wú)法解析:– <%@ page isELIgnored="false" %>
一、 JSTL
1、EL運(yùn)算符>;
2)var指定變量,并把EL運(yùn)算結(jié)果賦值給該變量值為true/false;
3)scope:指定 var變量的范圍;
6、迭代標(biāo)簽
語(yǔ)法:<c:forEach items=“collection” var=“name” varStatus=“status” begin=“int“
end=”int” step=“int” >
//循環(huán)體
</c:forEach>
說(shuō)明:1)items:是集合,用EL表達(dá)式;
2)var:變量名,存放items
3)varStatus: 顯示循環(huán)狀態(tài)的變量
①index:從0開始;
②count:元素位置,從1開始;
③first:如果是第一個(gè)元素則顯示true;
④last:如果是最后一個(gè)元素則顯示true;
4)begin:循環(huán)的初始值(整型);
5)end: 循環(huán)結(jié)束 ;
6)step:步長(zhǎng),循環(huán)間隔的數(shù)值;
7、<c:otherwise>標(biāo)簽
例:
如果user.wealthy值true,則顯示user.wealthy is true.
<c:choose>
<c:when test="">
user.generous is true.
</c:when>
<c:when test="">
user.stingy is true.
</c:when>
<c:otherwise>
user.generous and user.stingy are false.
</c:otherwise>
</c:choose>
說(shuō)明:只有當(dāng)條件user.generous返回值是true時(shí),才顯示user.generous is true.
只有當(dāng)條件user.stingy返回值是true時(shí),才顯示user.stingy is true.
其它所有的情況(即user.generous和user.stingy的值都不為true)全部顯示user.generous and
user.stingy are false.
由于JSTL沒有形如if (){…} else {…}的條件語(yǔ)句,所以這種形式的語(yǔ)句只能用<c:choose>、
<c:when>和<c:otherwise>標(biāo)簽共同來(lái)完成了。
8、c:forTokens>標(biāo)簽
說(shuō)明:
items 進(jìn)行循環(huán)的項(xiàng)目 是 無(wú)
delims 分割符 是 無(wú)
begin 開始條件 否 0
end 結(jié)束條件 否 集合中的最后一個(gè)項(xiàng)目
step 步長(zhǎng) 否 1
var 代表當(dāng)前項(xiàng)目的變量名 否 無(wú)
varStatus 顯示循環(huán)狀態(tài)的變量 否 無(wú)
例子:
<c:forTokens items="a:b:c:d" delims=":" var="token">
<c:out value=""/>
</c:forTokens>
這個(gè)標(biāo)簽的使用相當(dāng)于java.util.StringTokenizer類。在這里將字符串a(chǎn):b:c:d以:分開循環(huán)四次,
token是循環(huán)到當(dāng)前分割到的字符串。
9、<c:redirect>標(biāo)簽
說(shuō)明:標(biāo)簽將請(qǐng)求重新定向到另外一個(gè)頁(yè)面,它有以下屬性 屬性 描 述 是否必須 缺省值
url url地址 是 無(wú)
context /后跟本地web應(yīng)用程序的名字 否 當(dāng)前應(yīng)用程序
例子:
<c:redirect /'>http://www.yourname.com/login.jsp"/>
將請(qǐng)求重新定向到http://www.yourname.com/login.jsp頁(yè),相當(dāng)于response.setRedirect
("http://www.yourname.com/login.jsp");
10、<c:param>標(biāo)簽
說(shuō)明:<c:param>標(biāo)簽用來(lái)傳遞參數(shù)給一個(gè)重定向或包含頁(yè)面,它有以下屬性屬 性 描 述 是否
必須 缺省值
name 在request參數(shù)中設(shè)置的變量名 是 無(wú)
value 在request參數(shù)中設(shè)置的變量值 否 無(wú)
例子:
<c:redirect url="login.jsp">
<c:param name="id" value="888"/>
</c:redirect>
將參數(shù)888以id為名字傳遞到login.jsp頁(yè)面,相當(dāng)于login.jsp?id=888
11、<fmt:>格式化標(biāo)簽
說(shuō)明:需要導(dǎo)入 <%@ taglib prefix="fmt" http://java.sun.com/jsp/jstl/fmt">http://java.sun.com/jsp/jstl/fmt" %>
1)格式化日期<fmt:formatDate value=“” pattern=“yyyy-MM-dd HH:mm:ss”/>
Value:通過(guò)EL表達(dá)式或<%new Date() %> 取的日期值;
Pattern:輸出的日期格式;
2) 格式化數(shù)字<fmt:formatNumber
value="${n}" pattern="###,###.##" />
posted @
2010-07-02 11:41 justjavac(迷渡) 閱讀(899) |
評(píng)論 (0) |
編輯 收藏
<!-- --> 這樣是行注釋的。也可以用作多行。。但是 可能有些瀏覽器 不支持CSS的 則跳過(guò) <!-- --> 里面的內(nèi)容繼續(xù)執(zhí)行。。
/* */ 是 塊注釋的
jsp 注釋 // <!-- --> 已測(cè)試
HTML 注釋 <!-- --> 已測(cè)試,有的說(shuō)這個(gè)/* */也能,但我試了好幾次它還是顯示
asp 注釋 ' 已測(cè)試
css 注釋 <!-- --> /* */
java 注釋 // /* */ /** */ 已測(cè)試
posted @
2010-07-02 11:38 justjavac(迷渡) 閱讀(136) |
評(píng)論 (0) |
編輯 收藏
1.你可以打開一個(gè)窗口然后點(diǎn)擊,工具—文件夾選項(xiàng)—查看—顯示所有文件夾
選擇所要文件,右鍵屬性,將“隱藏”前面的勾去掉就可以。
還有另外一種方法,就是在開始-程序-附件-命令提示符下用dir -a 查看就可以看見隱藏的文件,
然后你再用Attrib -s -h -r “路徑和文件名”其中-s 表示減去系統(tǒng)屬性 -h 表示減去隱藏屬性 -r 表示減去只讀屬性。
另外你如果愿意的話還可以為文件加上以上的屬性,把-號(hào)變成+號(hào)就可以了。
2.選擇“工具→文件夾選項(xiàng)→查看→顯示所有文件和文件夾”,點(diǎn)確定。本來(lái)應(yīng)該就把隱藏的文件顯示出來(lái)的,但是隱藏的文件并沒有顯示出來(lái),重復(fù)上次操作發(fā)現(xiàn)“查看”中“隱藏文件和文件夾”一欄中它自動(dòng)又跳為“不顯示隱藏文件和文件夾”這讓我很苦惱,因?yàn)槲乙虼苏也坏轿宜幸呀?jīng)設(shè)置為隱藏的文件……
解決方法有三:
a.
運(yùn)行regedit,找到[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\SHOWALL],將CheckedValue的值改為1
b.
將下面的內(nèi)容復(fù)制到記事本,保存為reg的注冊(cè)表信息文件,然后雙擊導(dǎo)入:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\SHOWALL]
"RegPath"="Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced"
"Text"="@shell32.dll,-30500"
"Type"="radio"
"CheckedValue"=dword:00000001
c.
如果操作后還是無(wú)法顯示隱藏文件,可以復(fù)制下列內(nèi)容到記事本中,另存為一個(gè)reg文件,然后雙擊運(yùn)行即可。
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\NOHIDDEN]
"RegPath"="Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced"
"Text"="@shell32.dll,-30501"
"Type"="radio"
"CheckedValue"=dword:00000002
"ValueName"="Hidden"
"DefaultValue"=dword:00000002
"HKeyRoot"=dword:80000001
"HelpID"="shell.hlp#51104"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\SHOWALL]
"RegPath"="Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced"
"Text"="@shell32.dll,-30500"
"Type"="radio"
"CheckedValue"=dword:00000001
"ValueName"="Hidden"
"DefaultValue"=dword:00000002
"HKeyRoot"=dword:80000001
"HelpID"="shell.hlp#51105"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\SuperHidden]
"Type"="checkbox"
"Text"="@shell32.dll,-30508"
"WarningIfNotDefault"="@shell32.dll,-28964"
"HKeyRoot"=dword:80000001
"RegPath"="Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced"
"ValueName"="ShowSuperHidden"
"CheckedValue"=dword:00000000
"UncheckedValue"=dword:00000001
"DefaultValue"=dword:00000000
"HelpID"="shell.hlp#51103"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\SuperHidden\Policy]
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\SuperHidden\Policy\DontShowSuperHidden]
@=""
說(shuō)明:
將選項(xiàng) CheckedValue 的值改成 0 然后再將系統(tǒng)屬性設(shè)置成不顯示隱藏文件,這樣,你隱藏的文件就徹底隱藏了,即使顯示全部文件,你隱藏的文件也不會(huì)顯示的。不僅如此,電腦里面所有隱藏文件將全部不被顯示。如果需要顯示,只要將選項(xiàng) CheckedValue 的值改成 1 ,再將系統(tǒng)屬性設(shè)置成顯示全部文件即可。
3.問題:
我使用的是Windows2000系統(tǒng),我把"文件夾選項(xiàng)"中的"查看"設(shè)為"不顯示隱藏的文件和文件夾"時(shí),電腦上隱藏的文件反而能看見,設(shè)為"顯示所有文件和文件夾"時(shí),這些文件反而隱藏了,這是怎么回事?
解決:
在運(yùn)行中輸入regedit,打開注冊(cè)表編輯器.定位到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\NOHIDORSYS,將CheckedValue設(shè)置為0;再定位到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\SHOWALL,將CheckedValue設(shè)置為1即可。
posted @
2010-07-02 11:36 justjavac(迷渡) 閱讀(139) |
評(píng)論 (0) |
編輯 收藏
<一>
你不會(huì)有那美麗的相逢,除非之前,你能忍受等待的孤獨(dú).
你不會(huì)有那明朗的清晨,除非之前,你的睡夢(mèng)能忍受黑夜的迷霧。
你也不會(huì)贏得任何東西,除非你敢于投下賭注.
賭注,生命的賭注,就是你的腳步!
但是你不會(huì)找到路,除非你敢于迷路.
因?yàn)?,只有讓你迷路的地方,才是你真正的出?
<二>
有多少次此刻的離別,就有多少次彼時(shí)的相逢.
有多少次此刻的酒醉,就有多少次彼時(shí)的痛醒.
所以你應(yīng)該理解一個(gè)人的沉默,就是一個(gè)人最多的話語(yǔ).
你也應(yīng)該理解一個(gè)人的憂傷,之所以憂傷,一定是因?yàn)樗豢仙釛壞承┛鞓?
<三>
暖一壺茶,在寒冷的冬季里,讓溫氣升騰,但朋友,別忘了,除了爐火,還有那寒風(fēng)賜予了這壺茶以溫度.
我相信,最溫暖來(lái)自寒冷.我相信,最溫暖,其實(shí)是對(duì)寒冷的一種諒解.
<四>
生命確實(shí)有兩層-----
一個(gè)浪打礁石,海鳥驚逃,以為是一次謀殺,
一個(gè)浪撲上海灘,孩子歡喜,以為是大海開出了鮮花.
同樣的事物,有不同樣的感受.
所以世界是什么樣的,并不重要,重要的是生命的心靈。
世界往往是什么樣子,往往取決于你的心靈是什么樣子.
莫要過(guò)分誤解這個(gè)世界,請(qǐng)先看看自己的心靈的模樣.
<五>
愛的方式有許多種,
而愛是一種動(dòng)機(jī),愛的動(dòng)機(jī)是誠(chéng)實(shí)而純潔的,
但愛的方式卻不可靠。
即使你有愛,你愛著,可你愛的方式是否避免著偏執(zhí)---
朋友,請(qǐng)不要采摘那些花朵,除非你能保證,一起搬走整個(gè)森林的田野
>>>>>>查看
posted @
2010-07-02 11:34 justjavac(迷渡) 閱讀(146) |
評(píng)論 (0) |
編輯 收藏
當(dāng)母親帶著疲憊的微笑將你捧給世界,你已經(jīng)是一座高山,是一片大海了。性別交給你一副重?fù)?dān),指給你一條路,對(duì)你說(shuō):走吧,你這男子漢!于是你便要長(zhǎng)一副錚錚鐵骨,把腳下堅(jiān)實(shí)的土地踏得咚咚作響,去完成你的使命、你的光榮、你的答卷。
當(dāng)洪水涌來(lái)的時(shí)候,你要退在最后;當(dāng)大火燃燒的時(shí)候,你卻要撲在前邊。因?yàn)槟闶悄腥?,你就?yīng)該有一副俠肝義膽!
當(dāng)朋友成功的時(shí)候,你要大碗喝酒;與女友分手時(shí),要真誠(chéng)地說(shuō)聲道歉。因?yàn)槟闶悄腥耍憔蛻?yīng)該如此氣壯心寬。
因?yàn)槟闶悄腥?,所以,?duì)女兒你應(yīng)是一棵結(jié)滿故事的大樹,對(duì)妻子你應(yīng)是一片金色的沙灘,對(duì)父母更該是一座物產(chǎn)豐富的大山。
因?yàn)槟闶悄腥耍簧鸵兴删汀2粦卸?,不僥幸,不虛榮,不欺騙,不流淚,不妒嫉,不后悔,不自卑,不獻(xiàn)媚,不投機(jī),不唯利是圖,不 抱怨,男人就應(yīng)該堂堂正正、磊磊落落、風(fēng)度翩翩。
做個(gè)好男人也是一項(xiàng)事業(yè)啊。一個(gè)民族僅有女人的光榮是不夠的,陰盛陽(yáng)衰對(duì)每個(gè)男人來(lái)說(shuō)都應(yīng)該覺得行穢自慚。
也許你很矮,但好男人博大的胸懷才情會(huì)使你頂天立地;也許你很弱,但好男人堅(jiān)定的意志品格將賦予你狹義鐵肩;也許你惡疾纏身,但好男人的字典里根本沒有傷殘。
男人,光榮的性別。這光榮的全部?jī)?nèi)涵就在于去承擔(dān)責(zé)任和義務(wù)做出犧牲和奉獻(xiàn)。做個(gè)好男人吧!你別無(wú)選擇,因?yàn)槟阋呀?jīng)是個(gè)男人了。
>>>>>>>查看
posted @
2010-07-02 11:33 justjavac(迷渡) 閱讀(158) |
評(píng)論 (0) |
編輯 收藏