摘要:Java Web編程技術(shù)課程是學(xué)生在學(xué)習(xí)Java語言、HTML、數(shù)據(jù)庫之后修讀的一門專業(yè)基礎(chǔ)課程,是對(duì)相關(guān)課程知識(shí)的綜合實(shí)踐應(yīng)用。學(xué)生通過學(xué)習(xí)能夠掌握Web項(xiàng)目開發(fā)的基本知識(shí),初步建立起Web項(xiàng)目的開發(fā)思想方法。該文分析了課程教學(xué)中存在于課程內(nèi)容設(shè)置、進(jìn)度安排和教學(xué)過程環(huán)節(jié)中的問題,借助多年來的教學(xué)經(jīng)驗(yàn)和精品課程建設(shè)經(jīng)驗(yàn),提出了課程教學(xué)改革的具體措施,并通過在實(shí)踐中的驗(yàn)證取得了良好的教學(xué)效果,這鐘教學(xué)方法的改革措施具有一定的指導(dǎo)意義。
關(guān)鍵詞:Java Web編程技術(shù);Web項(xiàng)目;Servlet組件;JSP組件;Web容器
中圖分類號(hào):G642? ? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A? ? ? ? 文章編號(hào):1009-3044(2019)01-0165-04
1 引言
“Java Web編程技術(shù)”課程是計(jì)算機(jī)軟件開發(fā)相關(guān)專業(yè)的必修骨干課程,它是一門專業(yè)基礎(chǔ)原理和實(shí)操并重的課程,也是后續(xù)專業(yè)課程的先修課程。課程主要講授Java EE平臺(tái)下Servlet、JSP組件的開發(fā)與設(shè)計(jì)內(nèi)容,通過學(xué)習(xí)使得學(xué)生能夠運(yùn)用Java 語言進(jìn)行Web項(xiàng)目開發(fā),掌握基本知識(shí)和技能,能夠利用先進(jìn)的Java EE平臺(tái)和流行的工具包快速開發(fā)、部署Web應(yīng)用程序,為后續(xù)課程的學(xué)習(xí)奠定基礎(chǔ)。
筆者所在的學(xué)校里,每年將近1000人數(shù)修讀本課程,可見課程在專業(yè)課程體系中處于重要位置。然而在以往的教學(xué)方法中,存在著諸如課程內(nèi)容設(shè)置、進(jìn)度計(jì)劃安排不合理,缺乏教學(xué)案例,新教師教學(xué)經(jīng)驗(yàn)不足,學(xué)生知識(shí)基礎(chǔ)較差等原因,引起教學(xué)效果不理想,學(xué)生難于駕馭本門課程學(xué)習(xí)問題。針對(duì)以上問題,通過多年來的教學(xué)實(shí)踐,筆者將教學(xué)心得體會(huì)進(jìn)行分析研究總結(jié),形成文稿發(fā)表,供在課程教學(xué)中分享,由于筆者學(xué)識(shí)水平有限原因,文章中難免有思考不成熟、研究不透徹之處,祈求批評(píng)指正。
在課程開學(xué)之初,學(xué)生往往帶著三個(gè)疑問開始本課程學(xué)習(xí)。何為Web項(xiàng)目?什么是JSP?Web容器有何作用?我們針對(duì)這三個(gè)方面進(jìn)行分析論述。
以往的Java Web編程技術(shù)課程教學(xué)中,有些教學(xué)班在第一堂課就教授學(xué)生如何使用MyEclipse插件平臺(tái)來創(chuàng)建一個(gè)Web項(xiàng)目,根據(jù)界面提示填寫項(xiàng)目信息,創(chuàng)建JSP文件,編輯JSP頁面,部署項(xiàng)目,啟動(dòng)容器之后在瀏覽器直接輸入:http:// 服務(wù)器地址:服務(wù)端口/項(xiàng)目名/JSP文件名 進(jìn)行JSP頁面測試,實(shí)驗(yàn)步驟如圖1所示。
這種教學(xué)順序安排存在著有三個(gè)問題。第一,課程開始時(shí),學(xué)生剛剛開始Web應(yīng)用程序?qū)W習(xí),對(duì)于學(xué)習(xí)Java語言的學(xué)生來說,剛從Java桌面應(yīng)用程序基礎(chǔ)上開始,學(xué)生對(duì)于Web項(xiàng)目知識(shí)幾乎為零基礎(chǔ),因此很難理解掌握Web項(xiàng)目的結(jié)構(gòu)以及其設(shè)計(jì)方法,此時(shí)必然是依瓢畫葫蘆地生搬硬套地學(xué)習(xí)。其二,對(duì)于JSP組件的設(shè)計(jì)、運(yùn)行原理和執(zhí)行過程完全不能理解,JSP組件中客戶端的請求(request)通過Web服務(wù)器(Web Server)交給JSP引擎轉(zhuǎn)換成Java的.class文件,即Servlet,之后Servlet引擎將其載入內(nèi)存運(yùn)行。學(xué)生必須掌握了Servlet組件后才有可能理解JSP組件,因?yàn)镴SP實(shí)質(zhì)上也是Servlet。其三,Java Web項(xiàng)目不能脫離容器獨(dú)立運(yùn)行,項(xiàng)目的所有部分均受Web 容器的調(diào)度和管理,如圖1所示。
因此在講授Web組件時(shí),是先講JSP還是Servlet組件差別很大。如果一開始就講授JSP組件,試圖讓學(xué)生快速掌握J(rèn)SP頁面設(shè)計(jì)與開發(fā)知識(shí),勢必讓學(xué)生難以理解接受。因此合理的做法是先行學(xué)習(xí)Web項(xiàng)目知識(shí),了解Web項(xiàng)目組件結(jié)構(gòu)和運(yùn)行原理,了解Servlet組件作用和執(zhí)行原理,了解Web 容器功能等等,否則勢必會(huì)造成課程內(nèi)容順序倒置,使得學(xué)生無法真正掌握J(rèn)SP組件。只有了解Web項(xiàng)目結(jié)構(gòu)、掌握Web組件的設(shè)計(jì)步驟、理解Servlet組件運(yùn)行原理和執(zhí)行方法之后,才能真正理解掌握J(rèn)SP頁面組件。因?yàn)槭聦?shí)上JSP本身就是Servlet,JSP組件同樣是依賴Web容器調(diào)度管理。
2 Web項(xiàng)目組成和工作原理
何為Web項(xiàng)目?我們應(yīng)該從講述Web項(xiàng)目結(jié)構(gòu),工作原理和執(zhí)行過程知識(shí)點(diǎn)開始,同時(shí)指出Java Web應(yīng)用程序和Java Application程序的差別。
2.1 Web應(yīng)用程序(項(xiàng)目)
Web應(yīng)用程序的結(jié)構(gòu)是請求(request)——應(yīng)答(response)形式,改變了傳統(tǒng)的桌面應(yīng)用程序中把連接方式寫到Servlet里頭的硬編碼的做法,這種編程方法不利于程序的擴(kuò)展,程序的結(jié)構(gòu)不清晰,不利于維護(hù)。例如實(shí)現(xiàn)數(shù)據(jù)庫操作,Java Web編程實(shí)現(xiàn)方法是創(chuàng)建一個(gè)servlet用來處理業(yè)務(wù)請求,建立一個(gè)獨(dú)立的數(shù)據(jù)庫操作類(功能包括數(shù)據(jù)庫的連接、關(guān)閉、增刪改查)。跟桌面應(yīng)用程序不同,Web 應(yīng)用程序采用Internet網(wǎng)絡(luò)傳輸協(xié)議,即Http超文本傳輸協(xié)議;Web項(xiàng)目軟件結(jié)構(gòu)上采用B/S結(jié)構(gòu),不需要專門定制客戶端程序;Web 應(yīng)用程序依賴Web Server運(yùn)行、調(diào)度及管理。Web 應(yīng)用程序的優(yōu)點(diǎn)是訪問 Web 應(yīng)用程序更容易且維護(hù)和部署成本低。
2.2 Web項(xiàng)目文件結(jié)構(gòu)
Web項(xiàng)目由目錄結(jié)構(gòu)文件構(gòu)成。包括項(xiàng)目屬性、系統(tǒng)內(nèi)部類庫、外部依賴jar包、資源文件夾、Web根目錄、Web項(xiàng)目描述主文件等部分組成。Web項(xiàng)目是針對(duì)容器設(shè)計(jì)應(yīng)用組件。應(yīng)用組件使用國際互聯(lián)網(wǎng)通信協(xié)議,通過Internet發(fā)送請求和響應(yīng)消息,例如Servlet組件通過Http協(xié)議。Web服務(wù)器能夠處理客戶端請求,并且將處理結(jié)果發(fā)送到客戶端web瀏覽器上。Web項(xiàng)目依賴于web服務(wù)器(容器)工作,所有應(yīng)用組件以容器對(duì)象形式存在于容器中,由容器負(fù)責(zé)調(diào)度管理,應(yīng)用組件不能單獨(dú)運(yùn)行,如圖2所示。
3 Web項(xiàng)目的核心組件
什么是Web組件?什么是Servlet、JSP組件?在回答Web組件時(shí),需要先行學(xué)習(xí)Servlet組件,只有真正理解了Servlet組件后才能真正掌握J(rèn)SP頁面組件。
3.1 Servlet組件
Servlet組件是核心Web組件之一,它是一種基于Java技術(shù)的、運(yùn)行在服務(wù)器端的Web組件,它由服務(wù)器中的Servlet容器所管理。Servlet是獨(dú)立于平臺(tái)的Java類,編寫一個(gè)Servlet,實(shí)際上就是按照Servlet的規(guī)范來編寫一個(gè)Java類,Servlet被編譯為平臺(tái)獨(dú)立的字節(jié)碼,可以被Web服務(wù)器加載和執(zhí)行,類似于Applet被瀏覽器加載和執(zhí)行。Servlet從客戶端(通過Web服務(wù)器)接收請求,執(zhí)行某種作業(yè),然后返回結(jié)果。
3.2 Servlet組件運(yùn)行原理
此外,Servlet能夠用于處理客戶端的請求,并能將處理過的請求響應(yīng)客戶端,Servlet真正處理客戶端請求的階段是Servlet執(zhí)行階段。Servlet采用Request——Response模式進(jìn)行工作,執(zhí)行原理如圖3所示。
3.3 JSP頁面組件運(yùn)行原理
JSP是一種動(dòng)態(tài)網(wǎng)頁技術(shù)標(biāo)準(zhǔn),利用它可以建立安全、跨平臺(tái)的動(dòng)態(tài)網(wǎng)站,是一種服務(wù)器端技術(shù),能夠?qū)ava代碼片段嵌入HTML頁面,生成動(dòng)態(tài)內(nèi)容。教學(xué)中重點(diǎn)指出JSP與Servlet關(guān)聯(lián)關(guān)系,使用JSP時(shí),不需要單獨(dú)配置每一個(gè)文件,JSP容器(也就是Servlet容器)能夠自動(dòng)識(shí)別,Web項(xiàng)目中,客戶端的請求(request)通過Web服務(wù)器(Web Server)交給JSP引擎轉(zhuǎn)換成Java的.class文件,即Servlet,之后Servlet引擎將其載入內(nèi)存運(yùn)行,運(yùn)行結(jié)果(response)以HTML(或XML)形式通過Web服務(wù)器返回給客戶端(如圖4)。
3.4 JSP頁面組件執(zhí)行過程
另外需要詳細(xì)講解JS執(zhí)行過程。當(dāng)JSP項(xiàng)目部署到Web容器并啟動(dòng)后,Web容器會(huì)查找對(duì)應(yīng)的JSP文件、調(diào)用JSP Parser將其編譯成Servlet 程序、調(diào)用JSDK 將對(duì)應(yīng)的Servlet程序編譯成Servlet 字節(jié)碼、執(zhí)行(若未載入則先載入)已有的對(duì)應(yīng)的Java字節(jié)碼、Web器加載Java字節(jié)碼、Web容器初始化JSP、調(diào)度管理JSP。JSP引擎以及Web服務(wù)器,用于接收、處理用戶的請求并對(duì)用戶的請求進(jìn)行響應(yīng)。JSP文件在運(yùn)行的時(shí)候都要編譯成Servlet,執(zhí)行的時(shí)候?qū)嶋H上執(zhí)行的是JSP文件對(duì)應(yīng)的Servlet,如圖5所示。
3.5 JSP頁面組件教學(xué)順序
在安排課程教學(xué)計(jì)劃時(shí),要注意到課程內(nèi)容的先行后續(xù)順序,如圖6所示。學(xué)生在理解掌握了Web項(xiàng)目、Servlet組件、Web容器相關(guān)知識(shí)后,再進(jìn)行學(xué)習(xí)JSP頁面組件,才能真正理解掌握J(rèn)SP組件設(shè)計(jì)方法、運(yùn)行原理和執(zhí)行過程。
綜上所述,要想真正理解掌握J(rèn)SP頁面組件,必須先行學(xué)習(xí)Web項(xiàng)目結(jié)構(gòu)、了解Servlet組件的設(shè)計(jì)步驟、Servlet組件主要方法、運(yùn)行原理和執(zhí)行過程,事實(shí)上JSP也是Servlet和Servlet一樣JSP組件同樣是依賴Web容器。
4 Web容器(服務(wù)器)——Web組件注冊、調(diào)度和管理中心
4.1 Web容器(服務(wù)器)作用
教學(xué)中要重點(diǎn)講解Web容器在Web項(xiàng)目中的作用。在Web項(xiàng)目設(shè)計(jì)中Web應(yīng)用程序以對(duì)象形式存在于Web容器中。Web容器能夠?qū)嵗M件對(duì)象,開啟其生命周期服務(wù)方法。Web項(xiàng)目部署到Web容器后(需要正確啟動(dòng)容器),Web組件被實(shí)例化成容器對(duì)象,可以提供處理客戶端請求和返回響應(yīng)的服務(wù)。Web容器中,包含各種資源的組件之間需要進(jìn)行相互調(diào)用,組件對(duì)象之間依靠通信來共同完成一定的功能,例如Servlet與瀏覽器之間的通信,Servlet之間的通信、Servlet與JSP之間的通信。在Web應(yīng)用程序中,Servlet之間ServletContext上下文實(shí)現(xiàn)相互調(diào)用及信息共享,整個(gè)web應(yīng)用只有一個(gè)ServletContext,而且web應(yīng)用中的所有部分都能訪問它;部署web應(yīng)用時(shí)容器會(huì)建立一個(gè)ServletContext,對(duì)web應(yīng)用中的每個(gè)Servlet和JSP都可使用。
4.2 Web容器(服務(wù)器)對(duì)象
隨著課程進(jìn)度不斷深入,每個(gè)章節(jié)都有新的組件對(duì)象加入,教學(xué)中可以站在Web容器角度來描述容器對(duì)象的動(dòng)態(tài)增長過程。這些容器對(duì)象在結(jié)構(gòu)上是一組目錄結(jié)構(gòu)的上下文對(duì)象,如圖7所示。通過目錄上下文結(jié)構(gòu)形狀,形象地標(biāo)示出整個(gè)Web項(xiàng)目中的容器對(duì)象結(jié)構(gòu),結(jié)合講解各種對(duì)象的主要屬性和常用方法,使得學(xué)生進(jìn)入形象思維學(xué)習(xí)場景中,從而很能夠更好地了解容器對(duì)象生命周期所呈現(xiàn)的屬性與方法,為Web項(xiàng)目客戶端提供方法服務(wù)。
主要容器對(duì)象名稱和功能如表1所示。
Web項(xiàng)目中Web容器可以比喻成Web組件的注冊、集成、調(diào)度管理中心,相當(dāng)于SOA(面向服務(wù)編程)中的UDDI(統(tǒng)一注冊集成中心)。當(dāng)Web應(yīng)用程序部署到Web容器后,在容器中會(huì)存在各種容器對(duì)象;當(dāng)?shù)貑?dòng)容器后,Web組件被實(shí)例化成容器對(duì)象,此時(shí)容器對(duì)象的生命周期就被開啟了,Web容器開始管理調(diào)度容器對(duì)象。容器對(duì)象為客戶端提供的服務(wù)。
5 結(jié)束語
本文圍繞著Web項(xiàng)目的核心組件設(shè)計(jì)開發(fā)和運(yùn)行主線展開論述其相應(yīng)的教學(xué)方法改革分析與研究,簡練地描述了Web應(yīng)用程序與桌面應(yīng)用程序差別,教學(xué)中重點(diǎn)講授Web項(xiàng)目、Web容器和Web核心組件。理順課程章節(jié)教學(xué)順序,強(qiáng)調(diào)在講授JSP組件時(shí),必須先行教授Servlet組件相關(guān)內(nèi)容,改變傳統(tǒng)的先講JSP后講Servlet的做法。在Web項(xiàng)目中,Web容器所起到類似SOA模式中的UDDI作用,Web組件以對(duì)象形式存在于Web容器中。Web容器能夠?qū)嵗M件對(duì)象,開啟其生命周期服務(wù)方法。Web項(xiàng)目部署到Web容器后(需要正確啟動(dòng)容器),Web組件被實(shí)例化成容器對(duì)象,可以提供處理客戶端請求和返回響應(yīng)的服務(wù)。課堂中盡量詳細(xì)地歸納講解了容器對(duì)象的主要方法和各種主要功能。
以上是筆者從事Java Web編程技術(shù)課程教學(xué)經(jīng)驗(yàn)的體會(huì)總結(jié),結(jié)合隨堂學(xué)習(xí)其他老師的課程和交流教學(xué)體會(huì),借助精品課程建設(shè)研究成果的基礎(chǔ)上整理成文稿。雖然不能說是字字珠璣的真知灼見,但是也是較為成熟的教學(xué)思考心得,自認(rèn)為本門課程教學(xué)提供了一種較為科學(xué)的教學(xué)方法和改革措施,并且此方法在多年的教學(xué)實(shí)踐中得到驗(yàn)證,除了得到督導(dǎo)專家肯定外也受到學(xué)生好評(píng),通過這種教學(xué)方法改革實(shí)施,使得學(xué)生容易掌握本課程的學(xué)習(xí)內(nèi)容,學(xué)習(xí)成績也有很大提高,達(dá)到了精品課程建設(shè)成果目標(biāo)。從此在Java課程系列中,“Java Web編程技術(shù)”不再是一門難懂課程了。為此筆者整理形成文稿公開發(fā)表,旨在為今后在相關(guān)課程的課堂教學(xué)中的提供教學(xué)方法參考引用。
參考文獻(xiàn):
[1] 張屹,吳向榮.企業(yè)級(jí)Java Web編程技術(shù)——Servlet & JSP [M].大連理工大學(xué)出版社,2012:257-268.
[2] 戴冠平.Weblogic企業(yè)級(jí)運(yùn)維實(shí)戰(zhàn)[M].北京:清華大學(xué)出版社,2012:192.
[3](美)帕特里克.Oracle WebLogic Server開發(fā)權(quán)WEI指南[M].北京:清華大學(xué)出版社,2011:331.
[4] Alan Shalloway,James R.Trott.設(shè)計(jì)模式解析[M].徐言聲,譯.北京:人民郵電出版社,2009:103-150.
[5] 任鋼.基于Apcahe CXF構(gòu)建SOA應(yīng)用[M].北京:電子工業(yè)出版社,2013:213-250.
[6] 王立福.軟件工程[M].3版.北京:北京大學(xué)出版社,2009:123-255.
[7] 李剛.輕量級(jí)Java EE企業(yè)應(yīng)用實(shí)戰(zhàn)——Struts 2+Spring 3+Hibernate整合開發(fā)[M].3版.北京:電子工業(yè)出版社,2011:712-761.
[8] 徐濤.《軟件工程》課程實(shí)踐教學(xué)初探[J].中國科技信息,2005(21):213.
[9] 胡惠娟,胡卉穎.高職高專 Java Web 程序設(shè)計(jì)課程教學(xué)改革研究[J].湖南郵電職業(yè)技術(shù)學(xué)院學(xué)報(bào),2017(16):38
[10] 柴慧敏.“Java Web 程序設(shè)計(jì)”課程教學(xué)改革探索[J].中國電子教育,2013(4):66
[11] 楊晨影.軟件工程課程教學(xué)改革初探[J].教育與職業(yè),2009(12):87.
[12] 林曉宇.基于Scrum敏捷方法的軟件工程實(shí)踐教學(xué)探索[J].電腦知識(shí)與技術(shù),2011(19):322.