Java Web編程技術(shù) 課件全套 沈澤剛 第1-17章JavaWeb起步入門 - SSM框架整合與實(shí)例+附錄A JUnit測試框架_第1頁
Java Web編程技術(shù) 課件全套 沈澤剛 第1-17章JavaWeb起步入門 - SSM框架整合與實(shí)例+附錄A JUnit測試框架_第2頁
Java Web編程技術(shù) 課件全套 沈澤剛 第1-17章JavaWeb起步入門 - SSM框架整合與實(shí)例+附錄A JUnit測試框架_第3頁
Java Web編程技術(shù) 課件全套 沈澤剛 第1-17章JavaWeb起步入門 - SSM框架整合與實(shí)例+附錄A JUnit測試框架_第4頁
Java Web編程技術(shù) 課件全套 沈澤剛 第1-17章JavaWeb起步入門 - SSM框架整合與實(shí)例+附錄A JUnit測試框架_第5頁
已閱讀5頁,還剩1066頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

JavaWeb編程技術(shù)本章首先介紹Internet與Web的基本概念、HTTP及相關(guān)技術(shù),然后介紹Tomcat服務(wù)器和IntelliJIDEA開發(fā)工具的安裝,Maven入門,最后介紹Servlet和JSP的開發(fā)。萬維網(wǎng)與InternetWeb前端技術(shù)和Web后端技術(shù)Tomcat服務(wù)器IntelliJIDEA開發(fā)工具與Maven入門簡單Servlet與JSP的建立和運(yùn)行第1章JavaWeb起步入門Internet已經(jīng)普及到整個社會,其中Web應(yīng)用已經(jīng)成為Internet上最受歡迎的應(yīng)用,正是由于它的出現(xiàn),Internet普及推廣速度大大提高。Web技術(shù)已經(jīng)成為Internet上最重要技術(shù)之一,Web應(yīng)用越來越廣泛,Web開發(fā)也是軟件開發(fā)的重要組成部分。萬維網(wǎng)與InternetInternet正式中文譯名為“因特網(wǎng)”,也被人們稱為“國際互聯(lián)網(wǎng)”。它是由成千上萬臺計(jì)算機(jī)互相連接、基于TCP/IP協(xié)議進(jìn)行通信的全球網(wǎng)絡(luò)。它覆蓋了全球絕大多數(shù)的國家和地區(qū),存儲了豐富的信息資源,是世界上最大的計(jì)算機(jī)網(wǎng)絡(luò)。1.1萬維網(wǎng)WWW1.1.1萬維網(wǎng)WWW(WorldWideWeb)是一個大規(guī)模的、在線的信息資源庫,也簡稱為Web。萬維網(wǎng)用鏈接的方法能非常方便地從因特網(wǎng)的一個站點(diǎn)訪問另一個站點(diǎn),從而主動地按需獲取豐富的信息。Web是基于瀏覽器/服務(wù)器(B/S)的一種體系結(jié)構(gòu),客戶使用瀏覽器向Web服務(wù)器發(fā)出請求,服務(wù)器響應(yīng)客戶請求,向客戶送回所請求的網(wǎng)頁,在瀏覽器窗口上顯示網(wǎng)頁的內(nèi)容。Web體系結(jié)構(gòu)主要由三部分構(gòu)成:(1)Web服務(wù)器。用戶要訪問Web頁面或其他資源,必須事先有一個服務(wù)器來提供Web頁面和這些資源,這種服務(wù)器就是Web服務(wù)器。(2)Web客戶端。用戶一般是通過瀏覽器訪問Web資源的,它是運(yùn)行在客戶端的一種軟件。(3)通信協(xié)議??蛻舳撕头?wù)器之間采用HTTP協(xié)議進(jìn)行通信。HTTP協(xié)議是瀏覽器和Web服務(wù)器通信的基礎(chǔ),是應(yīng)用層協(xié)議。服務(wù)器和瀏覽器1.1.2當(dāng)兩臺計(jì)算機(jī)經(jīng)由網(wǎng)絡(luò)進(jìn)行通信時,很多情況是一臺計(jì)算機(jī)作為客戶機(jī),另一臺計(jì)算機(jī)作為服務(wù)器。客戶機(jī)啟動通信,一般是請求服務(wù)器中存儲的信息,然后服務(wù)器將該信息發(fā)送給客戶機(jī)。萬維網(wǎng)也是基于客戶機(jī)/服務(wù)器的配置而運(yùn)行的。在萬維網(wǎng)上,如果一臺連接到Internet的計(jì)算機(jī)希望給其他Internet系統(tǒng)提供信息,則它必須運(yùn)行服務(wù)器軟件,這種軟件稱為Web服務(wù)器。如果一個系統(tǒng)希望訪問服務(wù)器提供的信息,則它必須運(yùn)行客戶軟件。對Web系統(tǒng)來說,客戶軟件通常是Web瀏覽器。服務(wù)器和瀏覽器1.1.21.Web瀏覽器瀏覽器是Web應(yīng)用的客戶端程序,可向Web服務(wù)器發(fā)送各種請求,并對從服務(wù)器發(fā)回的文檔和各種多媒體數(shù)據(jù)格式進(jìn)行解析、顯示和播放。瀏覽器的主要功能是解析網(wǎng)頁文件內(nèi)容并正確顯示,網(wǎng)頁一般是HTML格式。瀏覽器除了請求服務(wù)器的靜態(tài)資源,還可以請求動態(tài)資源。例如,服務(wù)器可能會提供一個文檔,要求用戶通過瀏覽器輸入信息。在用戶完成輸入后,瀏覽器將輸入的信息傳遞給服務(wù)器,服務(wù)器利用輸入信息進(jìn)行計(jì)算,然后向?yàn)g覽器返回一個新的文檔,將結(jié)果通知給瀏覽器。有時候?yàn)g覽器可能還會直接請求執(zhí)行服務(wù)器中存儲的某個程序。程序的執(zhí)行結(jié)果發(fā)回給瀏覽器。常見的瀏覽器有MicrosoftEdge、GoogleChrome、Firefox和Opera等,瀏覽器是最常使用的客戶端程序。服務(wù)器和瀏覽器1.1.22.Web服務(wù)器Web服務(wù)器是向?yàn)g覽器提供服務(wù)的程序,主要功能是提供網(wǎng)上信息瀏覽服務(wù)。服務(wù)器是一種被動程序,只有當(dāng)Internet中運(yùn)行的其他計(jì)算機(jī)中的瀏覽器向它發(fā)出請求時,服務(wù)器才會響應(yīng)。Web服務(wù)器應(yīng)用層使用HTTP協(xié)議,信息內(nèi)容采用HTML文檔格式,信息定位使用URL。ApacheHTTP服務(wù)器是最常用的Web服務(wù)器,它是Apache軟件基金會提供的開放源代碼軟件,是一個非常優(yōu)秀的專業(yè)的Web服務(wù)器,可運(yùn)行在Linux和Windows平臺上。Microsoft公司開發(fā)的專門運(yùn)行在Windows平臺上的IIS服務(wù)器。還有一款Nginx服務(wù)器,它是俄羅斯開發(fā)的一種輕量級的Web服務(wù)器,不僅非常小巧,而且支持反向代理。Nginx的模塊非常豐富,能夠滿足不同的需求。本書使用的Tomcat也是一種常用的Web服務(wù)器,它具有Web服務(wù)器的功能,同時也是Web容器,可以運(yùn)行Servlet和JSP。主機(jī)和IP地址1.1.3連接到Internet上的所有計(jì)算機(jī),從大型機(jī)到微型機(jī)都以獨(dú)立的身份出現(xiàn),我們稱它為主機(jī)(host)。為實(shí)現(xiàn)各主機(jī)間的通信,每臺主機(jī)都必須有一個唯一的網(wǎng)絡(luò)地址,叫IP(InternetProtocol)地址。目前常用的IP地址是用4個字節(jié)32位二進(jìn)制數(shù)表示的,如某計(jì)算機(jī)的IP地址可表示為10101100000100001111111000000001。為便于記憶,將它們分為4組,每組8位一個字節(jié),由小數(shù)點(diǎn)分開,且將每個字節(jié)的二進(jìn)制用十進(jìn)制數(shù)表示,上述地址可表示為,這種書寫方法叫做點(diǎn)分十進(jìn)制表示法。有一個特殊的主機(jī)名和IP地址,localhost主機(jī)名表示本地主機(jī),它對應(yīng)的IP地址是“”,這個地址主要用于本地測試。不管用哪種方法表示IP地址,這些數(shù)字都很難記住,為了方便人們的記憶,在Internet中經(jīng)常使用域名表示主機(jī)。域名(domainname)是由一串用點(diǎn)分隔的名字組成的某臺主機(jī)或一組主機(jī)的名稱,用于在數(shù)據(jù)傳輸時標(biāo)識主機(jī)的位置。HTTP協(xié)議1.1.4計(jì)算機(jī)網(wǎng)絡(luò)之間通信需要使用某種協(xié)議。Internet的基本協(xié)議是TCP/IP(傳輸控制協(xié)議和網(wǎng)際協(xié)議)。而Web應(yīng)用使用的HTTP協(xié)議是建立在TCP/IP之上的應(yīng)用層協(xié)議。HTTP(HypertextTransferProtocol)稱為超文本傳輸協(xié)議。該協(xié)議詳細(xì)規(guī)定了Web瀏覽器與服務(wù)器之間如何通信。它是一個基于請求-響應(yīng)(request-response)的協(xié)議,這種請求-響應(yīng)的過程如圖1-1所示。

