




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
-36-
前言隨著互聯(lián)網逐步普及,人們的生活和工作也越來越離不開信息網絡的支持,而聊天室是人們最常見,最直接的網上交流方式。在網絡中,人們不需要知道對方真實的姓名,年齡,只要是在同一個軟件或者同一個聊天室里,大家都可以放下身心的包袱,無拘無束的交友、抒發(fā)自己的感想來緩減壓力。不會因為一些不合理的原因,限制住自己的語言。可以這么說,網絡帶動了信息的交流,而聊天帶來了人們更多的朋友和伙伴。人們在生活、學習、工作中難免會遇到各種各樣的問題,比如生活中的不愉快、學習上的困惑、工作中的不順利都會使人們的心情變得很糟糕,當人們無法解決這些困惑時,就需要找個人來聊天釋放心中的不愉快。那么聊天室就是一個不錯的選擇,在這聊天室里盡管說出自己心中的困惑,因為這里是無拘無束的。聊天系統(tǒng)以聊天交流為主,為廣大用戶提供一個借助網絡進行人際交往的平臺,也是網絡與現(xiàn)實最貼近的實用型網站。本文所介紹的聊天系統(tǒng)是基于web開發(fā)設計的,其主要特性是能動態(tài)、實時的完成信息的傳遞,其運行所需環(huán)境及其工作流程將在本文依次介紹,并且文中提供了部分程序源代碼。根據當前網絡的需求,網絡聊天越來越受到各種網民的青睞。因此開發(fā)網絡聊天是相當有必要,而且在網站內增加聊天功能,它不僅可以提高網站的訪問量,同時還可以留住訪客,更重要的是讓訪客通過聊天室進行實時的互相交流。當前的聊天室都是嵌在一些大型的網站中,比如,新浪、搜狐網站把聊天室嵌入到當中。就針對人們在生活、學習、工作中遇到的問題,這些網站就沒有設立一個供人們討論解決問題的聊天室。所以本文介紹的聊天室系統(tǒng)就針對這一問題提供了一個很好的交流平臺,具有很好的現(xiàn)實意義和實用價值。
第1章系統(tǒng)使用的技術概述1.1JSP的概述JSP技術提供了一種簡單快速的方法來創(chuàng)建顯示動態(tài)生成內容的Web頁面。也就是在MVC中充當V(View)的角色。由業(yè)界處于領先地位的Sun公司制定了相關的JSP技術規(guī)范,該規(guī)范定義了如何在服務器和JSP頁面間進行交互,還描述了頁面的格式和語法。JSP頁面使用XML標簽和scriptlets(一種使用Java語言編寫的腳本代碼),封裝了生成頁面內容的邏輯。它將各種格式的標簽(HTML或者XML)直接傳遞回響應頁面。通過這種方式,JSP頁面實現(xiàn)了頁面邏輯與其設計和顯示的分離。JSP技術是Java系列技術的一部分。JSP頁面被編譯成servlet,并調用JavaBeans組件(beans)或EnterpriseJavaBeans組件(企業(yè)beans),以便在服務器端處理。因此,JSP技術在構建可升級的基于web的應用程序時扮演了重要角色。JSP技術是行業(yè)協(xié)作的結果,它的設計是開放的,符合行業(yè)標準的,并支持絕大多數的服務器、瀏覽器和相關工具。由于使用可重用的組件和標簽取代了對頁面本身腳本語言的嚴重依賴,JSP技術大大加快了開發(fā)的速度。所有JSP的實現(xiàn)均支持以Java編程語言為基礎的腳本語言,它有與生俱來的可適應性,支持復雜的操作。針對本聊天室也是使用了JSP技術,沒有JSP的支持那么在顯示層就無法顯示數據,即使系統(tǒng)做的再好那也無濟于事。1.2STRUTS的概述當建筑師開始一個建筑項目時,首先要設計該建筑的框架結構,有了這份藍圖,接下來的實際建筑過程才會有條不紊,井然有序。同樣,軟件件開發(fā)者開始一個軟件項目時,首先也應該構思該軟件應用的框架,規(guī)劃軟件模塊,并定義這些模塊之間的接口和關系。框架可以提高軟件開發(fā)的速度和效率,并且使軟件更便于維護。對于開發(fā)web應用,要從頭設計并開發(fā)一個可靠,穩(wěn)定的框架并不是一件容易的事。幸運的是,隨著Web開發(fā)技術的日趨成熟,在Web開發(fā)領域出現(xiàn)了一些現(xiàn)成的優(yōu)秀的框架,開發(fā)者可以直接使用他們,Struts就是一種不錯的選擇,他是基于MVC的Web應用框架。Struts實質上就是在JSPModel2的基礎上實現(xiàn)的一個MVC框架。在Struts框架中,模型由實現(xiàn)業(yè)務邏輯的javaBean或者EJB組件構成,控制器ActionServlet和Action來實現(xiàn),視圖由一組JSP文件構成。1.2.1視圖視圖就是一組JSP文件,在這些JSP文件中沒有業(yè)務邏輯,也沒有模型信息,只有標簽,這些標簽可以是標準的JSP標簽或客戶化標簽,如Sturts標簽庫的標簽。此外,通常把Struts框架中的ActionFormBean的也劃分到視圖模塊中。ActionFormBean也是一種javaBean,除了具有一些javaBean的常規(guī)方法,還包含一些特殊的方法,用于驗證HTML表單數據以及將其屬性重新設置為默認值。Struts框架把用戶輸入的表單數據保存在ActionFormBean中,把它傳遞給控制器,控制器可以對ActionFormBean中的數據進行修改,JSP文件使用Struts標簽讀取修改后的ActionFormBean的信息,重新設置HTML表單。1.2.2模型模型表示應用程序的狀態(tài)和業(yè)務邏輯。對于大型應用,業(yè)務邏輯通常由javaBean或者EJB組件來實現(xiàn)。1.2.3控制器控制器由ActionServlet類和Action類來實現(xiàn)。ActionServlet類是Struts框架中的核心組件。ActionServlet繼承了javax.servlet.http.HttpServlet類,它在MVC模型中扮演中央控制器的角色。ActionServlet主要負責接受HTTP請求信息,根據配置文件strut-config.xml的配置信息,把請求轉發(fā)給適當的Action對象,如果該Action對象不存在,ActionServlet會先創(chuàng)建這個Action對象。Action類負責調用模型的方法,更新模型的狀態(tài),并幫助控制應用程序的流程。對于小型簡單的應用,Action充當用戶請求和業(yè)務邏輯處理之間的適配器(Adaptor),其功能就是將請求與業(yè)務邏輯分開,Action根據用戶請求調用相關的業(yè)務邏輯組件。業(yè)務邏輯由javaBean或者EJB來完成,Action類側重于控制應用程序的流程,而不是實現(xiàn)應用程序的邏輯。通過將業(yè)邏輯放在單獨的java包或EJB中,可以提高程序的靈活性和可充用性。當actionServlet控制器收到用戶請求后,把請求轉發(fā)到一個Action實例。如果這個實例不存在,控制器會首先創(chuàng)建它,然后調用這個Action實例的execute()方法。Action的execute()方法返回ActionForward對象,它封裝了把用戶請求在轉發(fā)給其他Web組件的信息。用戶定義自己的Action類。即Action基類的子類時,必須覆蓋execute()方法。在Action基類中該方法返回null。 圖1-1MVC模型圖MVC模式的出現(xiàn)不僅實現(xiàn)了功能模塊和顯示模塊的分離,同時它還提高了應用系統(tǒng)的可維護性、可擴展性、可移植性和組件的可復用性。早期的程序中,如果不注意模塊與模塊之間的耦合性,常常會增加程序的復雜性以及難以維護性。盡管MVC設計模式很早就提出,但在Web項目的開發(fā)中引入MVC卻是步履維艱。主要原因:一是在早期的Web項目的開發(fā)中,程序語言和HTML的分離一直難以實現(xiàn)。CGI程序以字符串輸出的形式動態(tài)地生成HTML內容。后來隨著腳本語言的出現(xiàn),前面的方式又被倒了過來,改成將腳本語言書寫的程序嵌入在HTML內容中。這兩種方式有一個相同的不足之處即它們總是無法將程序語言和HTML分離。二是腳本語言的功能相對較弱,缺乏支持MVC設計模式的一些必要的技術基礎。直到基于J2EE的JSPModel2問世時才得以改觀。它用JSP技術實現(xiàn)視圖的功能,用Servlet技術實現(xiàn)控制器的功能,用JavaBean技術實現(xiàn)模型的功能。1.3AJAX的概述Ajax技術就是所謂的Web2.0技術的重要組成部分,Ajax技術既是對傳統(tǒng)Web技術的革命,也是對傳統(tǒng)Web技術的一種改良和發(fā)展。引入Ajax技術后,不僅改進了Web應用的性能,也改善了用戶的體驗。下面就從幾個方面談談傳統(tǒng)Web應用與Ajax之間的不同。用戶體驗方面:這是Ajax技術最大的改善之處,對于傳統(tǒng)的Web應用,用戶只能發(fā)送獨占式請求,一旦請求發(fā)送出去,頁面就處于等待狀態(tài),等待服務器響應完成,在服務器響應完成之前,客戶端的瀏覽器只能是一片空白;而Ajax技術則完全不同,它允許采用異步的方法發(fā)送請求,請求的發(fā)送完全不會阻塞當前的瀏覽器線程,瀏覽器可以繼續(xù)下一步操作,例如繼續(xù)瀏覽,甚至再次發(fā)送異步請求。對于用戶的體驗而言,Ajax提供了一種重大的改善,它讓用戶不會處于等待狀態(tài),用戶會感覺自己一直與應用處于交互狀態(tài)。響應速度:就響應速度而言,一般人會認為Ajax應用的速度比傳統(tǒng)Web應用要快,實際上這種說法并不完全正確。正如前面見到的,基于Ajax的應用需要大量增加JavaScript代碼,大量增加JavaScript代碼后的Web頁面在第一次加載時速度將比傳統(tǒng)Web頁還慢(因為必須下載大量的JavaScript代碼)。一旦進入該頁后,響應速度便會明顯提高,因為無須頻繁地在各頁面之間跳轉,從服務器獲得的僅是必須改變的數據,因此減少了冗余數據的下載,從而大幅度提高響應速度。有的人說,Ajax包含的大量JavaScript代碼會占用用戶的大量帶寬,這是相當錯誤的說法,Ajax應用讓頁面一次下載,但可以多次重復使用。表面上看,一次下載的JavaScript代碼量雖然增大,但從長時間來看,傳統(tǒng)Web應用需要多次下載Web頁面,需要的帶寬更大。應用架構:傳統(tǒng)Web應用主要由3層組成,而增加Ajax技術的Web應用將在傳統(tǒng)的Web應用上額外增加一個Ajax引擎,其實質就是一層JavaScript代碼。開發(fā)的代碼量:Ajax技術的大部分功能都依賴于JavaScript語言實現(xiàn),大量的JavaScript代碼嚴重降低了程序員的開發(fā)速度。服務器的負擔:大量使用Ajax技術的Web應用將導致服務器的負擔大大加重,因為Ajax技術往往比傳統(tǒng)Web應用需要發(fā)送更多的請求。Ajax技術是一種非常優(yōu)秀的技術,但應該理性對待,絕不能在整個應用中盲目增加大量的Ajax交互。1.4JDBC的概述JDBC是Sun提供的一套數據庫編程接口API函數,由Java語言編寫的類、界面組成。用JDBC寫的程序能夠自動地將SQL語句傳送給相應的數據庫管理系統(tǒng)。不但如此,使用Java編寫的應用程序可以在任何支持Java的平臺上運行,不必在不同的平臺上編寫不同的應用。Java和JDBC的結合可以讓開發(fā)人員在開發(fā)數據庫應用程序時真正實現(xiàn)“WriteOnce,RunEverywhere!”1.4.1JDBC驅動程序的類型(1)JDBC-ODBC橋加ODBC驅動程序:JavaSoft橋產品利用ODBC驅動程序提供JDBC訪問。注意,必須將ODBC二進制代碼加載到使用該驅動程序的每個客戶機上。(2)本地API-部份用Java來編寫的驅動程序:這種類型的驅動程序把客戶機API上的JDBC調用轉換為Oracle、Sybase、Informix、DB2或其它DBMS的調用。注意,象橋驅動程序一樣,這種類型的驅動程序要求將某些二進制代碼加載到每臺客戶機。(3)JDBC網絡純Java驅動程序:這種驅動程序將JDBC轉換為與DBMS無關的網絡協(xié)議,之后這種協(xié)議又被某個服務器轉換為一種DBMS協(xié)議。這種網絡服務器中間件能夠將它的純Java客戶機連接到多種不同的數據庫上。所用的具體協(xié)議取決于提供者。(4)本地協(xié)議純Java驅動程序:這種類型的驅動程序將JDBC調用直接轉換為DBMS所使用的網絡協(xié)議。這將允許從客戶機機器上直接調用DBMS服務器,是Intranet訪問的一個很實用的解決方法。1.4.2Connection對象Connection對象代表與數據庫的連接。連接過程包括所執(zhí)行的SQL語句和在該連接上所返回的結果。一個應用程序可與單個數據庫有一個或多個連接,或者可與許多數據庫有連接。打開連接與數據庫建立連接的標準方法是調用DriverManager.getConnection方法。該方法接受含有某個URL的字符串。DriverManager類(即所謂的JDBC管理層)將嘗試找到可與那個URL所代表的數據庫進行連接的驅動程序。DriverManager類存有已注冊的Driver類的清單。當調用方法getConnection時,它將檢查清單中的每個驅動程序,直到找到可與URL中指定的數據庫進行連接的驅動程序為止。Driver的方法connect使用這個URL來建立實際的連接。1.4.3Statement對象Statement對象用于將SQL語句發(fā)送到數據庫中。實際上有三種Statement對象,它們都作為在給定連接上執(zhí)行SQL語句的包容器:Statement、PreparedStatement和CallableStatement。它們都專用于發(fā)送特定類型的SQL語句:Statement對象用于執(zhí)行不帶參數的簡單SQL語句;PreparedStatement對象用于執(zhí)行帶或不帶IN參數的預編譯SQL語句;CallableStatement對象用于執(zhí)行對數據庫已存儲過程的調用。Statement接口提供了執(zhí)行語句和獲取結果的基本方法。PreparedStatement接口添加了處理IN參數的方法;而CallableStatement添加了處理OUT參數的方法。1.4.4ResultSet對象ResultSet包含符合SQL語句中條件的所有行,并且它通過一套get方法(這些get方法可以訪問當前行中的不同列)提供了對這些行中數據的訪問。
第2章聊天室的需求分析2.1需求分析“基于web的聊天室”是一種基于B/S即Browser/Server(瀏覽器/服務器)的結構模式,它是對C/S結構的一種變化或者改進的結構。在這種結構下,用戶界面完全通過WWW瀏覽器實現(xiàn),一部分事務邏輯在前端實現(xiàn),但是主要事務邏輯在服務器端實現(xiàn)。B/S結構,主要是利用了不斷成熟的WWW瀏覽器技術,結合瀏覽器的多種Script語言(JavaScript)和Ajax技術,用通用瀏覽器就實現(xiàn)了原來需要復雜專用軟件才能實現(xiàn)的強大功能,并節(jié)約了開發(fā)成本,是一種全新的軟件系統(tǒng)構造技術。隨著各種操作系統(tǒng)將瀏覽器技術植入操作系統(tǒng)內部,這種結構更成為當今應用軟件的首選體系結構。顯然B/S結構應用程序相對于傳統(tǒng)的C/S結構應用程序將是巨大的進步。針對本聊天室所采用的B/S結構模式,給用戶帶來了很大方便。用戶不再需要像基于C/S模式開發(fā)出的軟件,需要把客戶端程序安裝在本機上才可以使用。而本聊天室只需要用戶的電腦上安裝有瀏覽器就可以聊天,實際上每臺電腦上都有瀏覽器,這樣用戶可以走到哪聊到哪,大大的方便了用戶。2.2總體設計思想該聊天室的設計主要采用Ajax的設計思想,主要是異步通信。就該系統(tǒng)使用的技術就是IT行業(yè)比較流行的技術,如:Struts,Ajax,Jdbc,Oracle等,這些技術都是根植于Java的,有很好的平臺移植性。在這當中會用到一些架構,比如開源的Struts等,服務器采用Tomcat5比較好用。當然其它技術也是可以做聊天室的。從管理者考慮,該系統(tǒng)提供聊天室前臺和后臺,從功能上考慮聊天室必定要有房間,所以聊天室的前臺要有房間分類和不同分類下的不同房間和用戶注冊登錄聊天室的功能。在聊天室的主界面上設置的功能有:公聊和私聊、發(fā)送表情、字體顏色、屏蔽和解蔽講話,在線列表,管理員(踢人)以及返回最近的聊天記錄。在聊天室的后臺,要提供的功能有房間分類的添加與刪除,房間的添加與刪除以及編輯功能,還有對注冊用戶的編輯和刪除以及修改權限的功能。2.3系統(tǒng)功能描述2.3.1前臺功能(1)房間分類與選擇房間:從聊天室的特點上考慮,聊天室必定有房間,所以設計了房間分類,和該分類下的不同房間。(2)注冊登錄:用戶只有先選擇某一個房間分類下的一個房間才可以轉到登錄界面,然后登錄進行聊天。(3)用戶聊天:用戶可以選擇公聊還是私聊。當選擇公聊時,用戶可以直接在輸入框中輸入要說話的內容,這時所有的用戶都能看到你的聊天內容。當選擇私聊時,用戶先選擇要私聊的對象,然后在選中“悄悄話”這一選項就可以聊天了,聊天內容其他人是不會看到的。用戶還可選擇各種字體顏色以及各種表情。用戶還可以屏蔽某人講話,當用戶不想看到某人的講話是可以先選擇該人,然后在點擊“屏蔽”,該人的講話就不再顯示。當點擊“解屏”時該人的講話又可以顯示。用戶還可以查看最近的聊天記錄,為了防止用戶刷屏是不允許用戶發(fā)送同一句話的。如果以管理員身份登錄聊天時,管理員可以把某人請出房間。2.3.2聊天室的后臺在后臺只有一個管理員,對聊天室和用戶進行管理。(1)聊天室的管理:管理員可以添加房間類別和刪除房間類別的名稱,以及添加該房間類別下的房間,房間信息有:房間名稱,房間介紹,房間的最大人數,當然還可以修改和刪除房間信息。(2)用戶的管理:管理員還可以對用戶進行修改和刪除,把用戶的權限修改為管理員時,用戶就變成了管理員可以對聊天室和用戶進行管理。之后登錄聊天室就可以把某人請出房間了。2.4系統(tǒng)的用例圖本系統(tǒng)包括三個用例:分別是用戶的注冊與登陸,用戶聊天,后臺管理。下面這三張圖分別對應這三個用例的用例圖。選擇房間選擇房間用戶注冊用戶登錄圖2-1用戶登錄用例圖公聊公聊私聊屏蔽講話查看聊天記錄離開圖2-2用戶聊天的用例圖添加類別添加類別刪除類別查看房間編輯房間添加房間修改擁護信息圖2-3后臺管理用例圖2.5性能需求(1)系統(tǒng)要有良好移植性,不受操作系統(tǒng)的限制。(2)系統(tǒng)要有良好的可維護行,編寫代碼要規(guī)范。(3)系統(tǒng)要有一定的健壯性。(4)系統(tǒng)運行必須穩(wěn)定,盡量少占用內存資源。(5)運行環(huán)境操作系統(tǒng):Windows7操作系統(tǒng),1G內存。數據庫:Oracle10數據庫。服務器:Tomcat6.0
第3章聊天室系統(tǒng)詳細設計3.1數據庫設計數據庫設計就是設計程序所需數據的類型、格式、長度和組織方式。因為數據庫應用系統(tǒng)主要是處理大量的數據,所以數據庫設計的優(yōu)劣,直接影響整個數據庫應用系統(tǒng)的性能和執(zhí)行速率。根據本系統(tǒng)的功能需求分析,本系統(tǒng)的數據庫可包括三個表,分別是房間分類表(classify_info),房間表(room_info),用戶表(user_room).房間分類表:房間分類ID,房間分類名稱兩個字段。房間信息表:房間ID,房間分類,房間名稱,房間介紹,房間最大人數五個字段。用戶表:用戶ID,用戶名,用戶密碼,用戶權限(1:代表管理員,0:代表用戶)。3.2數據庫的需求分析根據本聊天室的特點,只有房間和用戶關系,所以設計的表不多,只有三張表。NO名稱定義描述位置D1用戶信息表userid+name+pass+type記錄注冊用戶的基本信息DBD2房間信息表roomid+classify+name+introduction+maxuser記錄房間信息DBD3房間分類表classify+name記錄房間分類名DBD4useridauto_increment唯一標識用戶DBD5Namevarchar(16)用戶名字DBD6Passvarchar(12)用戶密碼DBD7Typeint(2)區(qū)分普通用戶于管理員DBD8roomidauto_increment唯一標識房間DBD9classifyvarchar(20)房間分類名D10Namevarchar(16)房間名字DBD11introductionvarchar(100)房間介紹DBD12maxuserint(3)房間最大人數DBD13classifyidauto_increment唯一表示房間分類DBD14Namevarchar(12)房間分類名DB表3-1數據字典表數據項條目(D1—D16)1、用戶表(user_info)位序名稱與標識頻度類型與有效范圍輸入媒體安全性D1編號(userid)低Int(自動)系統(tǒng)無D2名字(name)低Varchar(16)鍵盤無D3密碼(pass)低Varchar(12)鍵盤無D4添加時間(type)低Int(2)鍵盤無2、房間表(room_info)D7房間編號(roomid)中Int(自動)系統(tǒng)無D8房間分類(classify)中Varchar(16)鍵盤無D9房間名稱(name)中Varchar(50)鍵盤無D10房間介紹(introduction)中Varchar(100)鍵盤無D11房間最大人數(maxuser)中Int(2)鍵盤無3、房間分類表(classify_info)D15房間分類編號(classifyid)低Int(自動)系統(tǒng)無D16房間分類名(name)低Char(12)鍵盤無(1)數據庫輸入項目表表3-2數據庫輸入項目表(2)輸出項目1)聊天室前臺選擇房間:在聊天界面可以顯示房間名稱游客登錄:在聊天界面可以顯示游客登陸的名稱用戶注冊登錄:在聊天界面可以顯示用戶登錄的名稱管理員入口:進入后臺的通道 2)聊天室后臺 a.聊天室的管理 添加類別:由管理員添加房間的類別。 刪除類別:由管理員把房間的類別刪除。 添加房間:由管理員添加一些房間的信息。 查看房間:管理員可以對房間進行增刪改查。b.用戶管理 查看會員:管理員可以對會員進行編輯和刪除。3.3軟件硬件接口
(1)硬件接口 除服務器、客戶端硬件設備的支持外,最重要的是需要連接到互聯(lián)網、局域網等相關網絡的支持,此外還要確保機器的常用端口(如8888)的連通。(2)軟件接口本系統(tǒng)數據庫信息大部分是來自手動輸入。用戶數據庫接口:用于用戶在登錄聊天時使用;管理員數據庫接口:用于管理房間和用戶使用;3.4系統(tǒng)流程圖系統(tǒng)的流程圖 圖3-1系統(tǒng)流程圖3.5軟接結構(1)聊天室前臺功能圖 聊天室前聊天室前臺tai臺選擇房間用戶注冊用戶登錄聊天界面圖3-2聊天室前臺功能圖(2)聊天室后臺功能圖 聊天室聊天室后臺選擇房間用戶注冊用戶登錄聊天界面選擇房間選擇房間選擇房間圖3-3聊天室后臺功能圖
第4章聊天室系統(tǒng)的實現(xiàn)4.1房間列表的實現(xiàn)用戶首先進入系統(tǒng),來到房間列表的頁面,在這里用戶首先要選擇房間才能進入登錄界面。在這個頁面上能看到的信息有:房間分類名稱和該房間分類下的所有房間,以及當前房間里有多少人。 圖4-1聊天室房間列表圖4.2登錄頁面的實現(xiàn)用戶根據用戶名和密碼進行登錄聊天,系統(tǒng)會判斷用戶名是否正確,若正確則進行下一步的操作,否則重新輸。如果用戶沒有注冊,那么用戶要進入注冊頁面進行注冊。注冊時會檢查用戶名有沒有已經被使用,如果使用會提示“用戶名已被注冊”。密碼不能少于6位,若少于6位會提示“密碼不能少于6位”.當用戶進入登錄頁面時,如果沒有注冊過的用戶,需要進行注冊才能聊天。 圖4-2注冊頁面圖用戶注冊成功時,跳轉到顯示成功的頁面,如下圖: 圖4-3注冊成功后的跳轉頁面當用戶點擊某一個房間時,會跳轉到登錄頁面,如果沒有注冊返回到圖。4-2進行注冊,如果已經注冊過,則可以直接登錄。 圖4-4用戶登錄界面圖4.3chat頁面的實現(xiàn) 當用戶成功登錄后就可以聊天了,在這里用戶可以進行私聊和公聊,發(fā)送表情,查看最近的聊天信息和屏蔽講話等功能。下圖是用戶成功登錄以后進入聊天界面的頁面圖。 圖4-5聊天頁面圖在下圖中顯示了用戶聊天的的各種功能,包括:公聊、私聊、屏蔽講話、刷屏等功能,當某人頻繁操作類似騷擾時會提醒不能刷屏,如下圖: 圖4-6防止刷屏頁面圖 頁面下方有聊天記錄按鈕,通過點擊該按鈕可以查看歷史記錄,如下圖: 圖4-7查看聊天記錄頁面圖4.4管理員登錄界面的實現(xiàn) 系統(tǒng)首頁下方有一個管理入口,是管理員登錄的入口,點擊彈出如下頁面,管理員以管理員的身份登錄進入后臺對系統(tǒng)進行操作管理,若用戶名或密碼錯誤則會跳轉到錯誤頁面,反之登錄到后臺管理頁面進行操作,登陸界面如下圖: 圖4-8管理員登錄界面4.5后臺管理也頁面的實現(xiàn)管理員成功登錄后就可以對后臺進行管理了,管理員可以添加房間類別和刪除類別,添加房間信息和修改以及刪除房間信息,也可對用戶編輯和修改。下圖是管理員成功登錄以后的后臺頁面圖。圖4-9后臺頁面圖如上圖左邊列表,添加類別是對聊天室類別類型的添加,添加聊天室是對房間的添加,管理員添加房間的頁面如下圖:圖4-10添加房間頁面圖在后臺管理頁面的查看編輯中,可以查詢用戶,并對用戶的管理權限進行管理,下圖顯示的是管理員查看用戶列表的頁面:圖4-11用戶列表圖點擊編輯跳出如下頁面可以修改用戶的權限,用戶權限分為普通用戶和管理員兩種,選擇好要賦予該用戶的權限后,點擊修改,顯示修改成功即權限完成。圖4-12用戶修改頁面
第5章測試與運行5.1軟件測試的目的和原則在開發(fā)大型軟件系統(tǒng)的過程中,需要面對錯綜復雜的問題,因此,在軟件生存周期的每個階段都不可避免地會產生錯誤。要力求在每個階段結束之前通過嚴格的技術審查,盡可能早的發(fā)現(xiàn)并糾正錯誤。測試的目的就是在軟件投入生產性運行之前,盡可能多地發(fā)現(xiàn)軟件中的錯誤。目前軟件測試仍然是保證軟件質量的關鍵步驟,它是對軟件規(guī)格說明、設計和編碼的最后復審。盡管面向對象技術的基本思想保證了軟件應該有更高的質量,但無論采用什么樣的編程技術,編程人員的錯誤都是不可避免的,而且由于面向對象技術開發(fā)的軟件代碼重用率高,更需要嚴格測試,避免錯誤的繁衍。因此,軟件測試在面向對象編程里更具有它的重要性。與開發(fā)過程類似,測試過程也必須分步驟進行,每個步驟在邏輯上是前一個步驟的繼續(xù)。大型軟件系統(tǒng)通常由若干個子系統(tǒng)組成,每個子系統(tǒng)又由許多模塊組成。此大型軟件系統(tǒng)的測試的基本層次如圖所示。圖5-1測試的基本層次(1)單元測試單元測試的用例從單元詳細設計中導出。在單元測試中可以采用功能性測試和結構性測試兩種。(2)集成測試在這個測試步驟中所發(fā)現(xiàn)的往往是概要設計的錯誤。(3)系統(tǒng)測試在這個測試步驟中所發(fā)現(xiàn)的往往是需求規(guī)格說明的錯誤。一般來說,系統(tǒng)測試是功能性測試,不是結構性測試。(4)白盒測試在知道程序代碼的情況下進行,主要是測試代碼邏輯(5)黑盒測試在不關心代碼的情況下進行,主要是測試系統(tǒng)功能。5.1.1測試環(huán)境(1)硬件條件:PC機(2)運行環(huán)境:Windows7、Tomcat6.0、Oracle10、MozillaFirewox(3)開發(fā)軟件:JSP+Struts+Ajax+JDBC+oracle5.1.2測試結果(1)聊天室前臺測試 表5-1功能測試表1功能預定功能實際功能達到目標用戶注冊,登錄提供用戶注冊,登錄聊天室的功能能夠登錄,能注冊達到驗證用戶名和密碼提供驗證用戶名和密碼能夠驗證用戶名和密碼達到登陸后顯示提示用戶登陸后在提示用戶登錄用戶登陸后在提示用戶登錄達到用戶退出用戶離開時通知給所有用戶用戶離開時通知給所有用戶達到向全體用戶發(fā)送消息能夠把聊天信息發(fā)送給所有用戶能夠把聊天信息發(fā)送給所有用戶達到向指定用戶發(fā)送消息能夠把聊天信息向所指定的用戶發(fā)送能夠把聊天信息向所指定的用戶發(fā)送達到返回聊天記錄能夠實現(xiàn)返回最近的聊天記錄能夠實現(xiàn)返回最近的聊天記錄達到清除聊天內容能夠報當前的聊天內容清除能夠報當前的聊天內容清除達到屏蔽/解蔽能夠屏蔽/解蔽講話能夠屏蔽/解蔽講話達到清空屏蔽能夠把所有的屏蔽清空能夠把所有的屏蔽清空達到字體顏色能夠更改字體顏色能夠更改字體顏色達到表情能夠發(fā)送表情能夠發(fā)送表情達到在線列表能夠顯示在線人員能夠顯示在線人員達到踢人管理員能夠踢人管理員能夠踢人達到(2)聊天室后臺功能測試表5-2功能測試表2功能預定效果實際效果添加房間分類添加成功后能夠在前臺顯示添加成功后能夠在前臺顯示刪除房間類別能夠刪除已經存在的房間類別能夠刪除已經存在的房間類別添加房間信息添加成功后能夠在前臺顯示添加成功后能夠在前臺顯示編輯房間信息能夠修改、刪除房間信息并在前臺顯示能夠修改、刪除房間信息并在前臺顯示編輯用戶信息能夠修改、刪除用戶信息能夠修改、刪除用戶信息修改權限能夠修改用戶權限修改權限5.2軟件的運行與安裝5.2.1應用程序的構建、部署在J2EE框架下,有很多的應用服務器可以使用,比如:BEA的WebLogic、IBM的WebSphere和源代碼開放組織的JBoss、Tomcat應用服務器。而一些小型的,數據量不大的軟件可以部署在開源的Tomcat服務器上,那些大型的,分布式的應用才部署到WebLogic,WebSphare等服務器上。由于本軟件的業(yè)務邏輯不是復雜,所以把該系統(tǒng)部署到了Tomcat服務器上了。5.2.2系統(tǒng)運行過程啟動Tomcat6應用服務器后,在URL地址中輸入http://localhost:8888/Chatroom__ldd/,即可運行此系統(tǒng)。5.3運行和維護經過綜合的測試后,本系統(tǒng)就可以運行了,經過運行測試本系統(tǒng)運行狀態(tài)良好。軟件維護是軟件生命周期的最后一個階段,它處于系統(tǒng)投入生產性運行以后的時期中,因此不屬于系統(tǒng)開發(fā)過程。所謂軟件維護就是在軟件交付使用之后,為了改正錯誤或滿足新的需要而修改軟件的過程??梢酝ㄟ^描述軟件交付使用后可能進行的四項活動,具體定義軟件維護。(1)改正性維護因為軟件測試不可能暴露出一個大型軟件系統(tǒng)的所有潛在錯誤,所以必然會有第一項維護活動:在任何軟件的使用期間,用戶必然發(fā)現(xiàn)程序,并且把他們遇到的問題報告給維護人員。把診斷和改正錯誤的過程稱為改正性維護。(2)適應性維護計算機科學技術的各個方面都在迅速進步,大約每36個月就有新一代的硬件出現(xiàn),因此,適應性維護,也就是為了和變化的環(huán)境適當的配合而進行的修改軟件的活動,是既必要又經常的維護活動。(3)完善性維護當一個軟件系統(tǒng)順利的進行時,在使用軟件的過程中用戶往往提出增加新功能或修改已有功能的建議,還可能提出一般性修改意見。為了滿足這類要求,需要進行完善性維護。這項維護活動通常占軟件維護的大部分工作。(4)預防性維護為了改進未來可維護性或可靠性,或為了給未來的改進奠定更好的基礎而修改軟件時出現(xiàn)的維護活動,把它稱為預防性維護。上述四類軟件維護活動都必須應用于整個軟件配置,維護軟件文檔和維護軟件的可執(zhí)行代碼是同樣重要的。
結論本系統(tǒng)實現(xiàn)了對用戶的管理,包括:用戶登錄,用戶注冊,以及后臺的用戶管理。房間的管理,包括房間信息的曾刪改查。用戶聊天,包括:用戶可以選擇公聊和私聊,發(fā)送表情,屏蔽講話,返回最近的聊天記錄等功能。聊天室系統(tǒng)的優(yōu)點就是方便快捷和即時通訊。本系統(tǒng)具有如下特點:(1)采用Browser/Server三層體系結構,使系統(tǒng)具有很好的可維護性和可重用性。(2)在本系統(tǒng)的開發(fā)過程中采用的是JSP+Struts+Ajax+Jdbc模式,此模式將明顯的把顯示和邏輯分離,使代碼容易管理,適合于大型項目的開發(fā)。(3)中間層使用JDBC來連接數據庫,JDBC對于大批量的數據有很快的處理速度,和數據庫服務器交互的效率會更高。(4)后臺數據庫采用的Oracle,它功能比較強大,除了可以處理包含在各種平臺上運行的數據庫管理系統(tǒng)內核之外,還包括了數據復制、數據庫系統(tǒng)管理、Internet網關支持、在線分析處理、多媒體支持和各種并行處理能力。聊天室系統(tǒng)實現(xiàn)了簡單的實時聊天功能,經過細心的調試和排錯解決了絕大部分的問題。但幾乎每一個計算機程序都會有這樣那樣的不足,尤其是未經過精心維護的非商業(yè)軟件。本聊天室系統(tǒng)對于初涉此領域的畢業(yè)設計課題來說,尤其在開始初期,感覺邏輯復雜,難以控制,因此至今還有許多未能解決的缺陷,如:(1)由于MozillaFirefox瀏覽器是單線程的,所以在該瀏覽器上進行測試回出現(xiàn)問題;(2)沒有詳細考慮聊天室管理功能。本系統(tǒng)會進一步完善上述的不足,使之成為一套深受歡迎的聊天系統(tǒng)。
參考文獻[1]張海蕃.軟件工程導論.北京:清華大學出版社.2005:160-171[2]孫衛(wèi)琴.精通struts:基于MVC的Javaweb設計與開發(fā).北京.電子工業(yè)出版社.2004:71-204[3]劉斌.精通JavaWeb整合開發(fā).北京.電子工業(yè)出版社.2007:229-287[4]RyanAsleson.金靈譯.Ajax基礎教程.北京.人民郵電出版社.2006:23-149[5]ToddCook.JSP從入門到精通.北京.電子工業(yè)出版社,2003:1-385.[6]曾春平,王超,張鵬XML編程從入門到精通.北京.希望電子出版社.2002[7]伍俊良.J2EE課程設計與系統(tǒng)開發(fā)案例.北京.清華大學出版社.2004:36-41[8]何鵬飛.J2EE程序設計教程.北京.清華大學出版社.2003:92-97[9]賈燕楓,張桂元.Struts開發(fā)入門與項目實踐.北京.人民郵電出版社.2006:8-9[10]孫衛(wèi)琴.Java面向對象編程.北京.電子工業(yè)出版社.2006:46-58[11]邱哲等.STRUTSWeb設計與開發(fā)大全.北京.清華大學出版社[12]姚淑珍,李虎.UML和模式應用-面向對象分析與設計導論.北京.機械工業(yè)出版社.2002[13]PhilipMcCarthy.AjaxforJavadevelopers:JavaobjectserializationforAjax./developerworks/xml/library.04Oct2005。[14]BrettMcLaughlin.MasteringAjax,Part1:IntroductiontoAjax./developerworks/xml/library.06Dec2005[15]BrettMcLaughlin.MasteringAjax,Part2:MakeasynchronousrequestswithJavaScriptandAjax./developerworks/xml/library.06Dec2005[16]BrettMcLaughlin.MasteringAjax,Part3:AdvancedrequestsandresponsesinAjax./developerworks/xml/library.14Feb2006[17]閻宏.Java與模式.電子工業(yè)出版社.2002[18]柳永坡.Jsp應用開發(fā).人民郵電出版設.2005
致謝緊張而忙碌的畢業(yè)設計就要結束了,在完成了系統(tǒng)的功能設計后,我感到由衷的喜悅和自豪。在我做畢業(yè)設計期間,許多老師,同學和朋友給了我無私的關懷和幫助,在此,我要向他們表示衷心的感謝。首先要感謝我的指導老師甄磊老師。在整個課題的設計過程中,甄磊老師對我熱心指導、嚴格要求,在課題的各方面都給予了我寶貴的意見和建議,幫助我建立正確的設計思想,保證了課題的研究和開發(fā)工作的順利完成。同時還要感謝培育我四年的太原科技大學以及杰普培訓機構,感謝各位老師對我的栽培。學校給我提供了很好的學習和生活環(huán)境,讓我在這四年里學習到了很多計算機方面的相關知識,在這里我非常感謝我的母校。當然,完成這次的設計工作也得到學多同學的幫助。最后,請允許我再一次向在畢業(yè)設計過程中無私幫助過我的老師,同學,在這里我對他們表示最衷心的感謝。
附錄IAjaxforJavadevelopers:JavaobjectserializationforAjaxPhilipMcCarthy04Oct2005Ifyou'redoingJava?WebdevelopmentusingAsynchronousJavaScriptandXML(Ajax),thendeliveringdatafromtheservertotheclientisprobablyyourtopconcern.InthissecondarticleintheAjaxforJavadevelopersseries,PhilipMcCarthywalksyouthroughfiveapproachestoJavaobjectserializationandgivesyoualltheinformationyouneedtochoosethedataformatandtechnologybestsuitedtoyourapplication.Inthefirstarticleinthisseries,IintroducedyoutothebuildingblocksofAjax:HowtouseaJavaScriptXMLHttpRequestobjecttosendanasynchronousrequesttoaserverfromaWebpageHowtohandleandrespondtothatrequestwithaJavaservletreturninganXMLdocumenttotheclientHowtousethatresponsedocumentontheclienttoupdateyourpageviewThistime,I'llcontinuediscussingthedevelopmentfundamentalsofAjax,butI'mfocusingonwhatmattersmostformanyJavaWebdevelopers:producingdatafortheclient.MostJavadevelopershaveappliedtheModel-View-Controller(MVC)patterntotheirWebapplications.InatraditionalWebapplication,theviewcomponentiscomposedofJSPs,orperhapsanotherpresentationtechnologysuchasVelocitytemplates.ThesepresentationcomponentsupdatetheuserinterfacebydynamicallyproducingawholenewpageofHTMLtoreplacewhattheuserwaspreviouslylookingat.InthecaseofaJavaWebapplicationwithanAjaxUI,however,theJavaScriptclientcodehasultimateresponsibilityforupdatingwhattheusersees,basedondatareceivedinresponsetoanXMLHttpRequest.Fromtheperspectiveoftheserver,theviewbecomesthedatarepresentationitsendsinresponsetoclientrequests.ProducingXMLfromJavaclassesThereareplentyofreasonstodeliverAjaxresponsesasXML:everyAjax-capablebrowserhasmethodsfornavigatingXMLdocuments,andtherearemanyserver-sidetechnologiesforworkingwithXMLdata.It'seasytodefinethecontractbetweenyourAjaxclientandserverbyproducingaschematodescribethetypesofdocumentsthatwillbeexchanged,andifyoutakeaservice-orientedapproachtoyourserver-sidearchitecture,usingXMLallowsnon-Ajaxclientstoconsumeyourdatafeedsaswell.I'llconsiderthreeofthewaysyoucanproduceXMLdatafromyourJavaobjectsanddiscusstheprosandconsofeach.Roll-your-ownserializationFirstofall,youcouldgenerateXMLprogramaticallyfromyourobjectgraph.ThisapproachcanbeassimpleasimplementingatoXml()methodineachofyourJavaBeanclasses.YouwouldthenpickasuitableXMLAPIandhaveeachbeanemitelementstorepresentitsstateandrecursivelycalldowntheobjectgraphtoitsmembers.Clearly,thisapproachdoesn'tscalewelltoalargenumberofclassesbecauseeachoneneedstohaveitsownXML-generatingcodespeciallywritten.Ontheupside,it'sasimpleapproachtoimplement,there'snooverheadintermsofextraconfigurationoramore-complexbuildprocess,andanygraphcomposedofyourJavaBeanscanbeturnedintoanXMLdocumentwithacoupleofcalls.XMLbindingframeworksInrecentyears,severalJavaAPIshavebeendevelopedtosimplifytheprocessofbindingXMLdocumentstoJavaobjectgraphrepresentations.MostprovidebothXMLmarshalingandunmarshaling;thatis,theyperformtwo-wayconversionsbetweenJavaobjectgraphsandXML.TheseframeworksencapsulatealltheworkofhandlingXML,meaningthatapplicationcodeonlyhastodealwithplainJavaobjects.Theytendtoprovideusefulancillaryfunctionsaswell,suchasdocumentvalidation.Broadly,theseframeworkstaketwodifferentapproaches:codegenerationandobject-to-XMLmapping.I'llexplainboth.Thecode-generationapproachBindingframeworksthatemploycodegenerationincludeXMLBeans,JAXB,Zeus,andJBind.Castorcanalsoemploythistechnique.ThestartingpointforanyoftheseframeworksisanXMLschemathatdescribesthedatatypesofyourdocuments.Usingtoolsprovidedbytheframework,youthengenerateJavaclassesthatrepresenttheseschema-definedtypes.Finally,youwriteyourapplicationusingthesegeneratedclassestorepresentyourmodeldataandserializethemtoXMLthroughsomeconvenientmechanismprovidedbytheframework.ThecodegenerationapproachisagoodoneifyourapplicationemploysalargeXMLgrammar.ThescalingproblemofwritingcustomXML-serializationmethodsacrosstensofclassesvanishes.Ontheotherhand,younolongergettodefineyourownJavaBeans.Theframework-generatedJavaclassestypicallyfollowtheXML'sstructuresveryclosely,whichcanresultinthembeingratherunwieldytocodeagainst.Also,thegeneratedclassesbecomedumbdatacontainersbecauseyoucan'tgenerallyaddbehaviortothem.Broadlyspeaking,youneedtomakecompromisesinyourapplicationcodetoplaynicelywiththeschema-generatedtypes.Anotherpitfallisthatachangeintheschemacauseschangestothegeneratedclasses,whichinturnhasaknock-oneffecttoanycodeyou'vewrittenaroundthem.XMLbindingframeworksofthistypearemostusefulindataunmarshaling(i.e.,consumingXMLdocumentsandconvertingthemintoJavaobjects).Unlessyouhaveahugedatamodelandwouldbenefitfromhavingclassesgeneratedforyou,code-generation-basedframeworksareprobablyoverkillforanAjaxapplication.ThemappingapproachFrameworksthatemploymappingincludeCastorandApacheCommonsBetwixt.Mappingisgenerallyamoreflexibleandlightweightsolutionthancodegeneration.First,youcodeyourJavaBeansasyouusuallywould,includinganybehaviorandwhateverconveniencemethodsyoulike.Then,atruntime,youcallontheframework'sintrospection-basedmarshaler,anditproducesanXMLdocumentbasedonthetypes,names,andvaluesofyourobjects'members.Bydefiningmappingfilesforyourclasses,youcanoverridethedefaultbindingstrategyandadvisethemarshalerhowyou'dlikeyourclassestoberepresentedinXML.Thisapproachisagoodcompromisebetweenscalabilityandflexibility.YougettowriteyourJavaclassesthewayyoulikethem,andthemarshalersavesyoufromdealingwithXML.However,althoughthemappingdefinitionfilesaresimpletowriteandscalereasonablywell,themappingrulescanonlychangethestandardbindingbehaviorsomuch,andsomedegreeofcouplingbetweenthestructureofyourobjectsandtheirXMLrepresentationwillalwaysremain.Ultimately,youmayhavetocompromiseeitheryourJavarepresentationsoryourXMLformatforthemappingapproachtowork.DatabindingsummaryDennisSosnoskihaswrittenindepthonthesubjectofXMLdatabindingAPIsofboththecode-generationandcode-mappingflavors.I'drecommendhisexcellentarticlesonCastorandonthecode-generationframeworksifyouwanttoinvestigatethisareafurtherOnthewhole,thecode-generationapproachtradesofftoomuchflexibilityandconveniencetobeusefulforthetypicalAjaxapplication.Ontheotherhand,themapping-basedframeworksmayserveyouwell,aslongasyoucantailortheirmappingstrategiesenoughtoproducetheXMLyouwantfromyourobjects.AlloftheXMLbindingAPIsshareamajordrawbackwiththemanualserializationtechnique:thecouplingofmodelandview.BeinglimitedtoasingleXMLrepresentationofeachobjecttypemeansitislikelythattherewillalwaysbesomeredundantdatatravelingacrossthenetwork.Amoreseriousproblemisthattheclientcodecannotobtainaspecializedviewwhenthesituationdemandsitandmayhaveanawkwardtimetryingtodealwiththecompromisedone-size-fits-allviewofagivenobjectgraph.IntraditionalWebapplicationdevelopment,pagetemplatingsystemsareusedtocleanlyseparateviewgenerationfromcontrollerlogicandmodeldata.It'sanapproachthatcanhelpinanAjaxscenarioaswell.
面向Java開發(fā)人員的Ajax:Ajax的Java對象序列化PhilipMcCarthy2005年10月24日如果您正在使用異步JavaScript和XML(Ajax)進行Java?Web開發(fā),那么您最關心的問題可能就是把數據從服務器傳遞給客戶機。在面向Java開發(fā)人員的Ajax系列的第二篇文章中,PhilipMcCarthy介紹了Java對象序列化的五種方式,并提供了選擇最適合應用程序的數據格式和技術所需要的全部信息。在這個系列的第一篇文章中,我介紹了Ajax的構造塊: (1)如何用JavaScriptXMLHttpRequest對象從Web頁面向服務器發(fā)送異步請求。 (2)如何用Javaservlet處理和響應請求(向客戶機返回XML文檔)。 (3)如何在客戶端用響應文檔更新頁面視圖。這一次,我將繼續(xù)討論Ajax開發(fā)的基礎知識,但是將側重于許多JavaWeb開發(fā)人員最關心的問題:為客戶機生成數據。多數Java開發(fā)人員已經把模型-視圖-控制器(MVC)模式應用在他們的Web應用程序上。在傳統(tǒng)的Web應用程序中,視圖組件由JSP或者其他表示技術(例如Velocity模板)構成。這些表示組件動態(tài)地生成全新的HTML頁面,替代用戶以前正在查看的頁面,從而更新用戶界面。但是,在JavaWeb應用程序使用AjaxUI的情況下,基于從XMLHttpRequest的響應接收到的數據,JavaScript客戶端代碼對于更新用戶看到的內容負有最終責任。從服務器的角度來看,視圖成為它響應客戶機請求而發(fā)送的數據表示。從Java類產生XML把Ajax響應作為XML來傳遞有許多原因:每個支持Ajax的瀏覽器都有導航XML文檔的方法,也有許多服務器端技術可以處理XML數據。通過制定一個方案,描述要交換的文檔類型,在Ajax客戶端和服務器端之間很容易定義合約,而且如果服務器端架構采用面向服務的方式,那么使用XML也可以允許非Ajax客戶機使用您提供的數據。自行進行序列化首先,可以從對象圖以編程的方式生成XML。這種方式可以簡單到只是在每個JavaBean類中實現(xiàn)toXml()方法即可。然后就可以選擇合適的XMLAPI,讓每個bean提供表示自己狀態(tài)的元素,并遞歸地對自己的成員調用對象圖。顯然,這種方式無法擴展到大量的類,因為每個類都需要專門編寫自己的XML生成代碼。從好的方面來看,這是一個實現(xiàn)起來簡單的方式,沒有額外的配置支出或者更復雜的構建過程支出,任何JavaBean圖都可以只用幾個調用就變成XML文檔。XML綁定框架近些年來,已經開發(fā)了多個JavaAPI來簡化XML文檔到Java對象圖的綁定過程。多數都提供了XML編排和拆解;也就是說,它們可以在Java對象圖和XML之間執(zhí)行雙向會話。這些框架封裝了XML處理的全部工作,這意味著應用程序代碼只需要處理普通的Java類。它們還希望提供有用的輔助功能,例如文檔驗證?;\統(tǒng)來說,這些框架采用了兩種不同的方式:代碼生成和對象到XML映射。我將分別解釋這兩種方式。代碼生成方式使用代碼生成的框架包括XMLBeans、JAXB、Zeus和JBind。Castor也能使用這項技術。這類框架的起點是描述文檔數據類型的XML方案。使用框架提供的工具,就可以生成代表這些方案定義類型的Java類。最后,用這些生成的類編寫應用程序,表示自己的模型數據,并通過框架提供的一些輔助機制把數據序列化成XML。如果應用程序要使用大型XML語法,那么代碼生成方式是個很好的方法。在數十個類上編寫定制XML序列化代碼的可伸縮性問題由此消除。另一方面,也不再需要定義自己的JavaBean。框架生成的Java類通常非常符合XML的結構,所以對它們進行編碼很難。而且,生成的類變成啞數據容器,因為一般不能向它們添加行為。一般來說,在應用程序代碼中要做些妥協(xié),才能很好地處理方案生成的類型。另一個缺陷是如果修改方案,會造成生成的類也要修改,所以也就會對圍繞它們編寫的代碼帶來相應的影響。這種類型的XML綁定框架在數據拆解時最有用(例如,使用XML文檔并把它們轉化成Java對象)。除非擁有大型數據模型而且有可能從生成的類中獲益,否則基于代碼生成的框架對于Ajax應用程序來說可能有很大的殺傷力。映射方式采用映射方式的框架包括Castor和ApacheCommonsBetwixt。映射通常是比代碼生成更靈活和更輕量的解決方案。首先,可以像通常一樣編寫JavaBean,包括任何行為以及任何自己喜歡的方便的方法。然后,在運行時,調用框架中基于內省的編排器,并根據對象成員的類型、名稱和值生成XML文檔。通過定義類的映射文件,可以覆蓋默認的綁定策略,并就類在XML中的表示方式對編排器提出建議。這種方法是在可伸縮性與靈活性之間的良好折中??梢园凑兆约合矚g的方式編寫Java類,編排器負責處理XML。雖然映射定義文件編寫起來簡單,可伸縮性也足夠好,但是映射規(guī)則最多只能改變標準的綁定行為,而且在對象結構和它們的XML表示之間總要殘留一些耦合。最終,可能不得不在Java表示或XML格式之間任選一個做些折中,才能讓映射方法起作用。數據綁定總結DennisSosnoski就XML數據綁定API的主題,在代碼生成和代碼映射兩個方面寫了深入的文章。如果想進一步研究這個領域,我推薦他在Castor和代碼生成框架方面的精彩文章??傊?,代碼生成方式損失了過多的靈活性和方便性,對于典型的Ajax應用程序用處不大。另一方面,基于映射的框架可能工作得很好,但是要恰到好處地調整它們的映射策略,以便從對象生成需要的XML。所有的XML綁定API都具有手工序列化技術的一個主要不足:模型和視圖的耦合。被限制為一個類型一個XML表示,就意味著在網絡上總要有冗余數據傳輸。更嚴重的問題是,在情況要求客戶端代碼使用專門視圖時,客戶端代碼卻無法得到它,所以可能要費力地處理給定對象圖的一成不變的視圖。在傳統(tǒng)的Web應用程序開發(fā)中,采用頁面模板系統(tǒng)把視圖生成與控制器邏輯和模型數據干凈地分離。這種方法在Ajax場景中也會有幫助。PAGE43-
附錄II(1)web.xml<?xmlversion="1.0"encoding="UTF-8"?><web-appversion="2.5"xmlns="/xml/ns/javaee" xmlns:xsi="/2001/XMLSchema-instance" xsi:schemaLocation="/xml/ns/javaee /xml/ns/javaee/web-app_2_5.xsd"> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <context-param> <param-name>configFile</param-name> <param-value>WEB-INF/InitChatroom.xml</param-value> </context-param> <listener> <listener-class>com.kzf.struts.listener.InitChatroom</listener-class> </listener> <servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param> <load-on-startup>2</load-on-startup> </servlet> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <jsp-config> <taglib> <taglib-uri>/adminTag</taglib-uri> <taglib-location>/WEB-INF/AdminTag.tld</taglib-location> </taglib> <taglib> <taglib-uri>/userTag</taglib-uri> <taglib-location>/WEB-INF/UserTag.tld</taglib-location> </taglib> </jsp-config> <session-config> <session-timeout>3</session-timeout> </session-config> <filter> <filter-name>SetCharacterEncoding</filter-name> <filter-class>com.kz
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 活動策劃報告
- 職場新人培訓計劃與教材編寫指南
- 物流倉儲作業(yè)指導手冊
- 智能家居設備維護與故障排除教程
- 交通運輸行業(yè)智能交通與自動駕駛技術研究方案
- 農村農業(yè)智能倉儲管理系統(tǒng)
- 現(xiàn)代服務業(yè)流程優(yōu)化作業(yè)指導書
- 溝通協(xié)作手冊
- 企業(yè)IT支持服務說明手冊
- 三農村產業(yè)結構調整指南
- 人力資源內部培訓課件
- 《S中學宿舍樓工程量清單計價編制(附三維圖)》30000字
- 全國運動員注冊協(xié)議書范本(2篇)
- 《高點全景視頻監(jiān)控聯(lián)網技術要求》
- 白云山生態(tài)停車場工程施工組織設計施工方案
- 2024年四川省綿陽市中考語文試卷(附真題答案)
- 【MOOC】Office高級應用-成都信息工程大學 中國大學慕課MOOC答案
- 足球英語課件
- 盆底康復課件
- CNAS認可準則、規(guī)則考核專項測試題附答案
- 中等職業(yè)學??谇恍迯凸に噷I(yè)實訓教學條件建設標準
評論
0/150
提交評論