周 永 岳 靜
文章編號:1672-5913(2009)02-0127-03
摘要:本文講述了在面向對象編程語言Java的教學中,如何通過使用有效的教學方法和技巧,讓學生從理論上能夠很好地理解三層架構,從實踐上能夠很好地運用三層架構進行網絡及數據庫程序開發。
關鍵詞:Java教學;三層架構;網絡程序
中圖分類號:G642
文獻標識碼:B
Java是近年來非常流行的編程語言,其安全性和可移植性是兩個最大的優點,并且是純粹的面向對象語言。因為Java語言的實用和受歡迎程度,越來越多的高校都選擇了Java這門編程語言給學生講授。雖然Java摒棄了C和C++語言中一些復雜的語法格式,不少人認為它是簡單的,但實際上,對于沒有面向對象理論的學生,仍然需要花費比較多的時間才能入門。筆者已連續七年從事Java教學,并在教學中不斷地探索和總結,找出了一些很好的、能引導學生進入Java殿堂的方法。下面以Java教學中較困難的三層架構為例進行說明。
1概述
三層架構是目前流行的架構設計模式,它由表示層、業務邏輯層和數據訪問層三個層次結構組成。通常情況下我們所說的三層架構,實際上并不是指確定的數值“三”,三代表“多”,三層架構實際上叫做多層架構。在本文中,只論述真正只有三層的架構,即“客戶端—中間層服務—后臺數據庫服務器”這樣的架構,主要探討在Java這門特定的語言中如何更好地向學生傳授三層架構的編程理念與方法。
2讓學生從感性上認識三層架構
Java是面向對象的語言,但很多教師在教學的時候卻忽略了他們“面向的對象”,即坐在教師面前的學生,不注意因材施教。如果是對于已經具有面向對象思想的學生,在講解很多的內容時可以比較輕松的帶過;但對于初次碰到面向對象編程語言的學生,在講授過程中,教師必須要讓他們先理解面向對象,然后才能講在Java中的對象是怎么樣的。同樣的道理,在進行三層架構編程的教學時,如果學生連三層架構都認識不清,如何能學好這方面的編程呢?
教師首先可以通過“問答式教學”讓學生了解,傳統的兩層架構的缺點。可以這樣引導學生:將大家已經編寫好的訪問數據庫的程序,轉換成Applet在網頁中運行。已知在本地計算機測試能夠成功運行,那么,當把Applet傳到Web服務器上,其他的用戶通過你編寫的網頁能否正常的訪問數據庫呢?學生思考一下便知道,在本地計算機上能夠成功是因為正確的配置了ODBC數據源。但是,瀏覽網頁的用戶并沒有相應的配置數據源,也沒有訪問數據庫的驅動程序。在這些計算機上,就無法連接到后臺數據庫。
教師在講授比較復雜的內容的時候,最好不要先講一大堆理論,而是最好先讓學生建立一種感性上的認識。教師要么通過生動的語言,要么通過形象的比喻,讓學生建立感性認識。對于三層架構,可以這樣比喻:兩層架構是學生直接把作業交給教師;三層架構是學生把作業交給課代表,之后由課代表交給教師。在兩層的情形中,每一個學生都要知道老師的辦公室在什么地方;而在三層的情形中,普通學生無需知道老師的辦公室在什么地方,只需課代表知道就可以了。
3讓學生從理論上認識三層架構
在傳統的兩層架構中,只有客戶端和后臺數據庫,這就要求兩點:一是客戶端必須具有數據訪問的引擎,這樣才能連接數據庫;二是每一個客戶端都需要知道后臺數據庫的位置。而對于三層架構,客戶端把數據發送到中間層服務器,中間層服務器再負責和后臺數據庫之間的數據傳遞。顯然地,三層模型具有很大的優點。對客戶端而言,它不需要數據訪問引擎,它也不需要知道后臺數據庫在什么地方。客戶只需要知道中間層服務器在什么地方就可以了。這種實現方案,實際上提高了系統的安全性:對客戶端而言,服務器是隱藏的,客戶不知道服務器的具體位置。圖1是三層架構程序的示意圖:

