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