原文地址:http://www.javaeye.com/wiki/struts2/1356-how-to-use-ognl-in-struts2#1612
閱讀、仔細閱讀、反覆閱讀每個開源框架自帶的reference
1. 看英文文檔太吃力
應該說閱讀英文文檔是每個程序員的基本素質之一,這就跟調程序需要耐心一樣。如果你連調試程序的耐心都沒有,那麼趁早放棄程序員這個行當吧。其實閱讀文檔,尤其是英文文檔,也是程序員的基本素質,這個素質是一點一點積累培養起來的。所以,對於那些實在覺得吃力的朋友,我的建議是結合中文文檔一起看。好在滿江紅的開源支持者爲你精心做了許多很有價值的翻譯,例如Spring,Hibernate等都有對應的中文文檔。但是我依舊認爲,看中文文檔,必須和英文文檔對照,否則你就可能迷失在許多的語義不匹配上。
2. reference實在太厚而抓不住思路
耐心,耐心,還是耐心。從reference的質量而言,其實多數的開源框架的reference都是相當優秀的。尤其是Struts2,基本上都是一個一個的專題wiki文章拼起來的文檔。至於說到Spring,那隻能培養你的耐心了。
我之所以強烈推薦大家仔細閱讀開源框架自帶的reference,主要基於以下的兩個原因:
1. 這些自帶的reference多數出自這些開源框架的作者之手。你說還有誰能夠比他們自己更瞭解他們自己的產品呢?自己寫的程序,到底有哪些優點,如何使用,自己肯定是最最清楚的,所以要說到權威,不可能有任何的文檔比自帶的reference更加權威。
2. 自帶的reference幾乎很少犯錯,所以不會給你帶來什麼的誤導信息。不僅如此,許多的reference已經爲你總結了許多框架使用過程中的最佳實踐。有那麼好的事情,爲什麼我們不直接去看這些reference來獲得第一手的資料呢?
當然,很多人看reference會覺得很枯燥。沒關係,我的建議是,多看幾遍。第一遍,你可以採取scan的方式,目的是瞭解框架的大概。第二遍,挑重點的章節仔細閱讀,並且輔以一定的代碼實踐。第三遍,帶着碰到的問題閱讀,在文檔中尋找答案。
少讀、精讀網絡教程,堅決不讀有價書籍
目前市場上任何的有價書籍,我認爲完全沒有閱讀的必要。這些書籍的一大特點是貴,將花費你大量的銀子。而且這些書籍錯誤繁多,所挑出的示例也基本上毫無實踐意義。更加可悲的是,這些書籍中的很多示例,作者在寫的時候根本不動腦筋,也不會包含程序開發中的一些最佳實踐,甚至會給很多讀者以:“程序就是這麼寫的”這樣的誤導。
網絡上還有很多原版的教程,例如《XXX in Action》系列。《XXX in Action》系列的書籍在市場上深受好評。這些系列的書籍我很多都讀過,我並不認爲這一系列的叢書相對於框架自帶的reference有什麼過人之處,有某些地方的理解也帶有一些作者個人的感情色彩。其實每個人寫書或者寫文章都會帶上自己的感情色彩,這本不是什麼壞事,不過既然已經有了 reference,爲什麼我們要捨近求遠呢?當然,不得不說,這個系列的書籍還是寫得相當不錯的,只是相對reference而言,不如 reference來的好了。
同時,網友也提到了很多網絡教程。網絡教程,尤其是中文的網絡教程,基本上都是網友的經驗之談,也有寫成系列文章的。對於網絡教程,我的意見是:少讀,精讀。因爲網絡教程是網友自發的,而我不得不說,許多網友寫的網絡教程是一塌糊塗,誤導世人的。同時,也有很多網絡寫的網絡教程相當不錯,可以作爲入門級別的參考資料。但是對於初學者來說,根本很難分辨其中的好壞真僞。完全憑藉運氣去賭大小,押寶押對了就對了,押錯了就自認倒黴。所以,針對網絡教程,最好是帶着問題去讀,去搜索你的答案,而不是當作核心文檔來閱讀。
搭建環境運行每個開源框架自帶的sample項目
以Struts2爲例,Struts2的根目錄下有一個apps的目錄,裏面有struts2-blank-2.0.11.war,struts2-showcase-2.0.11.war,struts2-portlet-2.0.11.war等war包。你只要把這些war包放到任何的application server的運行環境下即可運行。比如,你可以放到Tomcat的webapps目錄下,啓動Tomcat,你就可以直接訪問到一個內置了衆多Struts特性的項目了。
其實你可以從這些項目中獲得許許多多有用的信息。不僅如此,一旦你在使用Struts2的某些特性的時候發生了無法解決的困難,你往往也能從這些項目中找到一些解決問題的方案。更加能讓你放心的是,至少這些項目表達了Struts2的作者原本的意思,你只要按照它的sample來寫代碼,總不會錯到哪裏去。
在這裏,我簡單舉例來說明你可以從這些項目中學到些什麼:
1. 如果你仔細學習struts2-blank-2.0.11.war這個項目,它可以告訴你如何搭建一個最最簡單的Struts2的項目;它還會告訴你,Struts2至少需要依賴哪些jar包(請以後不要再爲jar包錯誤而苦惱);同時,也給你做出了一些範例,web.xml怎麼寫,struts.xml又怎麼寫。
2. struts2-showcase-2.0.11.war這個項目,你則可以看到Struts2的特性的大雜燴,這對於你看reference是相當有幫助的。比如說,你在看文檔時看到了"文件上傳"的章節,那麼你就可以參考項目中的upload子目錄。相當於你一邊看文檔,一邊已經有一個現成的跑得通的例子在這裏提供給你。這是不是要比那些所謂的網絡教程更實際呢?
3. struts2-portlet-2.0.11.war則給出了在Portal環境下的Struts2的應用。
所以,綜合來說,框架自帶的項目絕對是你學習的第一手資料,你基本上不需要捨近求遠得去找網絡上別人寫的例子,原生態,不好嘛?
自己寫一個sample項目親身體驗
所以,實踐是檢驗真理的唯一標準。只有自己親自動手去實踐,才能說你真正掌握了某個技術,理解了某個框架。在編寫自己的sample項目時,你不妨就以最簡單的User的增刪改查作爲你的業務場景,在實踐中不斷的重構你的代碼,從而提升自己的水平。
帶着問題debug開源框架的源碼
我看開源框架的源碼的方式有些特殊,我喜歡在程序裏做debug,來看看在開源框架的內部,到底運行了哪些類,他們是如何執行的。我堅決反對逐個包逐個包的去看源碼,這毫無意義。因爲這相當於把一個肢體進行了分解,一個運行狀態良好的程序,你把它割裂開來,顯然什麼都讀不懂。在程序中debug源碼,你不僅可以瀏覽到程序執行過程中的每個類,還能查看這些類的運行狀態。這纔是閱讀源碼之道。