孫 燕, 郭松超, 張 芮
(青海民族大學 計算機學院,西寧 810007)
隨著科學技術的近年來的蓬勃發展,Java[1]技術框架的日益豐富,高校編程語言課程也增加了比C[2]和C++[3]更具可移植性好、便于異構系統通信、跨平臺的java[4]語言程序設計課程,基于Java[5]的各種應用程序及處于各種通信分布式應用軟件中間的獨立應用程序—中間件技術課程也被高校所重視,但一般從學生的培養方案中:中間件技術被劃為軟件工程專業的學生,而這個專業的學生對于通信的整體的結構認識欠缺,因這個專業的網絡專業課程開設的少,軟件工程的學生的視野局限于單個獨立的小的項目,給軟件工程專業的學生講清楚網絡通信的整體結構和概念是十分必要的。本文從網絡編程概念和一個Web Java[6]項目詳述了通信的概念和通信的結構以及通信中各個組成部分之間的關系。
Java[7]網絡編程基礎需要OSI參考模型及實際在Internet使用的體系TCP/IP,其中對于學生從體系結構去理解通信的概念至關重要,這里用郵遞員投遞信件的實例來講解通信概念:一個人工作需要給另外一人寫信交流,他們之間的真正的溝通是通過郵政系統的投遞實現的,如圖1所示。通常,不會去考慮分析信件投遞的實際過程,人們會覺得通信是水平方向的;由圖1可見,水平方向通信是由垂直方向的數據的投遞完成的。在Java中網絡編程教學中也涉及到2個通信的端點(客戶端和服務器端),它們之間的溝通也要通過網絡的垂直方向的數據傳輸實現。這兩個通信的端點之間通信如果基于Java語言實現,一樣需要有一個數據傳輸的通道(通路),通路在網絡編程里實際就是Socket,學生們在學習Socket編程時,學生從圖1理解基于Java Socket[8]編程就變得容易可行了,下文會詳述通信的國際標準模型及通信數據的解封裝。

圖1 信件投遞過程
中間件一般的定義是一種獨立的系統軟件或服務程序,分布式應用軟件借助它聯系服務器端實現計算機資源共享和網絡通信;它是異構系統溝通的橋梁。Java[10-15]中的很多框架也起到如上功能,它是Web Java項目中各種由socket的技術整合起來的中間的用于實現B/S,或是C/S模型軟件系統必不可少的位于客戶端和服務器端的中間橋梁,如Hibernate框架就是一個中間件技術,由圖2整體就能看出,Hibernate處于Java Application和Database中間,所以在Web Java教學中也可以將Hibernate視為中間件技術,這里對于它的細節組成不在贅述。

