最近論壇上看到好幾個朋友都在問,如何學習 Java的問題,”我已經學習了J2SE,怎么樣才能轉向J2EE?”, “我看完了Thinking in Java, 可以學習J2EE了么?”.于是就有了寫這篇文章的想法,希望能幫助初學者少走一些彎路。也算是對自己幾年來學習Java的一個總結吧.
在開始之前有必要再討論一下J2ME, J2SE, J2EE這些概念。
J2SE, The Micro Edition of the Java 2 Platform. 主要用于嵌入式Java,如手機,PDA等等。
J2SE, Java 2 Platform, Standard Edition, 我們通常所說的JDK(Java Development Kit)包含在此,是J2EE的基礎。
J2EE, Java 2 Platform, Enterprise Edition , 就是所謂的企業級Java. 這些只是從API級別上的劃分,實際上Sun給J2EE的定義是:開發基于組件的多層的企業級應用的規范。也就是為各種不同的技術定義一個Java的規范,使這些不同的技術結合起來,在Java平臺上構建強壯的企業級應用。從這一點來看,J2EE這個概念應該是涵蓋J2ME, J2SE的。比如一個典型的J2EE應用,網上商店, 它支持web 方式下訂單,也支持手機下訂單。顯然必須用到J2SE,J2ME. 所以也就不存在所謂的從J2SE轉向J2EE的問題了,只是后者包含的范圍更廣而已。
來看看Sun給出的J2EE 相關技術主要分為幾大塊。
1.
Web Service技術- Java API for XML Processing (JAXP)
- Java API for XML Registries (JAXR)
- Java API for XML-based RPC (JAX-RPC)
- SOAP with Attachments API for Java (SAAJ)
2.
組件模型技術(Component Model Technologies)- Java Servlet
- JavaServer Pages
- JavaServer Faces
- Enterprise JavaBeans
- Java Message Service
- J2EE Connector Architecture
3 .
管理技術(Management Technologies)- J2EE Deployment Specification
- J2EE Management Specification
- J2EE Client Provisioning
- Java Authorization Contract for Containers
4.
其他相關技術(Other J2EE Technologies)- JDBC
- Java Data Objects (JDO)
- CORBA (Java IDL and Java RMI-IIOP)
- JavaMail
- Transactions
如此之多的技術難免使初學者無所適從,望而卻步。即使是一位經驗豐富的J2EE 開發者,又有幾個人敢說J2EE相關的技術我都熟練掌握了。不過作為一名普通J2EE應用程序的開發者來說,我們只需要重點學習其中的一部分技術就可以了,對于其他部分只要做到心中有數,哪天需要用到了知道跑哪里去找到資料就行了。以我個人的觀點,下面這些技術是一般J2EE應用開發人員所必須熟練掌握的。Java Server Page, Java Servlet, Enterprise JavaBean, JDBC, Transactions. 還有JAXP等XML相關技術,Java Message Service, Java Mail, JDO等等是最好應該掌握的。其他Management Technologies,Connector Architecture等等主要是給容器提供商中間件提供商參考的,應用開發者不需要怎么關心,等用到了再去學習也不遲.
語言學習篇
首先是J2SE基礎.學習一門新技術,無外乎閱讀和實踐了. 而一本好的參考書對于初學者來說顯得格外重要. 現在市面上的 Java書籍可以說是鋪天蓋地, 質量也是良莠不齊, 令初學者無所適從. 所以還是先推薦幾本書籍吧. 目前對于 Java基礎知識,大家一般都比較推薦兩本書, <<Thinking In Java>> 和 << Core Java(TM) 2, Volume I?Fundamentals >>. 第一本書不必多說了, Bruce Eckel 的大作, Jolt獲獎書籍. 內容比較全面, 基本涵蓋了java語言的方方面面. 這本書提供了相當豐富的例子, 非常有利于對學習內容的了解. 另外書中第一部分對于OO基本書籍的介紹, 我覺得對于剛接觸OO的人來說幫助會很大. 而且此書是Open Source的, 可以從作者網上下載
http://www.mindview.net/Books/TIJ/而對于習慣于讀中文版的學習者來說, 侯捷翻譯的中文版是不錯的選擇. 要說這本說的缺點可能就是對于初學者來說厚了一點, 這也是一些人并不推薦此書作為初學者學習用書的原因吧. 后面一本<<Core Java(TM) 2, Volume I?Fundamentals>>, 目前已經是第七版了, 單從它出版的次數來看也可以看出此書受歡迎的程度, 這本書特點也是講述比較全面系統, 基本上一路啃下來的話Java語言基礎應該算過關了. 缺點也是太厚了, 有點像參考手冊, 前面部分花了不少篇幅講 Swing和Applet,可能對初學者不是很有用. 還有一些像<< Java in a nutshell>>也是比較不錯的基礎書籍.
學習了基本的語言基礎,別忘了最重要也是最有用的資料還是JDK文檔. 從你學習java的第一天開始JDK文檔應該是常備手頭了. 如果你碰到問題首先想到的是到論壇上去提問而不是查閱Jdk文檔, 那先別繼續往下學習了,學會查JDK文檔先. 不夸張的說在我們的初學者論壇中60%的問題是光查一下JDK文檔就能解決問題的. 最新JDK Documentation下載地址
http://java.sun.com/j2se/1.4.2/download.html(目前最新版是J2SE5
http://java.sun.com/j2se/1.5.0/download.jsp)不能光說不練, 同一下載頁面把JDK給下載回來. 安裝完后有一點我想提一下, 安裝路徑下有一個src.zip(有些jdk版本是src.jar), 好東西啊---JDK源代碼, 老是有人在論壇上問哪里有JDK源代碼下載, 你說東西就放在你家里還到處找. 有了這個有些問題就需要在論壇上跟人家爭來爭去了,翻開源代碼瞧一下什么疑問都沒有了. 幾個最重要的命令行工具是
javac : 編譯源文件到class文件
java: 運行class
jar : 打包工具.
Javadoc : 生成java doc的工具.
對于初學java的人來說, 我不推薦使用IDE而 直接用文本編輯器, 然后用命令行編譯運行. 這樣有利于理解CLASSPATH, PATH這些最基本概念. CLASSPATH是初學者比較容易感覺迷惑的地方.現在的 IDE太聰明了, 給個名字就給你自動生成java source code, 自動編譯. 可能你運行完了你的第一個Hello World 程序, 還不知道java 和 javac是用來做什么的. 至于實際的項目開發, 一款合適的IDE還是十分重要的, 我們稍后再對java 開發工具做一些介紹.
J2EE 基礎和Java語言進階
學習完語言基礎, 就可以比較自然地轉入J2EE實際技術的學習了. J2EE實在是比較龐雜, 而EJB, Servlet , 這些核心技術是作為每一個J2EE開發人員所需要掌握的. 關于servlet, 我比較推薦<<Core Servlet and JSP 2Edition>>和<<More Servlets and Java Server Pages>>, 第一本是Sun推薦的Servlet教材. 第二本是當年Amazon最暢銷Java書籍, 五星級書籍. 這本書機械工業出版社有中文版叫<<Servlet 與JSP權威指南>>,感覺翻譯得還可以, 第二版好像還沒有看到有中文版. 兩本書都全面系統地介紹了JSP和Sevlet知識, 從web服務器配置, JSP, Servlet基本編程, 標記庫(Tag Lib), 過濾器, 事件框架都有很好地描述. 提供地例子也比較實用. 對于EJB學習, 比較著名有兩本書, << Enterprise JavaBeans, 3nd Edition>> 和<< Mastering Enterprise Java Beans Third Edition>>, 兩位作者Richard Monson, Ed Roman都是屬于業界重量級人物.而Richard Monson本身就是EJB規范專家組成員.對我來說, 兩本書難分優劣, 第二本書有個好處就是可以免費下載
http://www.theserverside.com/books/wiley/masteringEJB/index.tss.
還是那句話,不能光說不練, 不過J2EE 的練習做起來有一點麻煩, 應用服務器是不可少的, 最好還得準備個輕量級的數據庫. 下面簡單介紹一下這些工具.
web服務器(Servlet Container)方面有.
Tomcat.
http://jakarta.apache.org/tomcat/Jetty:
http://jetty.mortbay.org/jetty/應用服務器常用的有,
Jboss:
http://www.jboss.org/products/indexWeblogic:
http://www.bea.com/framework.jsp?CNT=index.htm&FP=/content/products/serverWebSphere:
http://www-128.ibm.com/developerworks/downloads/ws/was/?S_TACT=105AGX28&S_CMP=DLMAIN.
Tomcat, Jetty, Jboss都是Open Source. Weblogic 和 WebSphere是J2EE服務器中的老大級人物, 價格也不菲. 不過對于開發者有免費的試用版下載.
如果單單只是學習Servlet, 推薦使用Tomcat, 它是Sun官方指定的Servlet, JSP規范的參考實現.. 對初學者最重要的是它使用比較簡單, 自帶文檔比較齊全, 使用者眾多, 有什么問題容易在論壇上面得到幫助. 如果學習EJB的話, 推薦使用Jboss, 不僅僅是因為它是Open Source的,主要是配置比較簡單, 使用方便. 比如說對于連接數據庫, 對于常用的MySQL, Oracle , MS SQL等等都提供了Sample Config文件, 直接拿過來做些小改動扔到Deploy目錄下就可以用 DataSource了, 部署J2EE應用也簡單, 把整個 .ear或者.war扔到deploy下就可以了. 唯一不方便的地方是從 Jboss3.0開始, 它的文檔開始收費了. 但是對于一些基本的配置, 在網上還是非常容易找到的, 畢竟它太流行了. 至于 Weblogic, 也比較容易使用, 不過比起Jboss來個頭大了很多, 通過強大的管理界面使得一些常用的配置工作變得十分簡單. 和Jboss比起來它的文檔就太多了, 簡直是有點羅里八嗦, 比如要部署一個.ear文件, 一般我們也就是直接扔到domain下的applications目錄下就會自動deploy了, 但是要看它的文檔可是長篇大論, 容易嚇著初學者, 以為這又是什么高深的學問. 至于WebSphere, 個人不推薦初學者使用, 相比前倆個Server比較難使, 而且狂吃內存.不過在企業級市場這個家伙表現不俗, 畢竟是出生于IBM這樣的豪門.
數據庫方面, 目前常見的主要有PostgreSQL, MySQL, Oracle, MS SQL, DB2等等.前面兩個是開源數據庫, 后面幾個基本上壟斷著大部分的數據庫市場. 對于初學者用來做做EJB, JDBC的練習, 我推薦MySQL, 理由還是很簡單, 開源軟件不要錢, 個頭小使用方面, 用戶眾多文檔齊全. 下載地址
http://www.mysql.com/products/mysql/. PostgreSQL也可以考慮, 不過國內使用者遠不如MySQL多, 所以要在論壇上問起問題來就少方便一些了, 下載地址
這個階段, 在看書的同時, 可以結合著學習一些優秀的開源項目的源代碼. 這些開源項目的代碼風格, 注釋都是值得借鑒的. 實在太懶也別忘了手頭上還有個Jdk的源代碼. 其實也不用刻意去找源代碼, 在實際的J2EE項目開發中, 基本上都會用到一些優秀的開源項目. Framework可能會用到Spring, Struts, Log機制基本上都會JarkartaCommons Log或者Log4j, 單元測試會大多會用Junit, 結合項目閱讀一下其中的一些源代碼, 既可以提高自己又對項目會有所幫助, 說不定因此而得到PM的賞識呢. 一舉兩得, 何樂而不為呢. 呵呵, 有點扯遠了. 過了初學者階段,該學會如何找到適合自己的Java書籍了. 歷經數十載, 今天的Java技術已經變的如此之龐雜, 我相信即使窮凈一個人畢生之精力也不可能把Java所有的相關技術都學通, 何況新技術還在層出不窮地推出, 3年之前誰會知道Struts會成為Web框架事實上的工業標準. 2年之前誰會知道Hibernate會在今天獨領風騷. 既然已經不能指望一次性把java技術的方方面面都學個通, 在實際中也只能是需要什么技術再學習什么技術了. 而能否選擇一本好的參考書籍帶來的就是事半功倍和事倍工半 的效果. 所以我覺得花點時間放在選擇書籍上面還是很值得的, 否則你在后面只會花更多的時間. 下面我談談自己選擇書籍的一些經驗, 不一定正確. 首先看作者, 像上面提到的那些書的作者, 都是業界鼎鼎大名的, 選擇他們的書一般錯不了. 大家看的書多了, 自己胸中自然也會有一個list, 哪些作者是信得過的.二看出版社, 計算機書籍方面, Oreilly, Addison-Wesley都是公認比較好的出版社. 對于目前比較流行的Java技術, Oreilly的<<XXXX in Action>>系列是不錯的選擇. 另外我還會去看看Amazon網站(http://www.amazon.com/)的書評, 一般小于3星級的書我都不會考慮. 還有一個好去處theserverside,
http://www.theserverside.com/的書評, 這里的書評比較有趣,往往都有很激烈的爭論, 里面經常會看到一些名人在發言.我要向所有Java 學習者推薦, 如果我的收藏夾里面只能存放兩個網站,我會選擇java.sun 和theserverside. 在這里你可以了解最新的Java動態, 可以學習第一手的Java資料, 可以看到Java高手們(里面不乏業界大腕)激烈辯論.
到此階段, Java Developer的基本功底應該算是打好了吧,往后就是不斷學習嘍. 結束這一段之前,最后再介紹一本書Oreilly 的<<Java Threads, Second Edition >>, 因為我覺得多線程編程屬于 Java基本功, 每一個想學好Java的人都應該好好掌握.
提高篇
在這個階段應該從軟件架構, Framework層次上來學習了. 作為面向對象的圣經<<Design Patterns>>, 這本書是不得不推薦的. 不用再多說了, 這本在面向對象領域地位完全是屬于教父級別的. 不管你學習的是什么OO語言, 不管你現在是用.Net還是J2EE開發, 這本書都是你進階之路上的必讀之書. 而<<Core J2EE Patterns>>則專門針對于J2EE來討論設計模式, 書中Sun Java Center的資深設計師描述了J2EE關鍵技術的模式. 最佳實踐,設計策略和經過驗證的解決方案. 對于每一個希望成為J2EE 架構師或者設計師, 這本書值得一讀. 學習設計模式的時候,建議是結合實際的源代碼來看, 比如看看Junit源代碼, 你可以看到很多設計模式優雅的實現, 作者之一Erich Gamma本身 就是<<Design Patterns>>的作者. 至于J2EE的設計模式, Sun還開辟了專門的空間
http://java.sun.com/blueprints/patterns/, 里面有對常用模式的討論又提供了詳細的源代碼樣例. 正如Grady Booch所說, 模式對于普遍問題提供了通用的解決方案, 利用模式就等于擁有一個強大的專家隊伍. 如果你還沒有學習, 現在就開始吧. 此外對于面向對象方法論, 極限編程的思想也應該有所了解
http://www.extremeprogramming.org/ . 對于J2EE項目的具體實施, Rod Johnson的<<Expert One-on-One J2EE Design and Development (Programmer to Programmer)>>也很有價值, 該書以作者豐富的實戰經驗向我們展示如何用盡可能簡單的解決方案構建J2EE 應用, 書中作者第一次提出這樣的觀點, 很多時候, J2EE應用完全沒有必要用到EJB, 對于言必稱EJB的廣大J2EE開發者來說, 怎么說也有點驚世咳俗的味道. 當然, 作為Servlet和JDO兩個專家組的成員, 這可不是作者信口胡騶的. 今天風靡Java世界的Spring 框架最初便是源于此書, 而IOC, AOP等概念更是被時下的java開發者掛在嘴邊. 最后, 作為對Java的深入學習, Java技術的各個Specification也有必要一讀. 暫時就寫到這里吧.
歡迎大家都來討論一下自己學習經驗, 曹偉 cn.caowei@gmail.com
轉自:
http://www.javaresearch.org/article/showarticle.jsp?column=2&thread=29709