我是如何成為一個(gè)Java Web開發(fā)者的
最近有人在我的Facebook頁面上問我,“我怎么才能成為一個(gè)Java Web開發(fā)者?”對(duì)于這個(gè)問題,答案其實(shí)并不簡單。成為一個(gè)Java Web開發(fā)人員包括很多方面。我遇到過的Java程序員, 可能曾是優(yōu)秀的前端開發(fā)人員,也可能以前是不錯(cuò)的后端開發(fā)人員。所謂“前端”,我指的是眾多瀏覽器端技術(shù)——HTML、CSS、Javascript,以 及Java模板技術(shù),如Thymeleaf、SiteMesh,或者古老的JSPs。后端開發(fā)人員有更堅(jiān)實(shí)的Java、數(shù)據(jù)庫(SQL和NoSQL),消 息傳遞(JMS/AQMP)和Web服務(wù)(SOAP/REST)技能。
你應(yīng)該也知道所謂的“全棧”Java開發(fā)人員。這是個(gè)人的技能集合。一個(gè)完整的全棧開發(fā)者應(yīng)該同樣勝任前端開發(fā)和后端開發(fā)的工作。這可能是難度系數(shù) 最高的一條路了,因?yàn)樗婕暗眉夹g(shù)非常多樣。也許有一天,你前一秒還在jQuery調(diào)試,接下來就去性能調(diào)優(yōu)Oracle數(shù)據(jù)庫查詢了。但是,成為一個(gè)全 棧Java開發(fā)人員是需要時(shí)間和經(jīng)驗(yàn)的。
從哪里開始?
對(duì)于有抱負(fù)的開發(fā)人員,技術(shù)的前景會(huì)成為壓倒一切的動(dòng)力。但是技術(shù)也是在不斷變化發(fā)展中的。你會(huì)冒著學(xué)習(xí)的東西很快就會(huì)過時(shí)的風(fēng)險(xiǎn)嗎?
客戶端技術(shù)
我建議新手開發(fā)人員可以從基礎(chǔ)的學(xué)起;HTML,CSS和JavaScript。這些技術(shù)是web開發(fā)的核心。而且這些技術(shù)在某種意義上說也是通用的,無論你是Java web開發(fā)人員還是Ruby Web開發(fā)人員都要用到。
HTML
HTML——超文本標(biāo)記語言。這是用來生成網(wǎng)頁的。你需要對(duì)HTML有一個(gè)深入的了解。在萬維網(wǎng)初期,HTML習(xí)慣上是一個(gè)由網(wǎng)頁服務(wù)器向?yàn)g覽器提 供的文件。它對(duì)靜態(tài)內(nèi)容非常有效。不會(huì)改變內(nèi)容。但是,現(xiàn)在人們?cè)絹碓絻A向于動(dòng)態(tài)的內(nèi)容。于是,HTML不再是靜態(tài)的文件,HTML開始按需生成。作為一 個(gè)Java web開發(fā)者,你得會(huì)編寫如何為網(wǎng)頁瀏覽器生成HTML文件的代碼。你需要對(duì)HTML文檔的結(jié)構(gòu)有一個(gè)深刻的理解。
CSS
CSS——層疊樣式表。這是用來顯示頁面樣式的。它控制字體、顏色和布局。與HTML定義的是網(wǎng)頁的內(nèi)容不同,CSS定義的是當(dāng)在瀏覽器中呈現(xiàn)時(shí)網(wǎng)頁的外觀。例如,你可以對(duì)桌面Web應(yīng)用程序使用一套CSS規(guī)則,對(duì)移動(dòng)應(yīng)用程序使用另一套不同的CSS規(guī)則。相同的HTML,當(dāng)渲染在瀏覽器上時(shí),就有了兩個(gè)完全不同的外觀。
Javascript
Javascript——制作網(wǎng)頁上的東西。不要將Java與Javascript混淆。雖然它們有一些語法的相似性,但這是兩個(gè)完全不同的編程語 言。JavaScript才能真正推動(dòng)Web 2.0應(yīng)用程序。通過使用Javascript,你可以根據(jù)用戶的操作,動(dòng)態(tài)地改變HTML/CSS,提供更有視覺感受的網(wǎng)頁給用戶。
HTTP
HTTP(超文本傳輸協(xié)議)——客戶端和Web服務(wù)器之間的通信。有太多的web開發(fā)人員居然對(duì)HTTP一無所知。HTTP絕對(duì)是你必學(xué)的關(guān)鍵技能。尤其是當(dāng)你要用AJAX工作的時(shí)候。你需要知道一個(gè)POST和一個(gè)GET之間的區(qū)別。你應(yīng)該記住HTTP狀態(tài)碼200,301和404的含義——以及更多。作為一個(gè)Java web開發(fā)人員,你的日常工作不可避免要與HTTP打交道。
服務(wù)器端技術(shù)
Java
Java——本文的問題就是如何成為一個(gè)Java web開發(fā)人員。所以,你當(dāng)然得知道Java編程語言。除了Java本身,你還應(yīng)該熟悉Java Servlet API。有一些Java web框架,隱藏著Java Servlet API的用法。如果出現(xiàn)問題,那么你需要知道幕后究竟發(fā)生了什么事情。
JPA
JPA——Java持久性API——使用數(shù)據(jù)庫。JPA是Java傳統(tǒng)關(guān)系數(shù)據(jù)庫的標(biāo)準(zhǔn)。Hibernate是現(xiàn)在使用最廣泛的JPA實(shí)現(xiàn)。作為一 個(gè)Java web開發(fā)人員,你肯定要用到數(shù)據(jù)庫。你要從數(shù)據(jù)庫中得到內(nèi)容,以顯示在網(wǎng)頁上,或從用戶那里接收內(nèi)容存儲(chǔ)到數(shù)據(jù)庫中。所以,Java web開發(fā)人員需要知道如何使用JPA。
Java應(yīng)用程序服務(wù)器
Java應(yīng)用程序服務(wù)器——Java web應(yīng)用程序的運(yùn)行時(shí)容器。Tomcat是到目前為止最流行的Java應(yīng)用程序服務(wù)器。 Web應(yīng)用程序歸檔文件,又名WAR文件,有一個(gè)Java標(biāo)準(zhǔn)。這些被部署到應(yīng)用程序服務(wù)器,如Tomcat,以此為你的web應(yīng)用程序提供運(yùn)行環(huán)境。十 年以前,還流行在應(yīng)用程序和應(yīng)用程序服務(wù)器之間應(yīng)用更復(fù)雜的耦合。然而,現(xiàn)在的趨勢(shì)更支持應(yīng)用程序和應(yīng)用服務(wù)器之間的松散耦合。
Java框架
請(qǐng)注意,到目前為止,我還沒有提到任何Java框架。我所描述的,都是你作為一個(gè)Java web開發(fā)人員會(huì)用到的不同技術(shù)??蛻舳思夹g(shù)完全獨(dú)立于服務(wù)器端技術(shù)。Firefox不在乎,服務(wù)器運(yùn)行的是Java,Python還是.NET。不過, 新手開發(fā)人員似乎常常遺忘這一點(diǎn)。
不使用Java框架的Java web開發(fā)也是可以的。但是這樣一來,你需要額外寫很多代碼來處理原本框架可以為你辦到的事情。這就是為什么開發(fā)Java web應(yīng)用程序時(shí),你通常會(huì)想要使用某一個(gè)框架。
Spring框架
Spring框架是構(gòu)建web應(yīng)用程序一個(gè)非常棒的工具集合。雖然沒有精確的統(tǒng)計(jì)數(shù)據(jù),但我看到有文章估算已有超過60%基于Java的web應(yīng)用 程序使用Spring。這其實(shí)也不奇怪。Spring Core有IoC容器和依賴注入。Spring MVC,是一款基于MVC的成熟又靈活的web框架。Spring Security是保護(hù)網(wǎng)站最好的工具。Spring Date有助于維護(hù)持久性。Spring還有其他的項(xiàng)目,你可以用來構(gòu)建大范圍推廣的應(yīng)用。
當(dāng)涉及到整體框架時(shí),真的找不到替代品代替Spring。哪怕存在著很多針對(duì)不同Spring項(xiàng)目的競(jìng)爭技術(shù)。但是,沒有單一的解決方案,能夠具備Spring框架系列項(xiàng)目的深度和廣度。在我的Spring入門在線教程上,我對(duì)主要的Spring框架項(xiàng)目做了一個(gè)很好的概述,并說明了如何使用它們來構(gòu)建企業(yè)級(jí)應(yīng)用程序。
Grails
Grails是建立在Spring之上的快速應(yīng)用程序開發(fā)框架。它不但擁有Spring的所有內(nèi)容,還借鑒了Groovy的生產(chǎn)力優(yōu)勢(shì)。我喜歡將Grails形容為用Groovy包裝過的Spring。關(guān)鍵一點(diǎn)要記住的是,其背后依然是Spring。
Grails現(xiàn)在越來越受到企業(yè)的歡迎。Grails的優(yōu)勢(shì)之一就是其出色的社區(qū)支持。
Spring Roo
Spring Roo是一個(gè)純Java框架,這似乎和Grails的作用相同,不過它沒有Groovy。我不是Spring Roo的的粉絲,并且我最后一次使用Spring Roo也不是因?yàn)槭袌?chǎng)要求。Spring Roo還沒有被廣泛接受。
Play
基于Scala的框架。雖然我還沒有嘗試過Play。但是現(xiàn)在市場(chǎng)上面的反響不錯(cuò)。所以有機(jī)會(huì)的話我會(huì)試一試。不過它目前還沒有被企業(yè)中廣泛采用。至少到現(xiàn)在為止還沒有。
JBoss Sea
JBoss Seam可能是最接近Spring框架的替代品。JBoss Seam遵循JEE標(biāo)準(zhǔn)。JBoss Seam是一個(gè)很好的選擇,具有良好的支持而被企業(yè)所接受。不過,JBoss Seam經(jīng)常因?yàn)樵陂_發(fā)和性能方面比Spring慢而飽受詬病。但是有的批評(píng)對(duì)于JBoss Seam過于苛刻了。
結(jié)論
成為Java web開發(fā)人員是不可能一蹴而就的。沒有所謂的《21天自學(xué)成為Java web開發(fā)者》的速成教材,也沒有捷徑。你需要學(xué)習(xí)和掌握很多不同的技術(shù)。而所有這些都需要時(shí)間來學(xué)習(xí)。
成為Java web開發(fā)人員是一個(gè)非常有意義的事業(yè)。你剛?cè)腴T的時(shí)候可以只專注于前端技術(shù),也可以只專研后端技術(shù)。隨著以后開發(fā)的項(xiàng)目增多,你就可以從這一技術(shù)領(lǐng)域轉(zhuǎn)移到另一個(gè)技術(shù)領(lǐng)域。
如果我現(xiàn)在作為一個(gè)Java web開發(fā)人員入門的話,我會(huì)先專注于客戶端技術(shù),因?yàn)榭蛻舳思夹g(shù)獨(dú)立于服務(wù)器端技術(shù)。因此,等你入門了以后,你將會(huì)有更多的就業(yè)選擇。此外,雖然客戶端 技術(shù)的薪酬通常比服務(wù)器端的低,但這會(huì)是一個(gè)良好的開端。你可以快速獲得技能以便于就業(yè),然后再轉(zhuǎn)移焦點(diǎn),拓寬技能集,以謀求更好的就業(yè)機(jī)會(huì)。