HTTP協(xié)議1.1.4基于HTTP協(xié)議的客戶端/服務(wù)器請求響應(yīng)機(jī)制的信息交換過程包含下面幾個步驟:(1)建立連接:Web瀏覽器與服務(wù)器端建立TCP連接。(2)發(fā)送請求:成功建立連接后,瀏覽器開始向Web服務(wù)器發(fā)送請求,這個請求一般是GET或POST命令。(3)發(fā)送響應(yīng):服務(wù)器處理客戶請求,可能需要搜索文件或執(zhí)行程序。之后向Web瀏覽器發(fā)送響應(yīng)消息。(4)關(guān)閉連接:當(dāng)響應(yīng)結(jié)束后,Web瀏覽器與Web服務(wù)器必須斷開,以保證其它Web瀏覽器能夠與Web服務(wù)器建立連接。URL與URI1.1.5Web上的資源使用URL標(biāo)識。URL(UniformResourceLocator)稱為統(tǒng)一資源定位器,指Internet上位于某個主機(jī)上的資源。資源包括HTML文件、圖像文件和程序等。例如,下面是一些合法的URL。/index.html/files/sales/report.htmlhttp://localhost:8080/helloweb/hello.jspURL與URI1.1.5URL通常由四部分組成:協(xié)議名稱、所在主機(jī)的DNS名或IP地址、可選的端口號和資源的名稱。端口號和資源名稱可以省略。(1)最常使用的協(xié)議是HTTP協(xié)議,其他常用協(xié)議包括FTP協(xié)議、TELNET協(xié)議、MAIL協(xié)議和FILE協(xié)議等。(2)DNS即為服務(wù)器的域名,如。(3)端口號標(biāo)明該服務(wù)是在哪個端口上提供的。一些常見的服務(wù)都有固定的端口號,如HTTP服務(wù)的默認(rèn)端口號為80,如果訪問在默認(rèn)端口號上提供的服務(wù),端口號可以缺省。(4)URL的最后一部分為資源在服務(wù)器上的相對路徑和名稱,如/index.html,它表示服務(wù)器上根目錄下的index.html文件。除URL外,在Web應(yīng)用中還經(jīng)常使用另一個術(shù)語URI。URI(UniformResourceIdentifier)稱為統(tǒng)一資源標(biāo)識符,是以特定語法標(biāo)識一個資源的字符串。Web前端技術(shù)1.2Web應(yīng)用涉及的技術(shù)很多,大致可分為前端技術(shù)和后端端技術(shù)。Web前端也稱Web客戶端,Web后端也稱服務(wù)器端??蛻舳思夹g(shù)通常包括HTML、CSS、JavaScript以及各種框架。HTML1.2.1HTML(HyperTextMarkupLanguage)稱為超文本標(biāo)記語言,是一種用來創(chuàng)建超文本文檔的標(biāo)記語言。所謂超文本是指用HTML編寫的文檔中可以包含指向其他文檔或資源的鏈接,該鏈接也稱為超鏈接(hyperlink)。通過超鏈接,用戶可以很容易訪問所鏈接的資源。HTML文檔一般包含兩類信息:一類是標(biāo)記信息,包含在標(biāo)簽中,由一對尖括號(<和>)作為定界符,其中是元素名和屬性。另一類信息是文檔的字符數(shù)據(jù),它們位于標(biāo)簽的外部,一般是需要瀏覽器顯示的信息。下面是一個簡單超鏈接標(biāo)簽。<ahref="/index.html">百度</a>標(biāo)簽一般有開始標(biāo)簽和結(jié)束標(biāo)簽,開始標(biāo)簽內(nèi)的單詞名稱為元素名稱。每個HTML文檔有一個根元素<html>,其中包含<head>元素,<head>元素中又包含<title>元素,這稱為元素的嵌套。有些元素還可以有屬性,屬性通過屬性名和值來表示。HTML目前的最新版本是HTML5。下面是一個包含表格的HTML文檔。HTML1.2.1table-demo.html清單1.1<!DOCTYPEhtml><html><head><metacharset="UTF-8"><title>表格示例</title></head><body><tableborder="1"><caption>圖書信息表</caption><tr><th>書號</th><th>書名</th><th>作者</th><th>價格</th></tr><tr><td>9787507842081</td><td>英語詞匯的奧秘</td><td>蔣爭</td><td>38.00</td></tr><tr><td>9787040406641</td><td>數(shù)據(jù)庫系統(tǒng)概論</td><td>王珊</td><td>36.80</td></tr>A<tr><td>9787508660752</td><td>人類簡史</td><td>尤瓦爾?赫拉利</td><td>67.30</td></tr></table></body></html>該頁面運(yùn)行結(jié)果如圖1-2所示。CSS1.2.2瀏覽器對HTML頁面的各種元素都有一種默認(rèn)的呈現(xiàn)樣式(如,顏色和字體等),也可以使用CSS重新設(shè)置元素的樣式。CSS(CascadingStyleSheets)是層疊樣式表的意思,它是一種用來表現(xiàn)HTML或XML等文件樣式的語言。CSS是能夠真正做到網(wǎng)頁表現(xiàn)與內(nèi)容分離的一種樣式設(shè)計(jì)語言。樣式表有三個層次,按照從底層到高層的順序,分別為內(nèi)聯(lián)樣式表、文檔樣式表以及外部樣式表。1.內(nèi)聯(lián)樣式表內(nèi)聯(lián)樣式表只能作用于單個HTML元素的內(nèi)容。內(nèi)聯(lián)樣式表是在元素標(biāo)記內(nèi)使用style屬性指定樣式,style屬性可以包含任何CSS樣式聲明,如下面代碼使用color屬性設(shè)置段落字體顏色。<pstyle="color:#0000ff">該段落以藍(lán)色顯示。</p>CSS1.2.22.文檔樣式表文檔樣式表能夠?qū)ξ臋n的整個主體起作用。文檔樣式表是在單個頁面中使用<style>標(biāo)記在文檔的頭部定義樣式表,這種樣式只能被定義它的頁面使用,如下所示。<styletype="text/css">h1{font-size:24px;background-color:#c0c0c0}body{background-image:url(images/bg.gif)}</style>CSS1.2.23.外部樣式表外部樣式表是把聲明的樣式保存在樣式文件中,外部樣式表以.css作為文件擴(kuò)展名,例如styles.css。使用外部樣式表有兩種方法。一是通過<link>元素將外部樣式表鏈接到網(wǎng)頁中。另一種方法是在<style>標(biāo)簽內(nèi)使用@import導(dǎo)入外部樣式表。下面代碼使用<link>元素將外部樣式表文件form-style.css鏈接到當(dāng)前頁面中。<linkrel="stylesheet"type="text/css"href="css/form-style.css">上述三種樣式表有個優(yōu)先級問題,內(nèi)聯(lián)樣式表優(yōu)先于文檔樣式表,文檔樣式表優(yōu)先于外部樣式表。清單1.2的文檔通過<link>元素鏈接到樣式表文件css/form-style.css。CSS1.2.2form-style.html清單1.2<!DOCTYPEhtml><html><head><metacharset="UTF-8"><title>表單樣式</title><linkrel="stylesheet"href="css/form-style.css"></head><body><formaction=""method="post"><h1>聯(lián)系我們<span>請用該表單給我們發(fā)送消息</span></h1><label><span>用戶名:</span><inputid="name"type="text"name="name"placeholder="用戶名"/></label><label><span>郵箱地址:</span><inputid="email"type="email"name="email"placeholder="郵箱地址"required="required"/></label><label><span>評論:</span><textareaid="message"name="message"placeholder="輸入評論"></textarea></label><label><span> </span><inputtype="submit"value="提交"/></label></form></body></html>頁面使用<link>元素將外部樣式表鏈接到網(wǎng)頁中,運(yùn)行結(jié)果如圖1-3所示。若在<style>標(biāo)簽內(nèi)使用@import導(dǎo)入外部樣式表,應(yīng)在<head>標(biāo)簽內(nèi)用如下代碼。<styletype="text/css">@importurl("css\form-style.css")</style>JavaScript1.2.3JavaScript是一種廣泛用于客戶端Web開發(fā)的腳本語言,常用來給HTML網(wǎng)頁添加動態(tài)功能,比如響應(yīng)用戶的各種操作。JavaScript是一種基于對象和事件驅(qū)動并具有相對安全性的客戶端腳本語言,使用JavaScript能夠?qū)撁嬷械乃性剡M(jìn)行控制,所以它非常適合設(shè)計(jì)交互式頁面。在HTML頁面中通過<script>標(biāo)簽定義JavaScript腳本。<script>標(biāo)簽內(nèi)既可以包含腳本語句,也可以通過src屬性指向外部腳本文件。<scripttype="text/javascript"src="js/validate.js"></script>下面的HTML頁面嵌入JavaScript腳本代碼,實(shí)現(xiàn)對用戶輸入日期數(shù)據(jù)的校驗(yàn)。JavaScript1.2.3flight-query.html清單1.4<!DOCTYPEhtml><html><head><metacharset="UTF-8"><title>航班查詢</title><scripttype="text/javascript">functionvalidate(){varstartdate=newDate(document.getElementById("start").value);varenddate=newDate(document.getElementById("end").value);if(startdate>enddate){alert("出發(fā)日期不能晚于到達(dá)日期!");returnfalse;}}</script><styletype="text/css">*,input{font-size:11pt;color:black}</style></head><body><formaction="/helloweb/flight-query"method="post"onsubmit="returnvalidate()"><fieldset><legend>請輸入航班查詢信息:</legend><p>出發(fā)日期:<inputtype="date"name="start"id="start"></p><p>到達(dá)日期:<inputtype="date"name="end"id="end"></p><p><inputtype="submit"value="確定"><inputtype="reset"value="重置"></p></fieldset></form></body></html>JavaScript1.2.3flight-query.html清單1.4圖1-4是該頁面運(yùn)行結(jié)果及日期輸入不合法彈出的警告框。Web前端技術(shù)除了包含上面提到的HTML、CSS和JavaScript技術(shù)外,還包含很多前端框架技術(shù)。比如,BootStrap技術(shù)、jQuery技術(shù)、Vue.js技術(shù)、Angular和React技術(shù)等。關(guān)于前端框架技術(shù)已超出本書范圍,這里不再討論。Web后端技術(shù)1.3Web后端也稱Web服務(wù)器端,Web應(yīng)用程序運(yùn)行在Web服務(wù)器上,是可通過瀏覽器訪問的各種Web組件的集合。在實(shí)際應(yīng)用中,Web應(yīng)用程序是由多個Servlet程序、JSP頁面、HTML文件以及圖像文件等資源組成。所有這些組件相互協(xié)調(diào)為用戶提供一組完整的服務(wù)。服務(wù)器端編程技術(shù)1.3.1在服務(wù)器端要實(shí)現(xiàn)Web應(yīng)用的動態(tài)功能,需要服務(wù)器端編程技術(shù)。目前,在服務(wù)器端技術(shù)有多種,包括CGI技術(shù)、Servlet技術(shù)以及動態(tài)頁面技術(shù)。1.傳統(tǒng)技術(shù)標(biāo)準(zhǔn)—CGI技術(shù)公共網(wǎng)關(guān)接口(CommonGatewayInterface,CGI)技術(shù)是在服務(wù)器端生成動態(tài)Web文檔的傳統(tǒng)方法。CGI編程的主要優(yōu)點(diǎn)體現(xiàn)在其靈活性上,可以用任何語言編寫CGI程序。在實(shí)際應(yīng)用中,通常用Perl腳本語言來編寫CGI程序。服務(wù)器端編程技術(shù)1.3.12.Java解決方案—Servlet技術(shù)一個更好的方法是使服務(wù)器支持單獨(dú)的可執(zhí)行模塊,當(dāng)服務(wù)器啟動時該模塊就裝入內(nèi)存并只初始化一次。然后,就可以通過已經(jīng)駐留在內(nèi)存的、準(zhǔn)備提供服務(wù)的模塊副本為每個請求提供服務(wù)。在Java平臺上,服務(wù)器擴(kuò)展是使用ServletAPI編寫的,服務(wù)器擴(kuò)展模塊叫做Servlet容器(container),或稱Web容器。Tomcat就是一個Web容器,它在整個Web應(yīng)用系統(tǒng)中處于中間層的地位,如圖1-5所示。服務(wù)器端編程技術(shù)1.3.13.動態(tài)Web頁面技術(shù)在服務(wù)器端動態(tài)生成Web文檔有多種方法。一種常見的實(shí)現(xiàn)動態(tài)文檔技術(shù)是在Web頁面中嵌入某種語言的腳本,然后讓服務(wù)器來執(zhí)行這些腳本以便生成最終發(fā)送給客戶的頁面。目前比較流行的技術(shù)有PHP技術(shù)、ASP.NET技術(shù)和JSP技術(shù)。JSP(JavaServerPages)頁面是在HTML頁面中嵌入JSP元素的頁面,頁面中的動態(tài)部分是用Java語言編寫的。JSP頁面主要用來實(shí)現(xiàn)表示邏輯。后端數(shù)據(jù)庫技術(shù)1.3.3幾乎所有的JavaWeb應(yīng)用程序都涉及數(shù)據(jù)管理與存儲,數(shù)據(jù)存儲最好的技術(shù)是使用數(shù)據(jù)庫。目前有多種數(shù)據(jù)庫可以使用,包括關(guān)系數(shù)據(jù)庫、文本數(shù)據(jù)庫以及圖數(shù)據(jù)庫等,最常用的是關(guān)系數(shù)據(jù)庫。典型的關(guān)系數(shù)據(jù)庫包括Oracle數(shù)據(jù)庫、SQLServer數(shù)據(jù)庫、MySQL數(shù)據(jù)庫以及PostgreSQL數(shù)據(jù)庫等。本書使用MySQL數(shù)據(jù)庫,本書第5章將介紹Servlet如何通過JDBCAPI訪問數(shù)據(jù)庫以及數(shù)據(jù)源和DAO的使用,第14章介紹MyBatis框架,它實(shí)現(xiàn)對象和關(guān)系的映射。全棧與全棧開發(fā)員1.3.4從前面的介紹可以看到,Web開發(fā)涉及前端和后端多種技術(shù),這些技術(shù)的組合通常稱為技術(shù)棧(stack)。一名開發(fā)人員,如果能同時勝任前端和后端的開發(fā),一般稱為全棧開發(fā)員(fullstackdeveloper)。一些中小企業(yè)更喜歡聘用全棧開發(fā)員,因?yàn)樗麄兛梢蕴幚砬岸撕秃蠖碎_發(fā)任務(wù),從而減少開發(fā)時間和成本。多年來,一些技術(shù)棧在所有應(yīng)用程序項(xiàng)目中獲得了前所未有的普及和吸引力,每一種技術(shù)都有自己的優(yōu)勢。在Web領(lǐng)域常見的技術(shù)棧有LAMP、MEVN、MEAN以及MERN等,限于篇幅,本書對它們不加詳細(xì)介紹。本書討論的內(nèi)容是基于Java的一種全棧Web開發(fā),并且主要討論后端開發(fā)技術(shù)。這里,Web服務(wù)器使用Tomcat服務(wù)器,數(shù)據(jù)庫服務(wù)器使用MySQL,前端采用JSP實(shí)現(xiàn)(當(dāng)然包括HTML、CSS和JavaScript等),持久層使用MyBatis,后端業(yè)務(wù)使用Servlet、Spring和SpringMVC實(shí)現(xiàn)。Tomcat服務(wù)器1.4Tomcat是Apache軟件基金會的開源產(chǎn)品,是Servlet和JSP技術(shù)的實(shí)現(xiàn),它具有作為Web服務(wù)器運(yùn)行的能力,因此不需要一個單獨(dú)的Web服務(wù)器。本書所有程序都在Tomcat服務(wù)器中運(yùn)行。Web容器還有EclipseJetty、CauchoTechnology的Resin、GlassFish、WildFly、Oracle的WebLogic和IBM的WebSphere等。其中有些不僅是Web容器,也提供對EJB、JMS以及其他JakartaEE技術(shù)的支持。Tomcat下載與安裝1.4.1可以到/網(wǎng)站下載Tomcat服務(wù)器。Tomcat服務(wù)器的最新版本Tomcat11.0.0,實(shí)現(xiàn)了Servlet5.0和JSP3.0的規(guī)范??梢韵螺dTomcat的安裝版和解壓版。解壓版是一個ZIP文件,下載后解壓到某個目錄即完成安裝。假設(shè)已經(jīng)安裝JDK17,這里假設(shè)已在C:\ProgramFiles\Java\jdk-17目錄下安裝了JDK。下面說明Tomcat的安裝過程。雙擊下載的可執(zhí)行文件,在出現(xiàn)的界面中選擇安裝類型。這里選擇完全安裝,在Selectthetypesofinstall下拉框中選擇Full,然后單擊Next按鈕,出現(xiàn)如圖1-6所示的界面。這里要求用戶輸入服務(wù)器的端口號、管理員的用戶名和口令。Tomcat默認(rèn)的端口號為8080,管理員的用戶名admin和口令123456。Tomcat下載與安裝1.4.1單擊Next按鈕,出現(xiàn)如圖1-7所示的對話框,這里需要指定Java虛擬機(jī)的運(yùn)行環(huán)境的安裝路徑。Tomcat下載與安裝1.4.1接下來出現(xiàn)如圖1-8所示的對話框,這里要求用戶指定Tomcat軟件的安裝路徑,默認(rèn)路徑是C:\ProgramFiles\ApacheSoftwareFoundation\Tomcat10.1。該目錄為Tomcat的安裝目錄。Tomcat下載與安裝1.4.1單擊Install按鈕,系統(tǒng)開始安裝。在最后出現(xiàn)的窗口中單擊Finish按鈕結(jié)束安裝。Tomcat的目錄結(jié)構(gòu)1.4.2安裝結(jié)束后,打開資源管理器查看Tomcat安裝的目錄結(jié)構(gòu),在Tomcat安裝目錄中包含如表1-2所示的子目錄。目

