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