邱吉雨
(山西農(nóng)業(yè)大學(xué),山西 晉中 030800)
現(xiàn)今世界是一個(gè)互聯(lián)網(wǎng)普及的世界,而伴隨這一現(xiàn)象出現(xiàn)的還有各種各樣Web程序、Web系統(tǒng)以及Web工程項(xiàng)目。伴隨著開發(fā)Web項(xiàng)目成為一種流行,與之相關(guān)的技術(shù)的研究者隊(duì)伍日益龐大。而在Web項(xiàng)目開發(fā)領(lǐng)域中,不同類型的技術(shù)完成項(xiàng)目所消耗的成本不同。因而在Web項(xiàng)目中技術(shù)的選擇顯得尤為重要。在有關(guān)項(xiàng)目工程連接數(shù)據(jù)庫(kù)方面,就有多種框架或通過或不通過 SQL語(yǔ)句來實(shí)現(xiàn)[1]。在本篇論本中,我將以Servlet+JSP+JavaBean三層MVC開發(fā)模式為中心簡(jiǎn)析Web開發(fā)中所用到的技術(shù)。
首先,web瀏覽器向web服務(wù)器申請(qǐng)服務(wù)。其次,web服務(wù)器解家譜本文件,服務(wù)器通過邏輯語(yǔ)句來訪問數(shù)據(jù)庫(kù)。然后,數(shù)據(jù)路向服務(wù)器返回查詢結(jié)果。最后,服務(wù)器通過HTTP協(xié)議將信息返回給服務(wù)器。
在整個(gè)Web項(xiàng)目設(shè)計(jì)的流程中,我們通常會(huì)選擇一個(gè)服務(wù)器(此處我們選擇輕量級(jí)服務(wù)器Tomcat,除此之外,還有許多不同類型的服務(wù)器,例如IIS服務(wù)器)作為一個(gè)接收客戶端信息以及響應(yīng)客戶端的平臺(tái)。使用HTML5+CSS作為用戶界面的編寫語(yǔ)言,JSP和Servlet作為客戶端服務(wù)器的業(yè)務(wù)邏輯判斷語(yǔ)言。也就構(gòu)成了MVC三層架構(gòu)。通常,我們?cè)诓皇褂每蚣艿那闆r下會(huì)使用該架構(gòu)。在最基層,使用SQL語(yǔ)句來實(shí)現(xiàn)項(xiàng)目與數(shù)據(jù)庫(kù)的連接,以實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的增刪查改等工作[2]。
圖1 Web應(yīng)用程序的基本架構(gòu)Fig.1 Basic architecture of Web application
我們通常使用HTML語(yǔ)言來編寫用戶視圖,XML語(yǔ)言來實(shí)現(xiàn)文件的配置。簡(jiǎn)單的來說,HTML是一種用來編寫用戶視圖的語(yǔ)言格式。HTML的標(biāo)簽對(duì)是已經(jīng)被定義好的標(biāo)簽對(duì),每一對(duì)標(biāo)簽對(duì)都有自己固定的含義,并且它的語(yǔ)法靈活,因而更適合編寫用戶界面。而XML可以用戶自定義標(biāo)簽,但對(duì)于語(yǔ)法卻要求嚴(yán)格,因而作為配置文件的編輯語(yǔ)言最合適不過。而CSS是用來將靜態(tài)網(wǎng)頁(yè)美觀化,同時(shí)還能夠協(xié)助不同的腳本語(yǔ)言對(duì)網(wǎng)頁(yè)各種元素進(jìn)行格式化。同時(shí),基于豐富的樣式庫(kù),可以使得用戶界面更加美觀并且在調(diào)整用戶界面樣式時(shí)更加方便。而通常情況下,我們會(huì)使用HTML5+CSS3來設(shè)計(jì)用戶視圖。
而談及Web項(xiàng)目的容器Tomcat, 它是一個(gè)開源的、免費(fèi)的輕量級(jí)的Web應(yīng)用服務(wù)器,被普遍應(yīng)用于中小型系統(tǒng)中。Tomcat有標(biāo)準(zhǔn)的固定目錄。在配置好運(yùn)行環(huán)境后,就可以通過向目錄中的增添內(nèi)容來開發(fā)Web應(yīng)用程序。在Tomcat的目錄中,bin文件用于存放啟動(dòng)和關(guān)閉Tomcat的腳本文件;conf中存放Tomcat服務(wù)器的各種配置文件;lib中存放服務(wù)器的支撐jar包;webapps中存放web應(yīng)用。Web應(yīng)用即web項(xiàng)目的核心文件,包括HTML或JSP文件以及WEB-INF目錄(用于存放配置文件web.xml以及編譯好的class文件)[3]。
圖2 Chat項(xiàng)目的目錄結(jié)構(gòu)Fig.2 Directory structure of Chat project
Servlet是一個(gè)基于Tomcat容器的改進(jìn)的CGI,狹義的Servlet是Java語(yǔ)言實(shí)現(xiàn)的一個(gè)接口,廣義的Servlet是指任何實(shí)現(xiàn)了這個(gè)Servlet接口的類,一般情況下,人們將Servlet理解為后者。通常,編寫一個(gè)Servlet類的方法有三種。其一是通過實(shí)現(xiàn) Servlet接口并完成接口中的方法來完成。其二是通過繼承GenericServlet來完成業(yè)務(wù)邏輯的編寫。其三則是通過繼承 HttpServlet類來實(shí)現(xiàn)業(yè)務(wù)邏輯判斷。且通過表單中的兩種不同的遞交方法(get和post)來決定數(shù)據(jù)的傳輸方式。
Servlet運(yùn)行于支持Java的應(yīng)用服務(wù)器(如上述Tomcat)中。它擁有一套獨(dú)立的生命周期,可以響應(yīng)以Tomcat為容器的任何類型的請(qǐng)求。(以實(shí)現(xiàn)判別用戶名的Servlet為例)
提及實(shí)現(xiàn)動(dòng)態(tài)網(wǎng)頁(yè)的技術(shù)JSP,他的全名為Java Server Pages,它的本質(zhì)是一個(gè)簡(jiǎn)化的后的Servlet。它是在傳統(tǒng)的HTML頁(yè)面中插入Java代碼和JSP標(biāo)記,使得靜態(tài)網(wǎng)頁(yè)動(dòng)態(tài)化,從而形成后綴為(.JSP)的JSP文件。在通常狀況下,它是與Servlet同時(shí)使用的。它具有九大內(nèi)置對(duì)象以及四個(gè)作用域,極大地避免了開發(fā)人員在開發(fā)項(xiàng)目過程中總是要自定義對(duì)象的繁瑣步驟。例如,我們保存數(shù)據(jù)通常使用session對(duì)象的SetAttribute的方法,獲取對(duì)象通常使用session對(duì)象GetAttribute方法。極大的避免了要在同一項(xiàng)目不同頁(yè)面中保存數(shù)據(jù)的繁瑣性。隨著技術(shù)的發(fā)展,后來出現(xiàn)了EL表達(dá)式,EL表達(dá)式提供了在 JSP 中簡(jiǎn)化表達(dá)式的方法,使得JSP的代碼更加簡(jiǎn)化[4]。
有關(guān)動(dòng)態(tài)界面的JSP實(shí)現(xiàn):
于此同時(shí),JavaScript也是被用來為靜態(tài)網(wǎng)頁(yè)編寫動(dòng)態(tài)腳本。
雖然兩者都是用于生成動(dòng)態(tài)網(wǎng)頁(yè),但它們還是有所區(qū)別。JS是在客戶端執(zhí)行的,需要瀏覽器支持JavaScript。JSP是在服務(wù)器端執(zhí)行的,需要服務(wù)器支持Servlet的服務(wù)器程序。而JS代碼是能夠直接從服務(wù)器上下載得到,對(duì)外是可見的,JSP(和翻譯后的servlet)代碼是對(duì)外不可見的。JS并不能夠像JSP一樣做到靈活判斷,多數(shù)情況下都是寫在監(jiān)控函數(shù)中,通過一個(gè)觸發(fā)器來出發(fā)函數(shù)。
而jQuery 作為一個(gè)豐富的 JavaScript 庫(kù),封裝JavaScript大量的的常用代碼,提供了一種更簡(jiǎn)便的基于JavaScript的技術(shù)語(yǔ)言。
Ajax相當(dāng)于 異步 JavaScript 和 XML,有別于傳統(tǒng)頁(yè)面需要更新時(shí)必須將頁(yè)面中所有的內(nèi)容進(jìn)行更新,通常被用來進(jìn)行頁(yè)面的異步更新。
在編寫Web應(yīng)用程序時(shí),程序的最底層便是通過程序在數(shù)據(jù)庫(kù)中存取數(shù)據(jù)或?qū)?shù)據(jù)進(jìn)行增刪查改等操作。在連接數(shù)據(jù)庫(kù)時(shí),我們通常使用JDBC執(zhí)SQ 語(yǔ)句的API。 常見的數(shù)據(jù)庫(kù)管理系統(tǒng)有MYSQL、Oracle和SQL Server等。我們通常在JSP或Servlet中使用SQL語(yǔ)句來實(shí)現(xiàn)業(yè)務(wù)邏輯[5]。
通過以上技術(shù),便可實(shí)現(xiàn)一個(gè)Web項(xiàng)目的開發(fā)。
討論了建立一個(gè)Web項(xiàng)目所需要的方法以及他們的不同之處,我們可清晰地看到構(gòu)建一個(gè)Web項(xiàng)目的基本流程以及所需要的技術(shù)。在這些技術(shù)的基礎(chǔ)上,我們還可以使用其他技術(shù)(例如框架)來將業(yè)務(wù)邏輯流程簡(jiǎn)單化。