javascript
Head First JSP---随笔九(部署Web应用)
Web應(yīng)用部署
Web應(yīng)用終于到了最后的重要時(shí)刻。
Web應(yīng)用部署
2.1 構(gòu)建Web應(yīng)用的文件和目錄結(jié)構(gòu),其中可能包含
1. 靜態(tài)內(nèi)容
2. JSP頁(yè)面
3. servlet類
4. 部署描述文件
5. 標(biāo)記庫(kù)
6. Jar文件
7. Java類文件
8. 描述如何保護(hù)資源文件避免HTTP訪問(wèn)
2.2 說(shuō)明以下部署描述文件元素的作用和語(yǔ)義
1. error-page
2. init-param
3. mime-mapping
4. servlet
5. servlet-class
6. servlet-mapping
7. servlet-name
8. welcome-file
2.3 為以下各個(gè)部署文件元素建立正確的結(jié)構(gòu)
1. error-page
2. init-param
3. mime-mapping
4. servlet
5. serlvet-class
6. servlet-name
7. welcome-file
2.4 解釋W(xué)ar文件的作用,并說(shuō)明War文件的內(nèi)容,以及如何構(gòu)建一個(gè)War文件
6.3 編寫(xiě)一個(gè)語(yǔ)法正確的JSP文檔(采用基于XML的語(yǔ)法)
部署的快樂(lè)
在這一章,主要考慮3個(gè)問(wèn)題:
(1)你把Web應(yīng)用中的東西放在那里?
靜態(tài)資源放在哪里?JSP頁(yè)面呢?Servlet類文件呢?JavaBean類文件呢?監(jiān)聽(tīng)者類文件呢?標(biāo)記文件呢?標(biāo)記處理器類呢?TLD呢?Jar文件呢?web.xml DD呢?還有一些東西我們不希望容器對(duì)外提供,這些東西放在哪里?(還句話說(shuō),Web應(yīng)用的哪些部分要得到保護(hù),不能由客戶直接訪問(wèn)?),另外,“歡迎”文件放在哪里?
(2)容器會(huì)在哪里找Web應(yīng)用中的東西?
客戶請(qǐng)求HTML頁(yè)面時(shí)容器會(huì)到哪里查找?JSP頁(yè)面呢?servlet呢?如果請(qǐng)求的并不是一個(gè)具體文件(比如,BeerTest.do)會(huì)怎么樣?容器在哪里查找標(biāo)記處理器類?容器去哪里找TLD?標(biāo)記文件?Jar文件?部署描述文件?Servlet依賴的其他類?容器在哪里查找“歡迎”文件?(顯然,如果這些問(wèn)題你都清楚了,那么以上第一條里的問(wèn)題對(duì)你來(lái)說(shuō)只是小菜一碟了。)
(3)客戶怎么請(qǐng)求Web應(yīng)用里的東西?
客戶要訪問(wèn)HTML頁(yè)面的話,改在瀏覽器里鍵入什么?要訪問(wèn)JSP頁(yè)面呢?servlet呢?如果請(qǐng)求的東西并不是具體文件會(huì)怎么樣?哪些地方客戶可以直接請(qǐng)求,哪些地方會(huì)限制客戶直接訪問(wèn)資源?如果客戶鍵入的只是一個(gè)目錄的路徑,而不是特定文件的路徑,會(huì)怎么樣?
Web應(yīng)用中的東西要放在哪里?
War文件
War文件只是Web應(yīng)用結(jié)構(gòu)的一個(gè)快照,采用了一種更可移植的壓縮形式(它實(shí)際上就是一個(gè)Jar文件)。建立War文件時(shí),就是要把整個(gè)Web應(yīng)用結(jié)構(gòu)(去掉Web應(yīng)用上下文目錄,也就是把WEB-INF之上的一級(jí)目錄去掉)壓縮起來(lái),并指定一個(gè).war擴(kuò)展名。不過(guò),還有一個(gè)問(wèn)題,如果沒(méi)有包括特定的Web應(yīng)用目錄(例如,BeerApp),容器怎么知道這個(gè)Web應(yīng)用的名/上下文呢?
這就取決于你的容器了。在Tomcat中,War文件的文件名就會(huì)成為Web應(yīng)用的名字!假設(shè)你把BeerApp部署為tomcat/webapps/BeerApp之下一個(gè)正常的目錄結(jié)構(gòu)。要把它部署為一個(gè)War文件,需要壓縮BeerApp目錄中的所有內(nèi)容(不過(guò),不包括BeerApp目錄本身),然后把得到的Jar文件命名為BeerApp.war。接下來(lái)將BeerApp.war文件放在tomcat/webapps目錄中。Tomcat會(huì)解開(kāi)War,使用War文件名創(chuàng)建Web應(yīng)用上下文目錄。
在WAR文件中,可以聲明庫(kù)依賴性。在一個(gè)WAR文件中,可以在META-INF/MANIFEST.MF文件中聲明庫(kù)依賴性,這樣在部署時(shí)就能檢查容器能否找到應(yīng)用依賴的包和類。
部署后的WAR文件的樣子如下:
使靜態(tài)內(nèi)容和JSP可以直接訪問(wèn)
部署靜態(tài)HTML和JSP時(shí),可以選擇是否允許從Web應(yīng)用外部直接訪問(wèn)。只要把文件放在WEB-INF下就能避免直接訪問(wèn),或者如果應(yīng)用部署為一個(gè)WAR文件,可以把不允許直接訪問(wèn)的文件放在META-INF下。
servlet映射
servlet映射可能是“假的”
servlet映射中的URL模式可能完全是假的(所以有的時(shí)候掃描就木得用了,因?yàn)槎际峭粋€(gè)頁(yè)面)。
有關(guān)servlet映射的重要規(guī)則
(1)容器首先查找完全匹配,再找目錄匹配,再是拓展名匹配。
(2)如果一個(gè)請(qǐng)求與多個(gè)目錄<url-pattern>匹配,容器會(huì)選擇最長(zhǎng)的匹配。換句話說(shuō),如果請(qǐng)求/foo/bar/myStuff.do,它就會(huì)映射到 /foo/bar/ * 而不會(huì)映射到 /foo/ * 。
DD中配置歡迎文件
注意不能以斜線開(kāi)頭(從第一個(gè)開(kāi)始,如果第一個(gè)沒(méi)找到就找第二個(gè),依此類推):
不僅僅對(duì)根目錄而言!
在DD中配置錯(cuò)誤頁(yè)面
注意:必須使用完全限定名(java.lang.Exception)
在DD中配置servlet初始化
目的是:部署的時(shí)候?qū)ervlet初始化完成,可以隨時(shí)調(diào)用service方法。
還需要注意的(優(yōu)先級(jí)):
建立一個(gè)XML兼容的JSP:JSP文檔
稍作了解一下:
EJB有關(guān)的DD標(biāo)記
EJB現(xiàn)在都不怎么用了!因?yàn)樘亓考?jí)了!稍作了解!
注意點(diǎn):
JNDI的DD標(biāo)記
沒(méi)看懂是什么意思!!
mime-mapping的DD標(biāo)記
建立擴(kuò)展名(extension)和一個(gè)mime類型(mime-type)之間的映射。
本章完。這章只是大概的過(guò)了一遍!
總結(jié)
以上是生活随笔為你收集整理的Head First JSP---随笔九(部署Web应用)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Head First JSP---随笔八
- 下一篇: 一文讲透B端产品/C端产品、SaaS/P