本質上,瀏覽器向服務器請求靜態圖片如jpeg時,服務器返回的仍然是標準的http響應,只不過http頭的contentType不是text/html,而是image/jpeg而已,因此,我們在Servlet中只要設置好contentType,然后發送圖像的數據流,瀏覽器就能正確解析并顯示出圖片。
在Java中,java.awt和java.awt.image包提供了基本的繪制圖像的能力,我們可以在內存中繪制好需要的圖形,然后編碼成jpeg或其他圖像格式,最后發送相應給瀏覽器即可。下面是使用Servlet動態創建圖像的詳細步驟:
1.創建BufferedImage對象,該對象存在內存中,負責保存繪制的圖像;
2.創建Graphics2D對象,該對象負責繪制所需的圖像;
3.當繪制完成后,調用com.sun.image.codec.jpeg包的JPEG編碼器對其編碼;
4.最后將編碼后的數據輸出至HttpResponse即可。
注意com.sun.image.codec.jpeg包位于JDK目錄的rt.jar包中,它不是公開的API,需要將rt.jar復制到web應用程序的WEB-INF/lib下。
我們先創建一個最簡單的Servlet:
我們首先設置了response的contentType為image/jpeg,這樣瀏覽器就可以正確識別。
然后,創建一個大小為100x100的BufferedImage對象,準備繪圖:
編碼后的JPEG圖像直接輸出到了out對象中,我們只要傳入response. getOutputStream()就可以直接輸出到HttpResponse中。
下面是完整的代碼:
最后將這個Servlet編譯,注冊到web.xml中,映射路徑為/CreateImage,寫一個簡單的index.html測試:
如能正確顯示,大功告成!
該考試測試 Java 的基礎知識并需要對該語言的語法和語義有深入理解。
1.參加培訓或自學Java經典課程。如果有C語言和面向對象的基礎,只需自學SL275課程以及JDK1.4API,否則應該參加相應的培訓班進行學習。我對C語言和面向對象都有一些基礎,同時又參加了SL275+Weblogic+JSP課程的學習。
2.確定考試版本,明確考查的知識點及知識點的考查難度。目前SCJP考試有兩個版本1.2和1.4,兩個版本的比較如下表:
其中選擇題有兩種形式:(1)給出一段代碼讓選擇其運行結果;(2)給出關于某基本概念的一些描述語句讓選擇正確的答案。填空題一般是給出一段正確的代碼,不提供選擇項,而讓你填寫上運行結果。
兩個版本考查的知識點最大的差別在于310-025包含I/O、AWT,且對各個知識點的考查難度相對較容易,而310-035中去掉了I/O和AWT部分的內容,但增加了對Assertion的考查,同時對Wrapper classes、Collections、hashcode( )和equals( )考查的難度有所加大。所以要根據自己的情況選擇合適的版本。我在復習時覺得I/O這一部分的內容較多且不好記憶,就選擇了310-035,這個版本較難,也是對自己的一個挑戰。
3.根據考查的知識點做練習題。由于認證考試是以試題的形式來考查對知識點的掌握情況,所以多做題是通過考試的最有效方法之一,通過對SL275課程系統的學習,掌握了有關知識點的基礎知識以后,必須通過做題來測試自己對知識點的掌握情況,書中寫的有關知識點的內容比較概括,有時自己覺得已經掌握了這部分內容,但做題時可能會出現各式各樣的錯誤,比如在聲明main( )方法時應為public static void main( String args[ ] ){……},如果在聲明時漏寫了static,則在編譯時可以通過,而運行時會提示出錯信息;如果main( )中的參數寫string args[ ],則在編譯時會提示出錯,在考試時有類似的題目,故意設一些陷阱,一不小心看似簡單的問題卻有可能失分。對于給出一段程序代碼要求選擇其運行結果的題目,最好親手調試并分析其結果。
對考查Wrapper classes、Collections、hashcode( )和equals( )方法的題目要認真查看API文檔(Sun官方網站提供了下載的鏈接,也可以在Sun網站上在線查看)并做好筆記供以后查閱。通過做題鞏固知識點、適應考試題型、找出容易出錯的地方,同時對所學知識點也起到了查漏補缺的作用。
4.下載相應的模擬環境進行實戰訓練,或者在線測試。知識點和題型都掌握以后,還不要急于考試,應該從網上下載一個模擬考試環境的軟件進行實戰演練。我下載了Jcertify5.0,它需在JDK1.3環境下安裝運行,該軟件可以設置考查的范圍進行practice或者test,是一個很不錯的模擬軟件,里面的題目與實際考試題目難易程度相當。
通過該軟件可以檢驗你在規定的時間內(120分鐘)完成題目的情況及各個知識點掌握的程度,這樣就可以根據測驗結果有針對性的復習掌握的不太好的知識點,反復測驗、練習,直到自己滿意為止。
5.考前給自己足夠的信心。通過做練習和模擬軟件測驗,對各個知識點都比較有把握以后,其實這時參加考試已經沒有問題了,要相信自己的實力,給自己加油,此時切不可再做較難的題目,我當時就犯了這樣的大忌,聽說310-035的考試比較難,目前通過的人數不多,我怕考試時的題目比我做的練習題難,在考試的前一天,又做了一套題目,共43題,通過率為僅為42%,這個結果令我很失望,也喪失了自信心,晚上做夢一直考試且考試結果很糟糕,第二天醒來頭昏腦脹,本來預約好的考試不得不往后推遲,這是沉痛的教訓。
6.預約、考試。知名的IT認證廠商在一些大城市都有指定的考試中心,Sun認證也不例外,考試前三天到Sun指定的考試中心報名,由他們幫你注冊,除了考試做題,其他的事情你盡管交給考試中心去做就行了。
7.考試注意事項。按預約的時間提前到達考試中心,熟悉考試環境,穩定情緒,考試中心在考場里設置有監視器,你的一舉一動都會被錄制下來,所以考試來不得半點虛假,盡早打消“打小抄”的念頭??紕杖藛T幫你進入考試系統后,開始進行考試,考試分三個階段:
?。?)正式考試前的問卷調查,給定時間為15分,有10來個問題,給出四個選項供你選擇,主要調查你對SCJP要考查的知識點的掌握情況,如對數組、類的定義是精通、是了解但需要別人幫助還是不懂等,這部分內容的回答不影響你的考試成績,如果你讀懂問題的意思了,你可以根據自己的實際情況進行選擇,否則你盡管隨意選一個,一路Next下去,直到所有的問題做完;
?。?)正式考試,共120分鐘,選擇題在題面中注明了正確答案的數目(如:choose two),按Next做下一題,單擊exhibit按鈕查看題目提供的代碼;
?。?)題目做完后的問卷調查,同樣也不影響你的考試結果。問卷結束后緊張、激動的時刻就要到了,此時你可以查看考試結果,考試系統列出你對各個知識點答題情況的一覽表,如果你的成績超過指定的分數底線,則Result即為Pass。
拿到考試結果通知單的一刻是令人興奮的,考后的總體感覺是SCJP認證并不像自己想象的那么難,只要你做好了充分的準備,拿到SCJP認證證書不成問題。
2. codeZoo http://www.codezoo.com/
這是O'Reily旗下的,除了Java之外,還有Ruby、Python。
3. Java學習源代碼檢索系統 http://www.chinaitlab.com/www/school/codesearch/index.html
難得看見國產的,好歹也要支持一下,分類也算清楚。
4. Koders http://www.koders.com/
是個綜合查詢的網站,不過它好像是從代碼中查找關鍵詞,包含的語言挺多的。
5. Resources for Java server-side developers http://www.java201.com/
確切的說,它是一個資源收集的網站,代碼查詢并不多。不過它分類相當細,如Articles、Books、Examples、Extensions、Frameworks等類,你可以輸入Spring或Hibernate作為關鍵詞搜索一下看看。
存貨不多,以后有了再補充。
******
設計師
******
在基于組件的應用系統開發中,一個或幾個人必須對這個系統的整體需求有全面的了解,比如系統的控制流程,和其他的接口等等。有些公司稱這個角色為總工程師,不管怎么叫,這個角色非常重要,他承擔協調不同開發小組之間的工作,幫助他們考慮系統這個“大圖”。
********************
表現邏輯層的團隊角色
********************
在表現層,用戶界面是動態生成的。需要如下開發人員:
1、 Java servlet 開發人員
2、 JSP 開發人員
3、 HTML 設計人員
4、 美工人員
5、 客戶端的JavaScript 開發人員
Servlet 開發人員建立表現層的邏輯,而其他人員建立表現的形式。
Java Servlet 開發人員
Servlet處理頁和頁之間的瀏覽,會話管理,簡單的輸入驗證。Servlet也將業務邏輯的元素連接起來。
Servlet開發人員必須理解一些相關事宜,HTTP請求,安全,多語言,和一些頁面元素如session, cookie,超時等等。J2EE的應用里面,servlet必須用Java來寫,Servlet可能會調用JSP, EJB, JDBC等等。因此,servlet開發人員要與應用系統的其他人員緊密合作。
JSP 開發人員
JSP開發人員與servlet開發人員密切合作來定義系統的表現層頁面。即使在復雜的開發項目里,JSP和servlet的開發人員也可能是一個人。
然而,如果一個系統中大部分Java在servlet而不是在JSP里,JSP人員就不必對Java非常熟悉。
HTML 設計人員
HTML 設計人員對HTML頁面進行優化。例如,他可能要完成以下任務:
1、保證在不同的瀏覽器中所有的頁面都能正常顯示
2、 保證低速的調制解調器訪問也不受影響
3、 對JSP設計人員的頁面進行進一步的優化
美工人員
美工人員創建圖片等等。這些圖片要能小體積,快速下載。美工與HTML頁面人員緊密合作。
客戶端的JavaScript 開發人員
使用客戶端的JavaScript有很多原因。比如,可以處理簡單的輸入驗證,不必提交給服務器,還可以讓用戶界面更生動。這個角色和servlet, JSP人員緊密合作。
********************
業務邏輯層的團隊角色
********************
業務邏輯層包含業務規則和業務實體。需要以下人員:
1、Session bean 開發人員
2、 Entity bean 開發人員
Session Bean 開發人員
Session beans包含業務處理和業務規則的邏輯。比如,一個session bean 可能設計成計算一個支票的稅率。如果一個系統面臨處理經常變化的復雜邏輯,而又大量使用session bean,結果是,session bean就需要不斷的更新。
Session bean 的開發人員一般是一個領域的專家,理解復雜的,專門領域的邏輯,還有數據驗證的規則。這個人員與servlet和entity bean開發人員緊密合作。
Session bean可能需要調用JDBC接口,和其他的EJB。無狀態的session bean系統運行的會更好一些。因為,如果計算費率是一個有狀態的session bean,系統就必須訪問一個保存bean的狀態信息的服務器。如果那個服務器恰巧出現問題,整個流程就會受阻。
Entity Bean 開發人員
Entity bean代表永久的對象,如一個數據庫中的一條記錄。Entity bean開發人員的任務是設計一個面向對象的所有業務數據的組織圖。建立面向對象的試圖意味著要將數據庫中的表(關系型的)映射成entity bean。例如,開發人員需要將客戶表,發票表,和訂單表轉換成相應的客戶,發票,和訂單對象。
一個entity bean 開發人員與session bean, Servlet開發人員密切合作,保證應用系統提供快速的,靈活的,可擴展的對業務數據的訪問。
Entity bean 可能會大量的調用JDBC接口。而entity bean 之間的調用會很少。
**********************
數據庫訪問層的團隊角色
**********************
在數據庫訪問層,開發人員需要建立關系型數據庫的ER圖,數據字典等等相關文檔。所有對數據庫的修改,訪問等等權限操作都要經過數據庫訪問層開發人員。這個角色在大部分項目中擔當DBA的角色。
團隊組建之后,就可以開始設計用戶界面。
************
設計用戶界面
************
建議從前到后開始設計應用系統。就是說,先設計用戶界面,再設計EJB,這樣效率最高。
安博公司已經做了大量的界面設計工作,以后的工作完全可以參照已有的設計。下面提一些常用的建議性問題:
1、頁面流程是什么?
2、 每個頁面上的命令按鈕是什么?
3、是否適用frame?
4、是否有公司標準的Logo,廣告條幅?
5、 在什么地方需要登錄過程?
6、 多語言的問題?
這些和設計servlet, JSP相關。
//結束
通過地址就可以訪問了:
http://127.0.0.1:7001/getTable.jsp?tableName=emp
只要把這個文件發到JSP服務器上。知道數據庫的一些配置。 就可以通過這個JSP訪問到數據庫了。
Zaval Database Front-end
http://www.zaval.org/products/db-front-end/download/index.html
Flex默認使用的都是utf-8編碼,包括Get,Post等方法。而Tomcat服務器端接收request對象默認是8859_1編碼,添加Tomcat的request Filter用request.setCharacterEncoding("utf-8"); 來設置,這個方法屬于Tomcat設置和Flex無關,暫不討論!
flex->Jsp:
有2種情況
情況一、MXML源代碼文件中寫入的中文字符:
Flex使用 System.useCodepage = true;即使用本地操作系統編碼(GBK) 設置Flex的處理編碼。Jsp中用依然用ISO_8859_1編碼來處理,并轉化為GBK。這樣Jsp可以正確解釋Flex傳遞的中文字符。 這個時候可以認為Flex對mxml源代碼文件進行編譯時候,源代碼中的中文字符已經混亂了,所以要加上System.useCodepage = true;語句,按GBK編碼將中文字符從Flex發送到Tomcat。
同時Tomcat中Jsp應該按GBK重新編碼
String categoryID = request.getParameter("categoryID");
String strOut = new String(categoryID.getBytes("ISO8859-1"), "GBK");
System.out.println("categoryID="+categoryID);
System.out.println("categoryID="+strOut);
情況二、Flex運行時候由輸入框輸入的中文字符
這個時候輸入框輸入的中文字符是一定為UTF-8編碼的,所以Flex中System.useCodepage = false;或者不設置,就默認utf-8編碼格式傳遞數據,而Tomcat中Jsp使用下面語句按UTF-8來重新編碼
String categoryID = request.getParameter("categoryID");
String strOut = new String(categoryID.getBytes("ISO8859-1"), "utf-8");
System.out.println("categoryID="+categoryID);
System.out.println("categoryID="+strOut);
Jsp->Flex:
Jsp頁面用頁面指令<%@ page contentType="text/html;charset=utf-8"%>設置,返回結果是utf-8編碼,Flex接收后成功解釋并正確顯示。
測試環境:
Windows2000 Server (字符集為GBK)
Tomcat 5.0.28 (默認設置)
JDK1.5.0
flex 1.5 (默認設置)
SqlServer2000 Sp3
測試代碼: (僅僅為第二種情況,第一種情況酌情修改即可)
表結構
其中categoryid使用中文內容
phonelist.jsp
這里數據庫連接是SqlServer2000
test.mxml
其中HTTPService使用自定義request對象傳遞數據,注意前面的System.useCodepage = true;語句
結果:
在Jsp頁面里按8859_1編碼可以成功獲取Flex傳遞的中文內容。
備注:
這個方法是對Tomcat的,其他的Java應用服務器的Request處理方式可能不同,應區分對待!
引用:
以下是Flex文檔關于System.useCodepage的說明:(比較簡單,就不翻譯了)
System.useCodepage
Availability
flash Player 6.
Usage
Description
Property; a Boolean value that tells flash Player whether to use Unicode or the traditional code page of the operating system running the player to interpret external text files. The default value of System.useCodepage is
false
.false
, flash Player interprets external text files as Unicode. (These files must be encoded as Unicode when you save them.)true
, flash Player interprets external text files using the traditional code page of the operating system running the player.