摘要:本課題是Web服務(wù)器和瀏覽器的設(shè)計與實現(xiàn)。該文基于C/S架構(gòu),按照軟件工程基本原理和方法,綜合運用UML建模技術(shù)、計算機網(wǎng)絡(luò)技術(shù)進行系統(tǒng)設(shè)計,并用Java語言和Eclipse開發(fā)工具實現(xiàn)該系統(tǒng)。系統(tǒng)分為客戶端和服務(wù)器端,其中客戶端即瀏覽器,具有獲取并顯示服務(wù)器端的網(wǎng)頁、查看源代碼以及存儲網(wǎng)頁等基本功能;服務(wù)器端則提供Web服務(wù)。瀏覽器和服務(wù)器之間通過請求和響應(yīng)方式交換網(wǎng)頁,網(wǎng)頁由報文組成,報文的規(guī)則由HTTP協(xié)議定義。文中具體闡述了Web服務(wù)器和瀏覽器的技術(shù)背景及其詳細(xì)設(shè)計與實現(xiàn)。
關(guān)鍵詞:Web服務(wù)器;瀏覽器;C/S架構(gòu);Java
中圖分類號:TP393文獻(xiàn)標(biāo)識碼:A文章編號:1009-3044(2009)36-10283-05
隨著網(wǎng)絡(luò)技術(shù)的不斷發(fā)展,信息化進程的加快,準(zhǔn)確、快速地獲取Internet上提供的資源已成為人們普遍關(guān)注的問題。目前比較常用的Web瀏覽器是微軟公司開發(fā)的IE,它能方便地查看源文件、清除歷史記錄、設(shè)置安全等級以及設(shè)置代理服務(wù)器等。
1.1 研究背景
WWW服務(wù),也稱Web服務(wù)。它是一種交互式圖形界面的Internet服務(wù),具有強大的信息連接功能,它使得用戶通過簡單的圖形界面就可以訪問各個大學(xué)、組織和公司等的最新信息和各種服務(wù)。
1.2 可行性分析
1.2.1 技術(shù)可行性
使用Eclipse作為開發(fā)的平臺,Java作為開發(fā)語言。在Java 1.2中,SUN公司推出的新的用戶界面庫java.swing包,相比較AWT來說,功能更強大,使用更方便。而且java.swing中的類完全是由Java語言編寫的[1]。
1.2.2 經(jīng)濟可行性
本系統(tǒng)的開發(fā)需要耗費一定的人力和時間,而且在短時間里開發(fā)出來的系統(tǒng)可能離具體產(chǎn)生效益還有一定的差距,因為市場上的瀏覽器已經(jīng)非常成熟并且功能強大。但是,一些個性化的瀏覽器,或一些有定制功能的瀏覽器,仍很具吸引力。因此從長遠(yuǎn)利益來考慮,本課題的設(shè)計開發(fā)是具有較大的經(jīng)濟可行性的。
2 技術(shù)分析
2.1 Java
Java語言是一個面向?qū)ο蟮恼Z言。Java語言提供類、接口和繼承等原語,為了簡單起見,只支持類之間的單繼承,但支持接口之間的多繼承,并支持類與接口之間的實現(xiàn)機制[1]。本系統(tǒng)使用Java語言開發(fā)。
2.2 Eclipse
本系統(tǒng)使用Eclipse作為開發(fā)平臺。
Eclipse[2]是一種可擴展的開放源代碼IDE。Eclipse允許在同一IDE中集成來自不同供應(yīng)商的工具,并實現(xiàn)了工具之間的互操作性,從而顯著改變了項目工作流程,使開發(fā)者可以專注在實際的嵌入式目標(biāo)上。
2.3 C/S結(jié)構(gòu)
所謂C/S結(jié)構(gòu),是將數(shù)據(jù)存取與應(yīng)用程序分離開來,把一個軟件系統(tǒng)或應(yīng)用系統(tǒng)按功能分成若干個部分,再將這些軟件的組成部分按其不同的角色分成Client軟件和Server軟件,分別放置在客戶機和服務(wù)器上。
2.4 HTTP協(xié)議
HTTP(Hypertext Transfer Protocol,超文本傳輸協(xié)議)是Internet的應(yīng)用層協(xié)議。HTTP通過兩個程序?qū)崿F(xiàn):一個是客戶端程序(一般稱為瀏覽器),另一個是服務(wù)器程序(通常稱為Web服務(wù)器)。兩者通常運行在不同的主機上,并通過交換HTTP報文來產(chǎn)生網(wǎng)頁請求和響應(yīng)。
2.5 UML
UML(Unified Modeling Language,統(tǒng)一建模語言)[3]是用來對軟件密集系統(tǒng)進行可視化建模的一種語言。UML是一種定義良好、易于表達(dá)、功能強大且普遍適用的建模語言。它溶入了軟件工程領(lǐng)域的新思想、新方法和新技術(shù)。
3 系統(tǒng)需求分析
本系統(tǒng)分為瀏覽器和Web服務(wù)器兩部分,根據(jù)UML建模技術(shù)將瀏覽器分為三個用例,即建立連接、獲取服務(wù)及斷開連接;Web服務(wù)器也分為三個用例,即允許建立連接、提供服務(wù)及允許斷開連接。
瀏覽器用例圖如圖1所示。Web服務(wù)器用例圖如圖2所示。圖1及圖2描述了系統(tǒng)總體需求,下面具體介紹各子用例。
3.1 建立連接
功能說明:通過網(wǎng)絡(luò)連接到一個Web服務(wù)器。
基本條件:有正常的網(wǎng)絡(luò)連接,有可用的Web服務(wù)器,HTTP的相關(guān)設(shè)置正確。
基本過程:a) 輸入Web服務(wù)器的信息;b) 用戶發(fā)出建立或連接Web服務(wù)器的請求;c) 連接到指定的Web服務(wù)器。
替代過程:c) 連接失敗,將失敗信息返回給用戶;d) 提示用戶重試。
3.2 獲取服務(wù)
功能說明:用戶獲取遠(yuǎn)端的Web服務(wù)器提供的服務(wù)。
基本條件:已經(jīng)連接到Web服務(wù)器。
基本過程:a) 用戶提交獲得服務(wù)請求;b) 將請求命令提交給Web服務(wù)器;c) 從Web服務(wù)器獲取服務(wù)的內(nèi)容;d) 將獲取的內(nèi)容顯示給用戶。
替代過程(一):b) 若沒有建立連接,提醒用戶先建立連接。
替代過程(二):c) 獲取所需的服務(wù)失敗;d) 提示用戶失敗信息。
3.3 斷開連接
功能說明:離開當(dāng)前已經(jīng)連接的Web服務(wù)器。
基本條件:有正常的網(wǎng)絡(luò)連接,已經(jīng)和一個遠(yuǎn)端Web服務(wù)器建立連接,HTTP的相關(guān)設(shè)置正確。
基本過程:a) 用戶發(fā)送斷開連接的請求;b) 將用戶請求發(fā)送到Web服務(wù)器;c) 停止從Web服務(wù)器獲取服務(wù);d) 斷開和Web服務(wù)器的連接。
替代過程(一):d) 斷開連接失敗,提示用戶失敗信息。
替代過程(二):b) 發(fā)送請求失敗,提示用戶重試。
3.4 允許建立連接
功能說明:允許用戶連接到當(dāng)前的Web服務(wù)器。
基本條件:有正常的網(wǎng)絡(luò)連接,Web服務(wù)器已經(jīng)開啟服務(wù),HTTP的相關(guān)設(shè)置正確,遠(yuǎn)端用戶提交連接請求。
基本過程:a) 等待遠(yuǎn)端用戶發(fā)出建立連接的請求;b) 獲取遠(yuǎn)端用戶發(fā)送的連接請求;c) 允許該用戶連接到當(dāng)前的Web服務(wù)器。
替代過程(一):b) 若用戶信息不符合設(shè)置,發(fā)送拒絕信息到遠(yuǎn)端用戶;c) 拒絕建立連接。
替代過程(二):c) 若建立連接失敗,顯示失敗信息。
3.5 提供服務(wù)
功能說明:向遠(yuǎn)端用戶提供的所請求的服務(wù)。
基本條件:已經(jīng)和遠(yuǎn)端用戶建立連接,遠(yuǎn)端用戶有獲取服務(wù)的請求。
基本過程:a) 獲得遠(yuǎn)端用戶提出的服務(wù)請求;b) 解析獲取的服務(wù)請求的信息;c) 將服務(wù)的內(nèi)容提供給遠(yuǎn)端用戶;d) 等待用戶新的請求。
替代過程(一):b) 若無法解析請求的信息,等待新的請求。
替代過程(二):c) 發(fā)送服務(wù)內(nèi)容的操作失敗;d) 未超過最大重發(fā)次數(shù),重新嘗試發(fā)送,執(zhí)行c);e) 等待新的請求。
3.6 允許斷開連接
功能說明:服務(wù)器斷開和所請求的用戶的連接。
基本條件:有正常的網(wǎng)絡(luò)連接,收到已經(jīng)建立連接的遠(yuǎn)端用戶的斷開連接的請求,HTTP的相關(guān)設(shè)置正確。
基本過程:a) 獲取遠(yuǎn)端用戶發(fā)送的斷開連接的請求;b) 終止對該用戶提供的服務(wù);c) 斷開和該用戶建立的連接。
替代過程(一):c) 斷開連接失敗,重試。
替代過程(二):b) 終止服務(wù)失敗,等待服務(wù)結(jié)束;c) 斷開和該用戶的連接。
4 系統(tǒng)概要設(shè)計
從需求分析中,我們可以獲取各用例的對象。服務(wù)器沒有用戶界面,作為后臺服務(wù)進程啟動;瀏覽器具有用戶界面,其對象圖如圖3所示。
圖3中表示邊界對象,它的作用是作為與外界聯(lián)系的媒介。所有系統(tǒng)外部對象必須通過邊界對象才能聯(lián)系系統(tǒng)內(nèi)部對象。
表示實體對象,它是應(yīng)用中的核心部件,通常貫穿于整個生存周期。
表示控制對象,它調(diào)控實體對象和邊界對象之間的關(guān)系。
4.1 對象的靜態(tài)關(guān)系
4.1.1 建立連接
“建立連接”子用例的協(xié)作圖如圖4所示。
圖4表明了建立連接用例中各對象之間的關(guān)系:用戶向“連接界面”請求連接,“連接界面”向“響應(yīng)處理”發(fā)送“服務(wù)器信息”,“響應(yīng)處理”向“建立連接”“服務(wù)器信息”,“建立連接”向“獲取服務(wù)”發(fā)送“啟動”命令,并向“連接界面”發(fā)送“連接建立”,“連接界面”向用戶反饋“連接建立”。
4.1.2 獲取服務(wù)
“獲取服務(wù)”子用例的協(xié)作圖如圖5所示。
圖5描述的對象關(guān)系如下:用戶向“服務(wù)界面”請求服務(wù),“服務(wù)界面”向“響應(yīng)處理”發(fā)送“請求服務(wù)”,“響處理”向“獲取服務(wù)”發(fā)送“請求服務(wù)”,“獲取服務(wù)”向“服務(wù)界面”發(fā)送“服務(wù)內(nèi)容”,“服務(wù)界面”向用戶發(fā)送“服務(wù)內(nèi)容”。
4.1.3 斷開連接
“斷開連接”子用例的協(xié)作圖如圖6所示。
圖6清楚地表示了斷開連接用例中各對象之間的關(guān)系:用戶向“斷開界面”請求斷開,“斷開界面”向“響應(yīng)處理”發(fā)送“服務(wù)器信息”,“響應(yīng)處理”向“斷開連接”“服務(wù)器信息”,“斷開連接”向“斷開服務(wù)”發(fā)送“斷開”命令,并向“連接界面”發(fā)送“連接建立”,“連接界面”向用戶反饋“連接建立”。
4.2 對象的動態(tài)關(guān)系
4.2.1 建立連接
“建立連接”子用例的序列圖如圖7所示。
該序列圖通過對象之間的交互,描述了它們的動態(tài)關(guān)系如下:
在整個應(yīng)用開始時,程序尚未啟動,此時,只有“用戶”對象。
“用戶”通過“請求下載和鏈接消息”來啟動程序,使得“連接界面”對象開始了它的生存周期。
“連接界面”發(fā)送“請求連接”給“響應(yīng)處理”,使得后者開始其生存周期。
“響應(yīng)處理”發(fā)送“請求連接”給“建立連接”,使得后者開始其生存周期。
“建立連接”創(chuàng)建“獲取服務(wù)”并發(fā)送“建立連接”,使得后者的生存周期。
“連接界面”告知用戶“連接建立”。
4.2.2 獲取服務(wù)
“獲取服務(wù)”子用例的序列圖如圖8所示。
該序列圖通過對象之間的交互,描述了它們的動態(tài)關(guān)系如下:
“用戶”通過“請求服務(wù)”來啟動程序,使得“服務(wù)界面”對象開始了它的生存周期。
“服務(wù)界面”發(fā)送“請求服務(wù)”給“響應(yīng)處理”,使得后者開始其生存周期。
“響應(yīng)處理”發(fā)送“請求服務(wù)”給“獲取服務(wù)”,使得后者開始其生存周期。
“建立連接”發(fā)送“服務(wù)內(nèi)容”給“連接界面”。
4.2.3 斷開連接
“斷開連接”子用例的序列圖如圖9所示。
該序列圖通過對象之間的交互,描述了它們的動態(tài)關(guān)系如下:
在整個應(yīng)用開始時,程序尚未啟動,此時,只有“用戶”對象。
“用戶”通過“請求斷開消息”來斷開程序,使得“斷開界面”對象開始了它的生存周期。
“斷開界面”發(fā)送“請求斷開”給“響應(yīng)處理”,使得后者開始其生存周期。
“響應(yīng)處理”發(fā)送“請求斷開”給“斷開連接”,使得后者開始其生存周期。
“斷開連接”創(chuàng)建“斷開服務(wù)”并發(fā)送“斷開連接”,使得后者的生存周期。
“斷開界面”告知用戶“連接斷開”。
5 系統(tǒng)詳細(xì)設(shè)計
5.1 界面設(shè)計
界面設(shè)計圖如圖10所示。
5.2 功能設(shè)計
Web瀏覽器的主體框架類為WebBrowser類,實現(xiàn)框架上各個組件的事件監(jiān)聽。主要包括4個模塊:圖形用戶界面的構(gòu)建、組件監(jiān)聽接口的實現(xiàn)、文件保存功能的實現(xiàn)以及查看源代碼框架的生成。其類圖如圖11所示。
在圖11中:
1) JToolBar、JTextField、JMenuBar、JMenu、JMenuItem等都是和界面有關(guān)的屬性。
2) actionPerformed(ActionEvent e):void是用來實現(xiàn)監(jiān)聽器接口的actionPerformed函數(shù)。
3) saveFile(final String url):void是用來保存文件的。
4) getHtmlSource(String url):void是用來獲得源代碼的。
5) hyperlinkUpdate(HyperlinkEvent e):void是實現(xiàn)超鏈接事件監(jiān)聽器接口的hyperlinkUpdate方法。
6) main(String [] args):void生成一個IE對象,是程序的入口。
在這個核心類中將分別實現(xiàn)在系統(tǒng)總體結(jié)構(gòu)設(shè)計中各個功能模塊。
ViewSourceFrame類的主要功能是實現(xiàn)了源文件查看的主體框架,并實現(xiàn)了源文件的保存功能。主要包括兩個模塊:圖形用戶界面的構(gòu)建;組件監(jiān)聽接口的實現(xiàn)。其類圖如圖12所示。
1) JPanel contentPane、JButton、JScrollPane、JTextArea等都是和界面有關(guān)的屬性。
2) actionPerformed(ActionEvent e):void是實現(xiàn)動作事件監(jiān)聽器接口的actionPerformed方法。
服務(wù)器端設(shè)計成Dos程序界面,在后臺運行,提供服務(wù)。
1) ConnnectionThread類完成與一個Web瀏覽器的通信。
2) boolean getrequest(String s)判斷請求類型是否為“GET”。
3) String getfilename(String s)獲取要訪問的文件名。
4) void sendfile(PrintStream outs, File file)將指定文件發(fā)送給Web瀏覽器。
5.2.1 瀏覽器建立連接
瀏覽器建立連接的實現(xiàn)過程:用actionPerformed()方法響應(yīng)ActionEvent事件來建立連接。
1) 在地址欄輸入地址后點擊轉(zhuǎn)向按鈕,e.getSource() = button,url = jurl.getText()就獲得地址欄的內(nèi)容。
2) 如果url不為空,并且以“http://”開頭,JEditorPane組件將顯示url的內(nèi)容鏈接,并將url的內(nèi)容添加到ArrayList型對象history中,設(shè)置historyIndex的值,重新布局,調(diào)用jEditorPane1.revalidate()。
3) 如果鏈接顯示失敗,則彈出選擇對話框“無法打開該搜索頁”,調(diào)用JOptionPane.showMessageDialog (WebBrowser.this,\"無法打開該搜索頁\",\"網(wǎng)頁瀏覽器\",JOptionPane.ERROR_MESSAGE)。
4) 如果url不為空,并且不以“http://”開頭,url=“http://”+url,即自動在url前面添加“http://”。
如果鏈接顯示失敗,則重復(fù)c步驟的操作。
5) 如果沒有輸入url,即url為空,輸出提示:JOptionPane.showMessageDialog (WebBrowser.this,\"請輸入鏈接地址\",\"瀏覽器\",JOptionPane.ERROR_MESSAGE)。
5.2.2瀏覽器獲取服務(wù)
瀏覽器獲取服務(wù)的實現(xiàn)過程:用hyperlinkUpdate()方法響應(yīng)HyperlinkEvent事件來獲取所需的服務(wù)。
1) 如果e.getEventType() == HyperlinkEvent.EventType.ACTIVATED,則激活該類型,調(diào)用jEditorPane1.setPage(e.getURL())獲取服務(wù)。
2) 在過程中若出現(xiàn)錯誤,則將錯誤顯示ex.printStackTrace(System.err)。
5.2.3 瀏覽器斷開連接
瀏覽器斷開連接的實現(xiàn)過程:用Process windowEvent()方法響應(yīng)WindowEvent事件執(zhí)行斷開連接的操作,并關(guān)閉窗體。
首先獲取ID,如果getID()==WindowEvent.WINDOW_CLOSING)則System.exit(0),則關(guān)閉窗口。
5.2.4 服務(wù)器端允許建立連接
服務(wù)器端允許建立連接的實現(xiàn)過程:
1) 定義端口號為PORT=8080,ServerSocket server=1;Socket client=1;初始化客戶端和服務(wù)器端的套接字。服務(wù)器套接字等待請求通過網(wǎng)絡(luò)傳入,它基于該請求執(zhí)行某些操作,然后可能向請求者返回結(jié)果。
2) 定義一個try方法,接受客戶機的連接請求,client=server.accept()。
3) catch方法進行異常捕捉,在將錯誤顯示出來System.out.println(e)。
4) 定義一個ConnnectionThread類完成與一個Web瀏覽器的通信。
5) 連接Web瀏覽器的套接字,Socket client。并定義一個計數(shù)器counter。
5.2.5服務(wù)器端提供服務(wù)
服務(wù)器端提供服務(wù)的實現(xiàn)過程:
1) 構(gòu)造線程體run,用try方法獲取客戶機IP地址和端口號。
2) inline=instream.readLine(),讀取Web瀏覽器提交的請求信息。
3) 如果是GET請求,filename=getfilename(inline)。
4) 若文件存在,則將文件送給Web瀏覽器System.out.println(filename+\" requested.\")。
5) 發(fā)送文件,sendfile(outstream, file)。
6) 若文件不存在,outstream.println(\"HTTP/1.0 404 no found\")。
7) instream.close(),outstream.close()關(guān)閉輸入輸出流。
8) 若IOException e發(fā)生異常,則用catch方法捕捉異常。
5.2.6 服務(wù)器端斷開連接
服務(wù)器端斷開連接的實現(xiàn)過程:調(diào)用outs.flush()方法刷新緩沖的輸出流,in.close()斷開服務(wù)器連接。
6 運行流程及說明
6.1 瀏覽器初始界面
運行瀏覽器程序后,將會出現(xiàn)初始的界面.
6.1.1 界面說明
地址:輸入IP地址。
轉(zhuǎn)向:點擊轉(zhuǎn)向地址欄中輸入的IP地址,也可以用回車鍵代替。
另存為:把當(dāng)前頁面保存下來。
后退:退回上一個瀏覽的頁面。
前進:前進到之后的一個瀏覽頁面。
查看源代碼:查看當(dāng)前頁面的源代碼。
退出:退出瀏覽器。
6.1.2 創(chuàng)建瀏覽器界面代碼說明
在WebBrowser類中創(chuàng)建瀏覽器界面和各菜單欄,包括:地址欄、網(wǎng)頁顯示界面、菜單欄、菜單組、菜單項、工具欄、工具欄中的按鈕組件等。部分代碼如下:
JButton picSave = new JButton(\"另存為\");
JButton picBack = new JButton(\"后退\");
JButton picForward = new JButton(\"前進\");
JButton picView = new JButton(\"查看源代碼\");
JButton picExit = new JButton(\"退出\");
JLabel label=new JLabel(\"地址\");
JButton button=new JButton(\"轉(zhuǎn)向\");
6.2 連接服務(wù)器界面
輸入IP地址后按回車鍵就會顯示相應(yīng)的頁面,這表明連接成功。
在轉(zhuǎn)向按鈕上增加監(jiān)聽器,觸發(fā)執(zhí)行相關(guān)操作,通過填寫輸入,輸出端口的文本區(qū)獲取端口號,定義一個public void actionPerformed(ActionEvent e)方法進行事件偵聽,分析地址欄內(nèi)的內(nèi)容,若e.getSource() == jurl,url=jurl.getText ();獲取地址欄的內(nèi)容。將url的內(nèi)容添加到ArrayList型對象history中,設(shè)置historyIndex的值,重新布局,用catch()方法獲取異常捕捉。具體代碼如下:
public void actionPerformed(ActionEvent e) {
String url = \"\";
if (e.getSource() == button){
url=jurl.getText ();
if(url.length ()>0url.startsWith (\"http://\")){
try { jEditorPane1.setPage (url);
history.add(url);
historyIndex=history.size()-1;
jEditorPane1.setEditable(1); //add by copy editor :)
jEditorPane1.revalidate ();
}
catch(Exception ex) {
JOptionPane.showMessageDialog (WebBrowser.this,\"無法打開該搜索頁\",\"網(wǎng)頁瀏覽器\",JOptionPane.ERROR_MESSAGE);}}
// 轉(zhuǎn)向按鈕相關(guān)操作結(jié)束
6.3 查看源代碼界面
在點擊查看源代碼按鈕后,根據(jù)url,獲得源代碼,生成顯示源代碼的框架對象,并用public ViewSourceFrame (String htmlSource)方法初始化圖形界面,用setBounds方法設(shè)置窗口大小,設(shè)置setVisible屬性為true。
if (e.getSource() == sourceItem ||e.getSource() == picView){
url = jurl.getText ().toString ().trim ();
if(url.length ()>0!url.startsWith (\"http://\")) {
url=\"http://\"+url; }
if( !url.equals (\"\")) {
getHtmlSource (url);
ViewSourceFrame vsframe = new ViewSourceFrame (htmlSource);
vsframe.setBounds (0,0,800,500);
vsframe.setVisible(true); }
else { JOptionPane.showMessageDialog (WebBrowser.this,\"請輸入鏈接地址\",\"網(wǎng)頁瀏覽器\",JOptionPane.ERROR_MESSAGE);}}
6.3 保存網(wǎng)頁界面
在點擊另存為按鈕后,根據(jù)當(dāng)前頁面,用saveFile()方法將頁面信息保存下來。相關(guān)代碼如下:
if (e.getSource() == picSave||e.getSource() == saveAsItem){
url = jurl.getText ().toString ().trim();
if(url.length ()>0!url.startsWith (\"http://\")) {
url=\"http://\"+url; }
if(!url.equals (\"\")) {
saveFile(url);}
else {
JOptionPane.showMessageDialog (WebBrowser.this,\"請輸入鏈接地址\",\"網(wǎng)頁瀏覽器\",JOptionPane.ERROR_MESSAGE);}}
//另存為的代碼結(jié)束
7 結(jié)束語
經(jīng)過一段時間的設(shè)計和開發(fā),Web服務(wù)器及瀏覽器終于完成,其基本功能已實現(xiàn),瀏覽器能夠訪問Web服務(wù)器,通過輸入正確的URL獲取超文本并顯示,同時可以查看源代碼并保存頁面;服務(wù)器能夠提供Web服務(wù)。
但是由于多方面因素的影響,設(shè)計完成略顯倉促,這也導(dǎo)致該系統(tǒng)還有許多不盡如人意的地方,比如用戶界面不夠美觀,刷新網(wǎng)頁、收藏網(wǎng)頁等功能未實現(xiàn),出錯處理也考慮不周,這些都有待進一步改善。
要完成好這項工作必須在掌握必備的理論知識前提下,不斷實踐,積累經(jīng)驗,提高分析問題和解決問題的能力。
參考文獻(xiàn):
[1] 馮博,應(yīng)群.面向?qū)ο蟮腏ava網(wǎng)絡(luò)編程[M].北京:清華大學(xué)出版社,2004.
[2] 張大治,應(yīng)群.精通Eclipse[M].北京:清華大學(xué)出版社,2006.
[3] 董蘭芳.UML課程設(shè)計[M].北京:機械工業(yè)出版社,2005.
[4] Tanenbaum A S.計算機網(wǎng)絡(luò)[M].潘愛民,譯.4版.北京:清華大學(xué)出版社,2004.