是否還在為了實現(xiàn)AJAX的前進(jìn)后退而煩惱呢?除了使用dhtmlhistory這個解決方案,你現(xiàn)在還可以通過GWT來很容易地實現(xiàn)這些功能。再也不用擔(dān)心瀏覽器的前進(jìn)和后退按鈕成為擺設(shè)了。
AJAX提高了用戶的體驗,但是相應(yīng)的,開發(fā)的復(fù)雜程度也提高了,debug也變得異常的困難。通過GWT,程序員們可以很容易地進(jìn)行debug工序。而且,這一切都是在java的環(huán)境中進(jìn)行。
瀏覽器兼容性問題總是能困擾著web開發(fā)人員。GWT構(gòu)建出來的Web程序,將會兼容Firefox,IE,Mozilla, Safari, 和Opera等主流瀏覽器。而兼容性的工作,不再需要程序員們來進(jìn)行。
在GWT中,遠(yuǎn)程通訊將會變得異常簡單,程序員們需要做的,僅僅是建立一個可序列化的對象。序列化和解序列化,將會由GWT來進(jìn)行。
下面是GWT自帶的幾個Demo: (點擊相應(yīng)頁面進(jìn)入)
本質(zhì)上,瀏覽器向服務(wù)器請求靜態(tài)圖片如jpeg時,服務(wù)器返回的仍然是標(biāo)準(zhǔn)的http響應(yīng),只不過http頭的contentType不是text/html,而是image/jpeg而已,因此,我們在Servlet中只要設(shè)置好contentType,然后發(fā)送圖像的數(shù)據(jù)流,瀏覽器就能正確解析并顯示出圖片。
在Java中,java.awt和java.awt.image包提供了基本的繪制圖像的能力,我們可以在內(nèi)存中繪制好需要的圖形,然后編碼成jpeg或其他圖像格式,最后發(fā)送相應(yīng)給瀏覽器即可。下面是使用Servlet動態(tài)創(chuàng)建圖像的詳細(xì)步驟:
1.創(chuàng)建BufferedImage對象,該對象存在內(nèi)存中,負(fù)責(zé)保存繪制的圖像;
2.創(chuàng)建Graphics2D對象,該對象負(fù)責(zé)繪制所需的圖像;
3.當(dāng)繪制完成后,調(diào)用com.sun.image.codec.jpeg包的JPEG編碼器對其編碼;
4.最后將編碼后的數(shù)據(jù)輸出至HttpResponse即可。
注意com.sun.image.codec.jpeg包位于JDK目錄的rt.jar包中,它不是公開的API,需要將rt.jar復(fù)制到web應(yīng)用程序的WEB-INF/lib下。
我們先創(chuàng)建一個最簡單的Servlet:
我們首先設(shè)置了response的contentType為image/jpeg,這樣瀏覽器就可以正確識別。
然后,創(chuàng)建一個大小為100x100的BufferedImage對象,準(zhǔn)備繪圖:
編碼后的JPEG圖像直接輸出到了out對象中,我們只要傳入response. getOutputStream()就可以直接輸出到HttpResponse中。
下面是完整的代碼:
最后將這個Servlet編譯,注冊到web.xml中,映射路徑為/CreateImage,寫一個簡單的index.html測試:
如能正確顯示,大功告成!
該考試測試 Java 的基礎(chǔ)知識并需要對該語言的語法和語義有深入理解。
1.參加培訓(xùn)或自學(xué)Java經(jīng)典課程。如果有C語言和面向?qū)ο蟮幕A(chǔ),只需自學(xué)SL275課程以及JDK1.4API,否則應(yīng)該參加相應(yīng)的培訓(xùn)班進(jìn)行學(xué)習(xí)。我對C語言和面向?qū)ο蠖加幸恍┗A(chǔ),同時又參加了SL275+Weblogic+JSP課程的學(xué)習(xí)。
2.確定考試版本,明確考查的知識點及知識點的考查難度。目前SCJP考試有兩個版本1.2和1.4,兩個版本的比較如下表:
其中選擇題有兩種形式:(1)給出一段代碼讓選擇其運行結(jié)果;(2)給出關(guān)于某基本概念的一些描述語句讓選擇正確的答案。填空題一般是給出一段正確的代碼,不提供選擇項,而讓你填寫上運行結(jié)果。
兩個版本考查的知識點最大的差別在于310-025包含I/O、AWT,且對各個知識點的考查難度相對較容易,而310-035中去掉了I/O和AWT部分的內(nèi)容,但增加了對Assertion的考查,同時對Wrapper classes、Collections、hashcode( )和equals( )考查的難度有所加大。所以要根據(jù)自己的情況選擇合適的版本。我在復(fù)習(xí)時覺得I/O這一部分的內(nèi)容較多且不好記憶,就選擇了310-035,這個版本較難,也是對自己的一個挑戰(zhàn)。
3.根據(jù)考查的知識點做練習(xí)題。由于認(rèn)證考試是以試題的形式來考查對知識點的掌握情況,所以多做題是通過考試的最有效方法之一,通過對SL275課程系統(tǒng)的學(xué)習(xí),掌握了有關(guān)知識點的基礎(chǔ)知識以后,必須通過做題來測試自己對知識點的掌握情況,書中寫的有關(guān)知識點的內(nèi)容比較概括,有時自己覺得已經(jīng)掌握了這部分內(nèi)容,但做題時可能會出現(xiàn)各式各樣的錯誤,比如在聲明main( )方法時應(yīng)為public static void main( String args[ ] ){……},如果在聲明時漏寫了static,則在編譯時可以通過,而運行時會提示出錯信息;如果main( )中的參數(shù)寫string args[ ],則在編譯時會提示出錯,在考試時有類似的題目,故意設(shè)一些陷阱,一不小心看似簡單的問題卻有可能失分。對于給出一段程序代碼要求選擇其運行結(jié)果的題目,最好親手調(diào)試并分析其結(jié)果。
對考查Wrapper classes、Collections、hashcode( )和equals( )方法的題目要認(rèn)真查看API文檔(Sun官方網(wǎng)站提供了下載的鏈接,也可以在Sun網(wǎng)站上在線查看)并做好筆記供以后查閱。通過做題鞏固知識點、適應(yīng)考試題型、找出容易出錯的地方,同時對所學(xué)知識點也起到了查漏補缺的作用。
4.下載相應(yīng)的模擬環(huán)境進(jìn)行實戰(zhàn)訓(xùn)練,或者在線測試。知識點和題型都掌握以后,還不要急于考試,應(yīng)該從網(wǎng)上下載一個模擬考試環(huán)境的軟件進(jìn)行實戰(zhàn)演練。我下載了Jcertify5.0,它需在JDK1.3環(huán)境下安裝運行,該軟件可以設(shè)置考查的范圍進(jìn)行practice或者test,是一個很不錯的模擬軟件,里面的題目與實際考試題目難易程度相當(dāng)。
通過該軟件可以檢驗?zāi)阍谝?guī)定的時間內(nèi)(120分鐘)完成題目的情況及各個知識點掌握的程度,這樣就可以根據(jù)測驗結(jié)果有針對性的復(fù)習(xí)掌握的不太好的知識點,反復(fù)測驗、練習(xí),直到自己滿意為止。
5.考前給自己足夠的信心。通過做練習(xí)和模擬軟件測驗,對各個知識點都比較有把握以后,其實這時參加考試已經(jīng)沒有問題了,要相信自己的實力,給自己加油,此時切不可再做較難的題目,我當(dāng)時就犯了這樣的大忌,聽說310-035的考試比較難,目前通過的人數(shù)不多,我怕考試時的題目比我做的練習(xí)題難,在考試的前一天,又做了一套題目,共43題,通過率為僅為42%,這個結(jié)果令我很失望,也喪失了自信心,晚上做夢一直考試且考試結(jié)果很糟糕,第二天醒來頭昏腦脹,本來預(yù)約好的考試不得不往后推遲,這是沉痛的教訓(xùn)。
6.預(yù)約、考試。知名的IT認(rèn)證廠商在一些大城市都有指定的考試中心,Sun認(rèn)證也不例外,考試前三天到Sun指定的考試中心報名,由他們幫你注冊,除了考試做題,其他的事情你盡管交給考試中心去做就行了。
7.考試注意事項。按預(yù)約的時間提前到達(dá)考試中心,熟悉考試環(huán)境,穩(wěn)定情緒,考試中心在考場里設(shè)置有監(jiān)視器,你的一舉一動都會被錄制下來,所以考試來不得半點虛假,盡早打消“打小抄”的念頭。考務(wù)人員幫你進(jìn)入考試系統(tǒng)后,開始進(jìn)行考試,考試分三個階段:
(1)正式考試前的問卷調(diào)查,給定時間為15分,有10來個問題,給出四個選項供你選擇,主要調(diào)查你對SCJP要考查的知識點的掌握情況,如對數(shù)組、類的定義是精通、是了解但需要別人幫助還是不懂等,這部分內(nèi)容的回答不影響你的考試成績,如果你讀懂問題的意思了,你可以根據(jù)自己的實際情況進(jìn)行選擇,否則你盡管隨意選一個,一路Next下去,直到所有的問題做完;
(2)正式考試,共120分鐘,選擇題在題面中注明了正確答案的數(shù)目(如:choose two),按Next做下一題,單擊exhibit按鈕查看題目提供的代碼;
(3)題目做完后的問卷調(diào)查,同樣也不影響你的考試結(jié)果。問卷結(jié)束后緊張、激動的時刻就要到了,此時你可以查看考試結(jié)果,考試系統(tǒng)列出你對各個知識點答題情況的一覽表,如果你的成績超過指定的分?jǐn)?shù)底線,則Result即為Pass。
拿到考試結(jié)果通知單的一刻是令人興奮的,考后的總體感覺是SCJP認(rèn)證并不像自己想象的那么難,只要你做好了充分的準(zhǔn)備,拿到SCJP認(rèn)證證書不成問題。
2. codeZoo http://www.codezoo.com/
這是O'Reily旗下的,除了Java之外,還有Ruby、Python。
3. Java學(xué)習(xí)源代碼檢索系統(tǒng) http://www.chinaitlab.com/www/school/codesearch/index.html
難得看見國產(chǎn)的,好歹也要支持一下,分類也算清楚。
4. Koders http://www.koders.com/
是個綜合查詢的網(wǎng)站,不過它好像是從代碼中查找關(guān)鍵詞,包含的語言挺多的。
5. Resources for Java server-side developers http://www.java201.com/
確切的說,它是一個資源收集的網(wǎng)站,代碼查詢并不多。不過它分類相當(dāng)細(xì),如Articles、Books、Examples、Extensions、Frameworks等類,你可以輸入Spring或Hibernate作為關(guān)鍵詞搜索一下看看。
存貨不多,以后有了再補充。
******
設(shè)計師
******
在基于組件的應(yīng)用系統(tǒng)開發(fā)中,一個或幾個人必須對這個系統(tǒng)的整體需求有全面的了解,比如系統(tǒng)的控制流程,和其他的接口等等。有些公司稱這個角色為總工程師,不管怎么叫,這個角色非常重要,他承擔(dān)協(xié)調(diào)不同開發(fā)小組之間的工作,幫助他們考慮系統(tǒng)這個“大圖”。
********************
表現(xiàn)邏輯層的團(tuán)隊角色
********************
在表現(xiàn)層,用戶界面是動態(tài)生成的。需要如下開發(fā)人員:
1、 Java servlet 開發(fā)人員
2、 JSP 開發(fā)人員
3、 HTML 設(shè)計人員
4、 美工人員
5、 客戶端的JavaScript 開發(fā)人員
Servlet 開發(fā)人員建立表現(xiàn)層的邏輯,而其他人員建立表現(xiàn)的形式。
Java Servlet 開發(fā)人員
Servlet處理頁和頁之間的瀏覽,會話管理,簡單的輸入驗證。Servlet也將業(yè)務(wù)邏輯的元素連接起來。
Servlet開發(fā)人員必須理解一些相關(guān)事宜,HTTP請求,安全,多語言,和一些頁面元素如session, cookie,超時等等。J2EE的應(yīng)用里面,servlet必須用Java來寫,Servlet可能會調(diào)用JSP, EJB, JDBC等等。因此,servlet開發(fā)人員要與應(yīng)用系統(tǒng)的其他人員緊密合作。
JSP 開發(fā)人員
JSP開發(fā)人員與servlet開發(fā)人員密切合作來定義系統(tǒng)的表現(xiàn)層頁面。即使在復(fù)雜的開發(fā)項目里,JSP和servlet的開發(fā)人員也可能是一個人。
然而,如果一個系統(tǒng)中大部分Java在servlet而不是在JSP里,JSP人員就不必對Java非常熟悉。
HTML 設(shè)計人員
HTML 設(shè)計人員對HTML頁面進(jìn)行優(yōu)化。例如,他可能要完成以下任務(wù):
1、保證在不同的瀏覽器中所有的頁面都能正常顯示
2、 保證低速的調(diào)制解調(diào)器訪問也不受影響
3、 對JSP設(shè)計人員的頁面進(jìn)行進(jìn)一步的優(yōu)化
美工人員
美工人員創(chuàng)建圖片等等。這些圖片要能小體積,快速下載。美工與HTML頁面人員緊密合作。
客戶端的JavaScript 開發(fā)人員
使用客戶端的JavaScript有很多原因。比如,可以處理簡單的輸入驗證,不必提交給服務(wù)器,還可以讓用戶界面更生動。這個角色和servlet, JSP人員緊密合作。
********************
業(yè)務(wù)邏輯層的團(tuán)隊角色
********************
業(yè)務(wù)邏輯層包含業(yè)務(wù)規(guī)則和業(yè)務(wù)實體。需要以下人員:
1、Session bean 開發(fā)人員
2、 Entity bean 開發(fā)人員
Session Bean 開發(fā)人員
Session beans包含業(yè)務(wù)處理和業(yè)務(wù)規(guī)則的邏輯。比如,一個session bean 可能設(shè)計成計算一個支票的稅率。如果一個系統(tǒng)面臨處理經(jīng)常變化的復(fù)雜邏輯,而又大量使用session bean,結(jié)果是,session bean就需要不斷的更新。
Session bean 的開發(fā)人員一般是一個領(lǐng)域的專家,理解復(fù)雜的,專門領(lǐng)域的邏輯,還有數(shù)據(jù)驗證的規(guī)則。這個人員與servlet和entity bean開發(fā)人員緊密合作。
Session bean可能需要調(diào)用JDBC接口,和其他的EJB。無狀態(tài)的session bean系統(tǒng)運行的會更好一些。因為,如果計算費率是一個有狀態(tài)的session bean,系統(tǒng)就必須訪問一個保存bean的狀態(tài)信息的服務(wù)器。如果那個服務(wù)器恰巧出現(xiàn)問題,整個流程就會受阻。
Entity Bean 開發(fā)人員
Entity bean代表永久的對象,如一個數(shù)據(jù)庫中的一條記錄。Entity bean開發(fā)人員的任務(wù)是設(shè)計一個面向?qū)ο蟮乃袠I(yè)務(wù)數(shù)據(jù)的組織圖。建立面向?qū)ο蟮脑噲D意味著要將數(shù)據(jù)庫中的表(關(guān)系型的)映射成entity bean。例如,開發(fā)人員需要將客戶表,發(fā)票表,和訂單表轉(zhuǎn)換成相應(yīng)的客戶,發(fā)票,和訂單對象。
一個entity bean 開發(fā)人員與session bean, Servlet開發(fā)人員密切合作,保證應(yīng)用系統(tǒng)提供快速的,靈活的,可擴展的對業(yè)務(wù)數(shù)據(jù)的訪問。
Entity bean 可能會大量的調(diào)用JDBC接口。而entity bean 之間的調(diào)用會很少。
**********************
數(shù)據(jù)庫訪問層的團(tuán)隊角色
**********************
在數(shù)據(jù)庫訪問層,開發(fā)人員需要建立關(guān)系型數(shù)據(jù)庫的ER圖,數(shù)據(jù)字典等等相關(guān)文檔。所有對數(shù)據(jù)庫的修改,訪問等等權(quán)限操作都要經(jīng)過數(shù)據(jù)庫訪問層開發(fā)人員。這個角色在大部分項目中擔(dān)當(dāng)DBA的角色。
團(tuán)隊組建之后,就可以開始設(shè)計用戶界面。
************
設(shè)計用戶界面
************
建議從前到后開始設(shè)計應(yīng)用系統(tǒng)。就是說,先設(shè)計用戶界面,再設(shè)計EJB,這樣效率最高。
安博公司已經(jīng)做了大量的界面設(shè)計工作,以后的工作完全可以參照已有的設(shè)計。下面提一些常用的建議性問題:
1、頁面流程是什么?
2、 每個頁面上的命令按鈕是什么?
3、是否適用frame?
4、是否有公司標(biāo)準(zhǔn)的Logo,廣告條幅?
5、 在什么地方需要登錄過程?
6、 多語言的問題?
這些和設(shè)計servlet, JSP相關(guān)。