錄說

明/bin存放啟動和關(guān)閉Tomcat的腳本文件/conf存放Tomcat服務(wù)器的各種配置文件,其中包括servler.xml、tomcat-users.xml和web.xml等文件/lib存放Tomcat服務(wù)器及所有Web應(yīng)用程序都可以訪問的庫文件/logs存放Tomcat的日志文件/temp存放Tomcat運(yùn)行時產(chǎn)生的臨時文件/webapps存放所有Web應(yīng)用程序的根目錄/work存放JSP頁面生成的Servlet源文件和字節(jié)碼文件Tomcat的啟動和停止1.4.3在使用Tomcat服務(wù)器開發(fā)Web應(yīng)用程序時,經(jīng)常需要重新啟動服務(wù)器。這可通過bin中的tomcat11w.exe工具實(shí)現(xiàn),雙擊該文件,打開ApacheTomcat屬性對話框。該對話框主要設(shè)置Tomcat的各種屬性,它也可以用來方便地停止和重新啟動Tomcat。打開瀏覽器,在地址欄輸入http://localhost:8080/,如能打開圖1-9所示的頁面,說明Tomcat服務(wù)器已經(jīng)啟動并工作正常。注意,Tomcat默認(rèn)端口為8080,若在安裝時指定了其他端口,應(yīng)使用指定的端口號。Web應(yīng)用程序結(jié)構(gòu)1.4.4Web應(yīng)用程序是一種存放在Web服務(wù)器上,可以通過瀏覽器訪問的應(yīng)用程序。Web應(yīng)用程序的一個最大好處是用戶很容易訪問,用戶只要有瀏覽器即可,不需要再安裝其他軟件。Web應(yīng)用程序的所有資源被保存在一個結(jié)構(gòu)化的目錄中,目錄結(jié)構(gòu)是按照資源和文件的位置嚴(yán)格定義的。Tomcat安裝目錄的webapps目錄是所有Web應(yīng)用程序的根目錄。假如有一個名為helloweb的Web應(yīng)用程序,部署到Tomcat中就建立一個helloweb目錄。圖1-10是helloweb應(yīng)用程序的一個可能的目錄結(jié)構(gòu)。Web應(yīng)用程序結(jié)構(gòu)1.4.41.文檔根目錄每個Web應(yīng)用程序都有一個文檔根目錄(documentroot),它是應(yīng)用程序所在的目錄。圖1-10的helloweb目錄就是應(yīng)用程序的文檔根目錄。應(yīng)用程序所有可以被公開訪問的文件(如HTML文件、JSP文件)都應(yīng)該放在該目錄或其子目錄中。通常把該目錄中的文件組織在多個子目錄中。例如,HTML文件存放在html目錄中,JSP頁面存放在jsp目錄中,而圖像文件存放在images目錄中,這樣方便對文件進(jìn)行管理。Web應(yīng)用程序結(jié)構(gòu)1.4.42.WEB-INF目錄每個Web應(yīng)用程序在它的根目錄中都必須有一個WEB-INF目錄。該目錄中主要存放供服務(wù)器訪問的資源。盡管該目錄物理上位于文檔根目錄中,但不將它看作文檔根目錄的一部分,也就是說,在WEB-INF目錄中的文件并不為客戶服務(wù),該目錄主要包含三個內(nèi)容。(1)classes目錄。存放支持該Web應(yīng)用程序的類文件,如Servlet類文件、JavaBean類文件等。在運(yùn)行時,容器自動將該目錄添加到Web應(yīng)用程序的類路徑中。(2)lib目錄。存放Web應(yīng)用程序使用的全部JAR文件,包括第三方的JAR文件。例如,如果一個Servlet使用JDBC連接數(shù)據(jù)庫,JDBC驅(qū)動程序JAR文件應(yīng)該存放在這里。我們也可以把應(yīng)用程序所用到的類文件打包成JAR文件存放到該目錄中。在運(yùn)行時,容器自動將該目錄中的所有JAR文件添加到Web應(yīng)用程序的類路徑中。Web應(yīng)用程序結(jié)構(gòu)1.4.42.WEB-INF目錄(3)web.xml文件。該文件稱為部署描述文件或部署描述符,每個Web應(yīng)用程序都必須有一個web.xml文件。其中配置Web應(yīng)用程序有關(guān)信息,如Servlet聲明、映射、屬性、授權(quán)及安全限制等。我們將在2.6節(jié)詳細(xì)討論該文件。在Web應(yīng)用程序中,可能需要阻止用戶訪問一些特定資源而允許容器訪問它們。為了保護(hù)這些資源,可以將它們存儲在WEB-INF目錄中。在這些目錄中的文件對容器是可見的,但不能為客戶提供服務(wù)。3.Web歸檔文件一個Web應(yīng)用程序包含許多文件,可以將這些文件打包成擴(kuò)展名為.war的Web歸檔文件中,一般稱為WAR文件。WAR文件主要是為了方便Web應(yīng)用程序在不同系統(tǒng)之間的移植。例如,可以直接把一個WAR文件放到Tomcat的webapps目錄中,Tomcat會自動把該文件的內(nèi)容釋放到webapps目錄中并創(chuàng)建一個與WAR文件同名的應(yīng)用程序。創(chuàng)建WAR文件很簡單。在IntelliJIDEA中可直接將項(xiàng)目導(dǎo)出到一個WAR文件中,之后可以將該文件部署到服務(wù)器中。Web應(yīng)用程序結(jié)構(gòu)1.4.44.默認(rèn)的Web應(yīng)用程序除用戶創(chuàng)建的Web應(yīng)用程序外,Tomcat服務(wù)器還維護(hù)一個默認(rèn)的Web應(yīng)用程序。Tomcat安裝目錄下的webapps\ROOT目錄被設(shè)置為默認(rèn)的Web應(yīng)用程序的文檔根目錄。它與其他的Web應(yīng)用程序類似,只不過訪問它的資源不需要指定應(yīng)用程序的名稱或上下文路徑。例如,訪問默認(rèn)Web應(yīng)用程序的URL為:http://localhost:8080/。Web應(yīng)用程序結(jié)構(gòu)1.4.4使用集成開發(fā)環(huán)境(IntegratedDevelopmentEnviroment,IDE)可以加快JavaWeb應(yīng)用開發(fā),有多種IDE可用,常用的有IntelliJIDEA和Eclipse。本節(jié)介紹IntelliJIDEA的使用,有關(guān)Eclipse的使用請參閱其他文獻(xiàn)。IntelliJIDEA是JetBrains公司的軟件產(chǎn)品,被認(rèn)為是當(dāng)前Java開發(fā)效率最高的IDE工具,目前很多大型互聯(lián)網(wǎng)公司都使用它作為開發(fā)工具。IntelliJIDEA有社區(qū)版(CommunityEdition)和旗艦版(UltimateEdition)兩個版本。前者是免費(fèi)開源的,功能較少,可用來開發(fā)JavaSE程序,后者是商業(yè)版,功能強(qiáng)大,用戶需要付費(fèi)使用,也可以有30天的免費(fèi)測試。開發(fā)JavaWeb項(xiàng)目應(yīng)該使用旗艦版。IntelliJIDEA開發(fā)工具1.5可以從官方網(wǎng)站(/idea)下載最新的IntelliJIDEA。下載得到一個可執(zhí)行文件,運(yùn)行安裝程序,在安裝過程中首先需要指定安裝路徑,在接下來的頁面中指定操作系統(tǒng)位數(shù)以及IntelliJ所關(guān)聯(lián)的文件等,如圖1-11所示。安裝IntelliJIDEA1.5.1最后,在結(jié)束安裝頁面中選中RunIntelliJIDEA復(fù)選框,單擊Finish按鈕,啟動運(yùn)行IntelliJIDEA。使用IntelliJIDEA可以創(chuàng)建多種類型項(xiàng)目,比如Java項(xiàng)目、JavaFX項(xiàng)目、Maven項(xiàng)目以及JakartaEE項(xiàng)目等。本書介紹這種項(xiàng)目的創(chuàng)建。首先在磁盤上創(chuàng)建一個目錄用于存放IntelliJIDEA項(xiàng)目,比如,D:\IdeaProjects目錄。按下面步驟創(chuàng)建JakartaEE項(xiàng)目。在IDEA中創(chuàng)建Web項(xiàng)目1.5.2(1)打開IntellijIDEAIDE,單擊NewProject,打開NewProject新建項(xiàng)目對話框,如圖1-12所示。在左側(cè)項(xiàng)目類型列表中選擇JakartaEE,在右側(cè)面板中填入或選擇新建項(xiàng)目的有關(guān)信息。在IDEA中創(chuàng)建Web項(xiàng)目1.5.2(2)單擊Next按鈕,打開如圖1-13所示對話框,這里需要指定項(xiàng)目版本和依賴項(xiàng)。在IDEA中創(chuàng)建Web項(xiàng)目1.5.2(3)最后單擊Create按鈕,IDEA生成項(xiàng)目結(jié)構(gòu)和必要的文件。在新建的JakartaEE項(xiàng)目中,默認(rèn)還創(chuàng)建一個HelloServlet和一個index.jsp頁面,并將其在編輯窗口中打開,如圖1-14所示。在IDEA中創(chuàng)建Web項(xiàng)目1.5.2選擇Run→EditConfiguration菜單,在打開的窗口中點(diǎn)擊“+”號,選擇TomcatServer→Local,在打開的頁面右側(cè)的Name文本框中輸入服務(wù)器名(假設(shè)已將Tomcat10.1.2解壓到D盤),在Applicationserver文本框右側(cè)單擊Configure按鈕,在打開的對話框中添加Tomcat服務(wù)器,如圖1-16所示。配置Tomcat服務(wù)器1.5.3配置Tomcat服務(wù)器1.5.3在Tomcat中部署項(xiàng)目1.5.4選擇Run→EditConfigurations菜單,打開Run/DebugConfigurations對話框,選擇剛剛配置的Tomcat服務(wù)器,選擇Deployment選項(xiàng)卡,點(diǎn)擊“+”號,選擇Artifact。打開選擇部署工件對話框,如圖1-18所示。這里選擇helloweb:war,單擊OK按鈕,在Applicationcontext文本框中輸入上下文(helloweb),如圖1-19所示。啟動Tomcat并訪問應(yīng)用1.5.5在IDEA窗口的右上角有一個服務(wù)器工具欄,使用這里的工具可以啟動和停止Tomcat服務(wù)器、部署應(yīng)用程序等,如圖1-20所示。在該工具欄中,單擊按鈕用于啟動Tomcat服務(wù)器,該按鈕變成時可重新部署項(xiàng)目。單擊按鈕可以停止Tomcat服務(wù)器。啟動Tomcat并訪問應(yīng)用1.5.5服務(wù)器啟動或重新部署后,打開瀏覽器,在地址欄中輸入要訪問的資源URL地址即可訪問Web應(yīng)用程序。在使用IDEA新建JakartaEE項(xiàng)目時,它自動創(chuàng)建一個HelloServlet和一個index.jsp頁面,使用下面URL訪問index.jsp頁面。http://localhost:8080/helloweb/index.jsp結(jié)果如圖1-21所示。單擊頁面中“HelloServlet”鏈接可訪問HelloServlet,運(yùn)行結(jié)果如圖1-22所示。Maven是Apache開源軟件組織提供的一個開源項(xiàng)目,是一種源代碼構(gòu)建環(huán)境。Maven的本質(zhì)是一個項(xiàng)目管理工具,將項(xiàng)目開發(fā)和管理過程抽象成一個項(xiàng)目對象模型。ApacheMaven是一個開源的、基于標(biāo)準(zhǔn)的項(xiàng)目管理框架,它簡化了項(xiàng)目的構(gòu)建、測試、報告和打包。Maven已經(jīng)成為企業(yè)使用最廣泛的開源軟件程序之一。Maven入門1.6Maven的項(xiàng)目結(jié)構(gòu)1.6.1通常,當(dāng)開發(fā)一個新項(xiàng)目時,大部分時間花在確定項(xiàng)目布局、存儲代碼和配置文件所需的文件夾結(jié)構(gòu)上。這些決策在不同的項(xiàng)目和團(tuán)隊(duì)之間可能會有很大的差異,這使得新的開發(fā)人員很難理解和采用其他團(tuán)隊(duì)的項(xiàng)目。這也會讓現(xiàn)有的開發(fā)人員很難在項(xiàng)目之間切換,找到他們想要的東西。Maven通過標(biāo)準(zhǔn)化項(xiàng)目的文件夾結(jié)構(gòu)來解決上述問題。Maven提供了關(guān)于項(xiàng)目的不同部分(如源代碼、測試代碼和配置文件)應(yīng)該存放在何處的建議。約定優(yōu)于配置(conventionoverconfiguration,CoC)是Maven的一個重要原則。在1.5.2節(jié)創(chuàng)建的JakartaEE項(xiàng)目,由于使用了Maven作為構(gòu)建工具,因此項(xiàng)目結(jié)構(gòu)就符合Maven的約定,其結(jié)構(gòu)如圖1-23所示。Maven的項(xiàng)目結(jié)構(gòu)1.6.1Maven的依賴管理1.6.2在開發(fā)Java項(xiàng)目時經(jīng)常要用到(也就是依賴)很多類庫,對這些類庫的管理通常是繁瑣的,包括不同的版本、類庫之間的依賴關(guān)系等。Maven提供了聲明性依賴項(xiàng)管理。這種方法是在pom.xml文件中聲明項(xiàng)目的依賴項(xiàng)。Maven會自動下載這些依賴項(xiàng),存放到存儲庫中,以便用于構(gòu)建、測試或打包應(yīng)用程序,從而不需要將依賴項(xiàng)與項(xiàng)目捆綁在一起。當(dāng)首次運(yùn)行Maven項(xiàng)目時,需要連接到網(wǎng)絡(luò),并從遠(yuǎn)程存儲庫下載依賴項(xiàng)和相關(guān)元數(shù)據(jù)。默認(rèn)的遠(yuǎn)程存儲庫稱為Maven中央存儲庫(MavenCentralDepository)。Maven將這些依賴項(xiàng)下載到本地存儲庫(LocalDepository)中。在隨后的項(xiàng)目開發(fā)和運(yùn)行中,Maven在本地存儲庫中查找依賴項(xiàng),如果沒有找到,Maven將嘗試從中央存儲庫下載。在1.5.2節(jié)創(chuàng)建的項(xiàng)目中,就是在pom.xml文件中聲明項(xiàng)目的依賴項(xiàng),pom.xml文件的內(nèi)容如清單1.5所示。pom.xml清單1.5<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="/POM/4.0.0"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/POM/4.0.0/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.boda</groupId><artifactId>helloweb</artifactId><version>1.0-SNAPSHOT</version><name>helloweb</name><packaging>war</packaging>Maven的依賴管理1.6.2<properties><piler.target>17</piler.target><piler.source>17</piler.source><junit.version>5.7.0</junit.version></properties><dependencies><dependency><groupId>jakarta.servlet</groupId><artifactId>jakarta.servlet-api</artifactId><version>5.0.0</version><scope>provided</scope></dependency><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><version>${junit.version}</version><scope>test</scope></dependency><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-engine</artifactId><version>${junit.version}</version><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><version>3.3.0</version></plugin></plugins></build></project>