圖2 Hibernate框架
在中間件教學過程中,因為中間件軟件所處的編程位置,學生需要明白中間件就像是網絡中的路由器所處網絡位置一樣,中間件的作用和路由器的作用是一樣的。它是對等線程(客戶端和服務器端)數據互通的中間通道;中間件應該支持同步和異步傳輸,因為中間件需要將不同硬件平臺(IBM主機、UNIX工作站、PC機)之上安裝的不同的操作系統(UNIX、Microsoft Windows、MacOSX);使用C、C++、C#、Java、Delphi開發語言完成不同的數據管理(Oracle、SQLServer、XML等)而且這種數據的通信是在各種異構的網絡(Ethernet、IPX/SPX、FDDI、X.25、TCP/IP)實現的;這些中間件作為低層組件,為底層的通信模塊提供了一定層次的抽象,同時也將更高層次的地址標識和數據轉換等功能留給高一層的服務模塊。這里需要一提的是中間件連接接數據庫協議也有多種(微軟的ODBC和Sun公司JDBC)。以上是中間件教學必須講清的概念。其次才該去了解熟悉各個公司生產的中間件技術細節。
對于現在應用的中間件有與分布對象技術(Distributed Object Technology)合:DCOM(分布式組件對象模型);CORBA(公共對象請求代理體系結構);EJB(企業Java Bean)技術;與企業應用集成ApplicationIntegration,EAI)整合;(Enterprise與Web服務(Web Services)整合的Web服務中間件技術,以上技術都是現在高校學生應該學習的。
由上面的概念介紹,本文著重強調了Java編程首先弄清通信過程不是一個簡單的過程,知道了在客戶端和服務器端還需要一些獨立的應用程序連接通信的兩端,其次讓學生的對通信的概念清晰,明了通信的體系結構更是重要的,下面以一個Web Java項目程序在不同的編譯平臺的結構和通信國際標準模型來說明建立通信的整體框架的必要及重要性。
教學實例是一個基于Java的網上購物平臺,學生可以使用的IDE平臺有NetBeans和Eclipse及Myeclipse;基于Java的Web程序項目,那么學習Web Java編程,對于學生需要以下的準備和步驟完成。
對于學生選擇一個自己習慣用的熟悉的IDE平臺在學習Java編程項目至關重要,學生需要熟悉它們各有什么優缺點,如eclipse的數據流的關系從導航欄清楚看出(見圖3),從這個項目樹狀圖可以看出src文件夾是存放*.Java一般部署在服務器端的文件;中間的Web App library等有小書形狀的是服務器端文件所需的類庫或者框架;下面的Webroot文件夾是放置網頁的文件夾,其中有網頁所需的各種文件:*.jsp; *.js ;*.css; *.jpg;*.jsp是用%符號將Java語句嵌入在網頁里的網頁文件;*.js是將*.jsp中javascript單獨存儲為腳本文件;*.css是控制網頁格式的文件,*.jpg是各種網頁所需的各種圖片。這個樹狀的圖的最下面是服務器,此圖沒有顯示。我們可以直觀感受數據從網頁的請求到服務器端的數據流處

圖3 eclipse項目樹結構
理過程。這棵樹上的每個節點是有內在看不見的通信關系和聯系的,不是隨便羅列上去的,圖3是eclipse下項目的樹結構;這種樹狀結構可以給學生們講出數據從客戶端到服務器端的數據傳遞垂直方向流向,這里強調一點:客戶端與服務器端的通信(溝通)在人們的思維中,通常是水平的,而這就是網絡專業上講的對等層通信概念;但是對于真正的通信的理解是該從垂直方向數據流支撐了水平方向的虛通信(這里的虛指數據流向),如圖4所示。

圖4ISO/OSI RM
圖4中的上部是通信涉及的節點(設備A 中間節點2個 設備B)和連接它們的物理介質,下部是ISO/OSIRM(國際標準化組織/開放系統互聯參考模型)體系將每個節點分層,對等層之間是用虛線連接的,它們之間遵循著這一層通信的約定(協議),可以看出對于通信過程的理解是從垂直和水平兩個層次理解是必要的。這正是Web Java編程教學中讓學生理解和掌握各種已有框架的基礎。還有項目實現具體過程是程序流從服務器端響應客戶端時的數據傳輸過程中數據是一層層封裝的,正如圖5所示。再講服務器端實現時需要這個圖。這里列舉一個代碼如圖6所示,從中間的第11行可以看出數據的封裝關系,說明客戶端和服務器端的數據通信是封裝和解封裝的數據流完成的。

圖5 數據的解封裝

圖6 數據代碼封裝實例
對于NetBeans將服務器單獨放置在一個標簽里,如圖7所示其樹結構似乎沒有eclipse有通信的流向清晰,而且數據庫配置在另外的標簽上在MyEclipse中有一個可視的網頁的界面,所以MyEclipse對于初學Web Java項目的人員來說很受喜愛。

圖7 NetBeans項目樹結構
對于調試Java語言的IDE平臺理解可以想象它是一個桌子或是容器,將Java的服務器端的程序,類庫、各種編程所需的組件所需的配置文件和客戶端放在桌面和容器里完成Web Java項目的編寫調試和發布。
(1) 考慮編程的項目需要的類庫和Java包或及框架;查看相關框架文檔弄懂框架結構;
(2) 將這些框架所需的.JAR包事先導入平臺;
(3) 選擇發布Web Java的網頁服務器(比如Windows中IIS,Linux下的Apache的Tomcat);
(4) 下載安裝后臺數據庫如MySQL或是SQL Server軟件;
(5) 再導入系統.JAR包時不要忘記導入Java與數據庫相連的數據庫驅動包。比如MySQL連接Java需要mysql-connector-java-5.0.0.jar驅動。這個包實際也是由Java語言寫出的連接數據庫的類和實現方法。網絡打成包類,直接使用了。
本文通過對Java網絡編程及Java中間件概念的闡述及一個實例的講解,主旨是讓學習Java網絡編程的學生能夠在開發項目時對通信的復雜實現能從網絡體系結構的整體出發,獲得簡潔明了條理清晰的編程思想,指導具體項目的開發和運維。
參考文獻(References):
[1]OpenJDK: GPLv2+Classpath Exception.Openjdk.java.net. Copyright (C) 1989, 1991 Free Software Foundation, Inc.59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
[2]BCL For Java SE. Oracle com[DB/OL], 2013.http://www.oracle.com/technetwork/java/javase/terms/license/index.html
[3]Eckel B. Thinking in Java[M]. 4rd ed. USA: Prentice Hall PTR, 2006: 13-14.
[4]Barnes D, lling M Ko. Objects First with Java A Practical Introduction using BlueJ[M]. 4rd ed. USA: Prentice Hall PTR, 2008: 42-51.
[5]Ko M, lling B Quig, Patterson A. The BlueJ system and its pedagogy[J]. Journal of Computer Science Education, 2003, 13(4):249-268.
[6]Fisker K, McCall D, lling M Ko,etal. Group Work Support for the BlueJ IDE[C]∥Proc the 13th Annual Conference on Innovation and Technology in Computer Science Education (ITiCSE 2008). ACM Press 2008:163-168.
[7]Dean J, Ghemawat S. Mapreduce: A Flexible Data Processing Tool[J]. Commun. ACM, 2010,53(1):72-77.
[8]Sutter H, Larus J. Software and the concurrency revolution[J]. Queue, 2005, 3(7):54-62.
[9]Oaks S, Wong H, Java Threads[M]. 3rd ed O’Reilly Media, Inc, 2004.
[10]Chandra R, Dagum L, Kohr D, McDon-ald, and R. Menon, Parallel Programming in OpenMP[M]. Morgan Kaufmann Publishers Inc, 2001.
[11]Frigo M, Leiserson C E, Randall K H. The implementation of the Cilk-5 multithreaded language[C]∥Proceedings of the ACM SIGPLAN’98 Conference on Programming Language Design and Implementation (PLDI), 1998(1):212-223.
[12]Shafi A, Carpenter B, Baker M,etal. Nested paral- lelism for multi-core HPC systems using Java[J]. Journal of Parallel and Distributed Computing, 2009, 69(6):532-545.
[13]Taboada G L, Tourin J,etal. F-MPJ: Scal- able Java Message-passing Communications on Parallel Systems[J]. J Supercomput, 2012,60(1):117-140.
[14]Vega-Gisbert O, Roman J E, Groβ S,etal. Towards the Availability of Java Bindings in Open-MPI[C]∥Proceedings of the 20th European MPI Users’ Group Meeting, EuroMPI’13.ACM, 2013(1):141-142.
[15]White T. Hadoop: The Definitive Guide[M]. O’Reilly Media, Inc, 2009:26-36.