在讓學生從總體上了解了三層架構之后,接下來,需要講解和三層架構編程相關的一些概念。學生必須掌握這些知識,才能進行后續的實際編程。要給學生講解的幾個概念是:協議、套接字、IP地址和端口。
協議:當計算機之間進行通訊的時候,需要遵循一定的規則。數據以包的形式從一臺機器發送到另一臺。這些規則管理數據的打包、數據傳輸速度,以及重新創建數據將其恢復成原始形式。這些規則被稱為網絡協議。網絡協議是通過網絡進行通訊的系統所遵循的一系列規則和慣例。網絡協議如TCP/IP、UDP、Apple Talk和NetBEUI。Java提供了一個豐富的、支持網絡的類庫,這些類使得應用程序能方便地訪問網絡資源。Java提供了對用戶報文協議(UDP)及傳輸控制協議/因特網協議(TCP/IP)的支持。
套接字:傳輸控制協議(TCP)提供了一條可靠的、點對點的通訊通道,客戶機/服務器應用程序可以用該通道相互通訊。要通過TCP進行通訊,客戶機和服務器程序建立連接并綁定套接字。套接字用于處理通過網絡連接的應用程序之間的通訊。客戶機和服務器之間更深入的通訊通過套接字完成。Java被設計成一種網絡語言。它將連接功能封裝到套接字類里,而使得網絡編程更加容易。套接字類(即java.net.Socket類)用于創建一個客戶套接字,而服務器套接字類(即java.net.ServerSocket類)創建一個服務器套接字。
IP地址和端口:TCP協議需要兩個數據項:IP地址和端口號。互聯網設備都帶有一個稱為IP地址的邏輯地址。IP地址具有特定的形式,每個IP地址都是32位的數值,表示4個范圍在0到255之間的數值。目前采用的32個二進制位進行編碼的IP地址又被稱為IPv4標準,下一代編碼將采用IPv6標準,以128個二進制位進行編碼。端口號是一個邏輯概念,不同的端口用來響應不同的服務,常用的端口如21、80、110等。可以這樣理解:IP地址讓我們找到特定計算機,而端口號讓我們找到計算機上的程序進程。
4讓學生掌握Java中三層架構程序開發的方法
下面以NIIT提供的Java教材為例,講解三層架構程序的開發。軟件需求是:用戶在界面中輸入數據,數據以對象的方式發送給中間層服務器,中間層服務器驗證數據后,連接到數據庫服務器并執行存儲操作。以下是教學中的要點。
4.1了解要用到的相關類和方法
(1) 服務器使用的類:
創建服務器的過程就是創建在特定端口監聽客戶機請求的ServerSocket對象的過程。當收到一個合法請求時,服務器套接字獲得客戶機創建的Socket對象。服務器和客戶機之間的通訊通過套接字發生。服務器套接字等待來自整個網絡的請求。它根據請求完成操作,并將結果返回到客戶機。ServerSocket類在客戶機/服務器應用程序中代表服務器。ServerSocket類提供在特定端口上創建套接字的構造函數。如果傳入端口的參數值為0,則在自由端口上創建套接字。
ServerSocket的構造方法:
public ServerSocket(int port) throws IOException
功能:創建服務器套接字,并綁定到指定的端口上。例如:ServerSocket server=new ServerSocket(5460);
注意:該類在構造的時候,可能導致例外的發生。例如,指定的端口已經被占用。
(2) 客戶端使用的類:
創建一個套接字客戶機的第一步是創建Socket對象。Socket類的構造函數接收兩個參數 IP地址和服務器監聽的端口號。
Socket clientSocket =
new Socket(“202.202.96.35”,5460);
在上述代碼片段中,主機名是“202.202.96.35”,端口號5460是服務器監聽所在的端口。
4.2了解封裝數據的方法
創建網絡服務器時,服務器程序如何與客戶進行交流?也就是服務器如何知道客戶所傳遞的數據到底是什么格式?客戶機與服務器的數據傳遞的前提包括:
(1) 二者在數據的發送和接收上必須保持一定的格式,相互間能識別;
(2) 要保持格式的一致性應事先約定;
(3) 實現一致的方法是,客戶端在發送數據時,將數據封裝到一個類里面。服務器端接收到數據后,把收到的數據強制轉換為相應類型;
(4) 要達到上述目的應該使用java.io包下的ObjectInputStream、ObjectOutputStream類。
4.3 寫程序時的步驟
(1) 用來封裝要傳遞數據的類。下面是一個例子:
import java.io.*;
public class MyFriend extends Object
implements Serializable
{
String vName;
String cSex;
String dBirth;
String cPhone;
}
(2) 編寫接收和存儲數據的類(Connect)
用一個客戶請求套接字作為構造參數,之后讀取收到的數據并進行格式化(造型操作)。
ObjectInputStream streamClient= new ObjectInputStream(inFromClient.getInputStream())
MyFriend data=(MyFriend)
streamClient.readObject();
(3) 編寫監聽端口、響應客戶請求的類(AppServer)
服務器程序通過ServerSocket類監聽客戶的請求,由于客戶不止一個,所以,服務器程序應該是一個多線程的程序。通過extendsThread方法可以讓服務器類實現多線程。
(4) 編寫客戶端程序
4.4調試時的注意事項
對于客戶端而言,客戶程序中要指定中間層服務器的IP地址和端口,通過IP地址和端口連接到中間層服務器。對于中間層服務器而言,它要接受客戶端傳遞來的數據,所以必須運行在和客戶端約定好的一個端口上。另外,中間層負責訪問后臺數據庫服務器,所以必須保證ODBC的成功配置。調試的時候必須注意啟動順序:第一,后臺數據庫(如SQL Server)正在運行;第二,中間層服務器啟動,開始偵聽來自客戶的請求;第三,運行客戶端。
5小結
以上以三層架構為例,展示了如何更好地將知識傳授給學生。教師要很好地完成傳道授業的重任,除了在專業領域提高深度與廣度外,還需要相當的責任感。要用心去準備每一堂課,要和學生換位,站在他們的角度,考慮選擇怎么樣的講授方法。此外,教師還應該在自己的教學中不斷總結,讓自己不斷提高。
參考文獻
[1] 張席,王志強. 國內外Java教學模式的比較與探討[J]. 計算機教育,2007,(1).
[2] 王紅.“Java 語言程序設計”課學生能力的培養[J]. 計算機教育,2007,(8).
[3] 教育部人事司. 高等教育心理學[M]. 北京:高等教育出版社,2004.
[4] 覃昆,張蓉蓉. 基于B/S結構、三層架構和ASP.NET 2.0技術的基層黨組織協同管理系統設計與實現[J]. 貴州大學學報(自然科學版),2008,(1).
[5] 孫衛琴. Java面向對象編程[M]. 北京:電子工業出版社,2008.