在IntelliJIDEA中使用Maven1.6.3使用Maven管理項(xiàng)目可以在命令提示符通過命令完成,在IDE中也可以通過命令完成。在IntelliJIDEA中提供一個Maven操作窗口,如圖1-24所示。

在IntelliJIDEA中使用Maven1.6.3在該窗口中可以方便的執(zhí)行Maven命令,例如,單擊按鈕打開一個命令列表(見圖1-25),從中選擇要執(zhí)行的Maven命令。

在IntelliJIDEA中使用Maven1.6.3表1-3給出了Maven的幾個常用命令及含義。關(guān)于其他Maven命令的含義,限于篇幅本書不再討論,感興趣的讀者可參閱其他文獻(xiàn)。命令含義mvnclean清理命令,執(zhí)行clean將刪除target目錄及內(nèi)容mvncompile編譯命令,作用是將src/main/java下的文件編譯為class文件輸出到target目錄下mvntest測試命令,會執(zhí)行src/test/java下的單元測試類mvnpackage打包命令,對于Java工程打包成jar文件,對于Web工程打包成war文件mvninstall安裝命令,執(zhí)行install將項(xiàng)目打成jar包或war包發(fā)布到本地倉庫mvndeploy部署命令,執(zhí)行該命令將進(jìn)行項(xiàng)目編譯、單元測試、打包功能,同時把打好的可執(zhí)行jar包(war包或其它形式的包)布署到本地Maven倉庫和遠(yuǎn)程Maven私服倉庫JavaServlet是使用ServletAPI以及相關(guān)的類編寫的Java程序,JSP(JavaServerPage0s)是嵌入了Java代碼的動態(tài)頁面,文件的擴(kuò)展名是.jsp。它們都是運(yùn)行在服務(wù)器上的組件技術(shù)。本節(jié)簡單介紹這兩種技術(shù),使讀者熟悉一下有關(guān)的概念,在后面章節(jié)還會詳細(xì)討論。Servlet和JSP簡介1.7JavaServlet1.7.1JavaServlet也叫服務(wù)器端小程序,這種程序運(yùn)行在Web容器中,它可以處理用戶的請求,主要用來實(shí)現(xiàn)動態(tài)Web項(xiàng)目。在IntelliIDEA中新建一個JakartaEE項(xiàng)目時,IDEA就在項(xiàng)目中默認(rèn)創(chuàng)建一個名為HelloServlet的Servlet程序和一個index.jsp的頁面。下面先來看這個Servlet,該HelloServlet.java文件的內(nèi)容如清單1.6所示。HelloServlet.java清單1.6packagecom.boda.helloweb;importjava.io.*;importjakarta.servlet.http.*;importjakarta.servlet.annotation.*;@WebServlet(name="helloServlet",value="/hello-servlet")publicclassHelloServletextendsHttpServlet{privateStringmessage;publicvoidinit(){message="HelloWorld!";}

publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException{response.setContentType("text/html");//HelloJavaServlet1.7.1PrintWriterout=response.getWriter();out.println("<html><body>");out.println("<h1>"+message+"</h1>");out.println("</body></html>");}publicvoiddestroy(){}}部署Web應(yīng)用程序,單擊頁面的鏈接,即可請求該Servlet。也可以在瀏覽器中直接使用下面URL訪問該Servlet。http://localhost:8080/chapter01/hello-servletJSP頁面1.7.2使用Servlet可以實(shí)現(xiàn)Web應(yīng)用程序的所有功能,但它的一大缺點(diǎn)是業(yè)務(wù)邏輯和表示邏輯不分,這對涉及大量HTML內(nèi)容的應(yīng)用編寫Servlet非常復(fù)雜,程序的修改困難,代碼的可重用性也較差。因此,要實(shí)現(xiàn)表示邏輯,應(yīng)該使用JSP頁面技術(shù)。可以把JSP看成是含有Java代碼的HTML頁面。JSP頁面本質(zhì)上也是Servlet,它可以完成Servlet能夠完成的所有任務(wù)。JSP(JavaServerPages)頁面是在HTML頁面中嵌入JSP元素的頁面,這些元素稱為JSP標(biāo)簽。在IDEA中新建的JakartaEE項(xiàng)目中,默認(rèn)創(chuàng)建了一個index.jsp頁面,它是應(yīng)用的首頁,代碼如清單1.6所示。JSP頁面1.7.2index.jsp清單1.6<%@pagecontentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPEhtml><html><head><title>JSP-HelloWorld</title></head><body><h1><%="HelloWorld!"%></h1><br/><ahref="hello-servlet">HelloServlet</a></body></html>也可以打開瀏覽器,在地址欄中輸入下面URL:http://localhost:8080/chapter01/index.jsp第1章知識點(diǎn)總結(jié)Web是基于客戶/服務(wù)器(C/S)的一種體系結(jié)構(gòu),客戶使用瀏覽器向Web服務(wù)器發(fā)出請求,服務(wù)器響應(yīng)客戶請求,向客戶回送所請求的網(wǎng)頁,客戶在瀏覽器窗口上顯示網(wǎng)頁的內(nèi)容。

超文本傳輸協(xié)議HTTP是Web使用的協(xié)議。它是一個基于請求-響應(yīng)的無狀態(tài)協(xié)議??蛻粝蚍?wù)器發(fā)送請求,服務(wù)器對請求進(jìn)行處理。Web客戶端技術(shù)包括HTML、CSS、JavaScript等。HTML用來編寫Web文檔。CSS是一種樣式設(shè)計(jì)語言。JavaScript是一種腳本語言。Web容器(或Servlet容器)是運(yùn)行Servlet和JSP的軟件。Tomcat服務(wù)器是最常用的Web容器。IntelliJIDEA是開發(fā)JavaWeb項(xiàng)目的開發(fā)工具。使用它可以創(chuàng)建JakartaEE項(xiàng)目。Maven

是Apache軟件組織的一個開源項(xiàng)目,是一種源代碼構(gòu)建環(huán)境,也是一個項(xiàng)目管理工具。約定優(yōu)于配置是Maven的一個重要原則。Servlet是用ServletAPI以及相關(guān)的類編寫的Java程序,這種程序運(yùn)行在Web容器中,主要用來擴(kuò)展Web服務(wù)器的功能。JSP(JavaServerPages)頁面是在HTML頁面中嵌入JSP元素的頁面。JSP元素具有嚴(yán)格定義的語法并包含完成各種任務(wù)的語法元素。本章首先介紹Servlet常用API,然后重點(diǎn)介紹HTTP請求的處理和響應(yīng)的處理,另外,還將介紹Servlet生命周期、部署描述文件、@WebServlet注解、ServletConfig和ServletContext的使用。ServletAPI及Servlet生命周期處理請求和發(fā)送響應(yīng)表單數(shù)據(jù)處理部署描述文件@WebServlet注解第2章JavaServlet技術(shù)JavaServlet(Java服務(wù)器端程序)是JavaWeb技術(shù)的核心基礎(chǔ),它實(shí)際是CGI技術(shù)的一種替代,這種程序運(yùn)行在Web容器中,主要用來實(shí)現(xiàn)動態(tài)Web項(xiàng)目,它是Java企業(yè)應(yīng)用開發(fā)的關(guān)鍵組件。ServletConfig接口HttpSession和ServletContext對象Servlet概述2.1JavaServlet自從1997年出現(xiàn)以來,由于所具有的平臺無關(guān)性、可擴(kuò)展性以及能夠提供比CGI腳本更優(yōu)越性能等特征,使它的應(yīng)用得到了快速增長。Servlet是Java程序,它可以向客戶發(fā)送HTML文檔。僅使用Servlet可以實(shí)現(xiàn)Web應(yīng)用程序的所有功能,但它的一大缺點(diǎn)是業(yè)務(wù)邏輯和表示邏輯不分,對涉及大量HTML內(nèi)容的應(yīng)用編寫Servlet非常復(fù)雜,程序的修改困難,代碼的可重用性也較差。因此,又推出了JSP技術(shù)。JSP(JavaServerPages)是在HTML頁面中嵌入JSP元素的頁面,這些元素稱為JSP標(biāo)簽。JSP頁面本質(zhì)上也是Servlet,它可以完成Servlet能夠完成的所有任務(wù)。ServletAPI2.1.1Servlet是使用ServletAPI以及相關(guān)的類編寫的Java程序,ServletAPI是JavaWeb應(yīng)用開發(fā)的基礎(chǔ),ServletAPI定義了若干接口和類。目前ServletAPI的最新版本是Servlet5.0,它由下面4個包組成。jakarta.servlet包,定義了開發(fā)與協(xié)議無關(guān)的Servlet的接口和類。jakarta.servlet.http包,定義了開發(fā)采用HTTP協(xié)議通信的Servlet的接口和類。jakarta.servlet.annotation包,定義9個注解類型和2個枚舉類型。jakarta.servlet.descriptor包,定義了以編程方式訪問Web應(yīng)用程序配置信息的類型。ServletAPI2.1.1這4個包中的接口和類是開發(fā)Servlet需要了解的全部內(nèi)容。這里重點(diǎn)介紹jakarta.servlet包和jakarta.servlet.http包中一些常用的接口和類。下面是幾個重要的接口。 Servlet接口,是所有Servlet的根接口。 ServletConfig接口,是Servlet配置對象。 GenericServlet抽象類,它實(shí)現(xiàn)了Servlet接口。 HttpServlet抽象類,它用于創(chuàng)建支持HTTP協(xié)議的Servlet。 HttpServletRequest接口,是基于HTTP協(xié)議的請求對象,它繼承了ServletRequest接口。 HttpServletResponse接口,是基于HTTP協(xié)議的響應(yīng)對象,它繼承了ServletResponse接口。ServletAPI2.1.1其中,HttpServlet是最重要的抽象類,開發(fā)JavaServlet就是要繼承這個類,它與其他接口和類的層次關(guān)系如圖2-1所示。Servlet接口2.1.2jakarta.servlet.Servlet接口是ServletAPI中的基本接口,每個Servlet必須直接或間接實(shí)現(xiàn)該接口。該接口定義了如下5個方法。 publicvoidinit(ServletConfigconfig) publicvoidservice(ServletRequestrequest,ServletResponseresponse) publicvoiddestroy() publicServletConfiggetServletConfig() publicStringgetServletInfo()上述的init()、service()和destroy()方法是Servlet的生命周期方法,它們由Web容器自動調(diào)用。如,當(dāng)服務(wù)器關(guān)閉時,就會自動調(diào)用destroy()方法。如果開發(fā)與協(xié)議無關(guān)的Servlet,可以實(shí)現(xiàn)Servlet接口,也就是要實(shí)現(xiàn)該接口中定義的所有方法。Servlet接口2.1.2ServletConfig接口是Servlet配置對象,其中定義了getServletContext()、getInitParameter()、getInitParameterNames()和getServletName()方法。在2.8節(jié)中將詳細(xì)介紹該接口的使用。GenericServlet抽象類實(shí)現(xiàn)了Servlet接口和ServletConfig接口,它提供了Servlet接口中除service()外的所有方法的實(shí)現(xiàn),同時增加了幾個支持日志的方法。可以擴(kuò)展GenericServlet類并實(shí)現(xiàn)service()方法來創(chuàng)建任何類型的Servlet。HttpServlet類2.1.3jakarta.servlet.http包中定義了使用HTTP協(xié)議創(chuàng)建的Servlet所需要的接口和類,其中HttpServlet抽象類用來實(shí)現(xiàn)針對HTTP協(xié)議的Servlet,在HttpServlet中針對不同的HTTP請求方法定義了不同的處理方法,如處理GET請求的doGet()方法格式如下。protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException通常,我們編寫的Servlet需要繼承HttpServlet類并覆蓋doGet()或doPost()方法。這些方法都帶兩個參數(shù),HttpServletRequest類型的參數(shù)request表示請求對象,HttpServletResponse類型的參數(shù)response表示響應(yīng)對象,它們用來處理請求和響應(yīng)。HttpServletRequest接口和HttpServletResponse接口2.1.4在HttpServlet類的doGet()方法和其他請求處理方法中都帶兩個參數(shù),一個是請求對象,它是HttpServletRequest的實(shí)例,另一個是響應(yīng)對象,它是HttpServletResponse的實(shí)例。它們用來處理請求和響應(yīng)。HttpServletRequest接口提供了針對HTTP請求操作方法,如定義了從請求對象中獲取HTTP請求頭、Cookie等信息的方法。HttpServletResponse接口提供了針對HTTP的發(fā)送響應(yīng)的方法。它定義了為響應(yīng)設(shè)置如HTTP頭、Cookie信息的方法。關(guān)于這兩個接口的更詳細(xì)用法在后面章節(jié)討論。Servlet生命周期Servlet作為在容器中運(yùn)行的組件,它有一個從創(chuàng)建到銷毀的過程,這個過程被稱為Servlet生命周期。Servlet生命周期包括以下幾個階段:Servlet類的加載和實(shí)例化,調(diào)用init()方法初始化Servlet實(shí)例,一旦初始化完成,容器從客戶收到請求時就將調(diào)用它的service()方法。最后容器在Servlet實(shí)例上調(diào)用destroy()方法使它進(jìn)入銷毀狀態(tài)。圖2-2給出了Servlet生命周期的各階段以及狀態(tài)的轉(zhuǎn)換。2.2加載和實(shí)例化Servlet2.2.1當(dāng)客戶請求Servlet時,Web容器使用Class.forName()方法將其加載到內(nèi)存并將其實(shí)例化。因此,Servlet類應(yīng)有一個不帶參數(shù)的構(gòu)造方法。若沒有為Servlet類中定義構(gòu)造方法,Java編譯器將添加默認(rèn)構(gòu)造方法。容器創(chuàng)建了Servlet實(shí)例后就進(jìn)入生命周期階段,Servlet生命周期方法包括init()、service()和destroy()方法等。2.2.2初始化Servlet2.2.2容器創(chuàng)建Servlet實(shí)例后,調(diào)用init(ServletConfig)方法初始化Servlet,容器為該方法傳遞一個ServletConfig參數(shù),它包含Servlet初始化參數(shù)。之后,容器調(diào)用無參數(shù)的init()方法,完成初始化。init()在Servlet生命周期中僅被調(diào)用一次。為客戶提供服務(wù)2.2.3在Servlet實(shí)例正常初始化后,它就準(zhǔn)備為客戶提供服務(wù)。用戶通過單擊超鏈接或提交表單向容器請求訪問Servlet。當(dāng)容器接收到對Servlet的請求時,容器根據(jù)請求中的URL找到正確的Servlet,首先創(chuàng)建兩個對象,一個是HttpServletRequest請求對象,一個是HttpServletResponse響應(yīng)對象。然后創(chuàng)建一個新的線程,在該線程中調(diào)用service(),同時將請求對象和響應(yīng)對象作為參數(shù)傳遞給該方法。顯然,有多少個請求,容器將創(chuàng)建多少個線程。銷毀和卸載Servlet2.2.4當(dāng)容器決定不再需要Servlet實(shí)例時,它將在Servlet實(shí)例上調(diào)用destroy()方法,Servlet在該方法中釋放資源,如它在init()中獲得的數(shù)據(jù)庫連接。一旦該方法被調(diào)用,Servlet實(shí)例不能再提供服務(wù)。Servlet實(shí)例從該狀態(tài)僅能進(jìn)入卸載狀態(tài)。在調(diào)用destroy()之前,容器會等待其他執(zhí)行Servlet的service()的線程結(jié)束。處理請求2.3HTTP是基于請求和響應(yīng)的協(xié)議。請求和響應(yīng)是HTTP最重要的內(nèi)容。本節(jié)討論如何處理請求,下節(jié)學(xué)習(xí)如何發(fā)送響應(yīng)。HTTP消息是客戶向服務(wù)器的請求或者服務(wù)器向客戶的響應(yīng)。請求消息和響應(yīng)消息的格式是類似的。HTTP請求結(jié)構(gòu)2.3.1由客戶向服務(wù)器發(fā)出的消息稱HTTP請求(HTTPrequest),一個HTTP請求通常包括請求行、請求頭和請求數(shù)據(jù)。圖2-3是一個典型的POST請求。HTTP請求結(jié)構(gòu)2.3.11.請求行HTTP的請求行由三部分組成:HTTP方法名、請求資源的URI和HTTP版本。這三部分由空格分隔。圖2-3的請求行中,使用的方法為POST,資源的URI為/helloweb/select-product,使用的HTTP版本為HTTP/1.1。2.請求頭請求行之后的內(nèi)容稱為請求頭(requestheader),它可以指定請求使用的瀏覽器信息、字符編碼信息及客戶能處理的頁面類型等。接下來是一個空行。空行的后面是請求的數(shù)據(jù)。如果是GET請求,將不包含請求數(shù)據(jù)。3.HTTP的請求方法請求行中的方法名指定了客戶請求服務(wù)器完成的動作。HTTP1.1版本共定義了8個方法,如表2-1所示。HTTP請求結(jié)構(gòu)2.3.14.GET方法和POST方法在所有的HTTP請求方法中,GET方法和POST方法是兩種最常用的方法。我們必須清楚在什么情況下應(yīng)該使用哪種請求方法。GET方法用來檢索資源,它的含義是“獲得(get)由該URI標(biāo)識的資源”。GET方法請求的資源通常是靜態(tài)資源。使用GET也可以請求動態(tài)資源,但一般要提供少量的請求參數(shù)。POST方法用來向服務(wù)器發(fā)送需要處理的數(shù)據(jù),它的含義是“將數(shù)據(jù)發(fā)送(post)到由該URI標(biāo)識的動態(tài)資源”。注意,在POST請求中,請求參數(shù)是在消息體中發(fā)送,而在GET請求中,請求參數(shù)是請求URI的一部分。表2-2比較了GET方法和POST方法的不同。特征GET方法POST方法資源類型靜態(tài)的或動態(tài)的動態(tài)的數(shù)據(jù)類型文本文本或二進(jìn)制數(shù)據(jù)數(shù)據(jù)量一般不超過255個字符沒有限制可見性數(shù)據(jù)是URL的一部分,在瀏覽器的地址欄中對用戶可見數(shù)據(jù)不是URL的一部分而是作為請求的消息體發(fā)送,在瀏覽器的地址欄中對用戶不可見數(shù)據(jù)緩存數(shù)據(jù)可在瀏覽器的URL歷史中緩存數(shù)據(jù)不能在瀏覽器的URL歷史中緩存發(fā)送HTTP請求2.3.2在客戶端發(fā)生下面的事件,瀏覽器就向Web服務(wù)器發(fā)送一個HTTP請求。(1)用戶在瀏覽器的地址欄中輸入URL并按回車鍵。(2)用戶點(diǎn)擊了HTML頁面中的超鏈接。(3)用戶在HTML頁面中填寫一個表單并提交。在上面的三種方法中,前兩

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論