Jetty配置指南java
(1) 發佈項目到Jettyweb
剖析Web Application數據庫
web application能夠將全部的文件放到一個目錄樹並捆綁到一個War發佈包。瀏覽器
/WEB-INF/:用於存放不想讓用戶經過瀏覽器直接訪問的資源服務器
/WEB-INF/web.xml:發佈者用於定義各類web application行爲和參數的地方架構
/WEB-INF/classes/:編譯過的java類文件app
/WEB-INF/lib/:jar包存放目錄eclipse
WebAppClassloader會首先從/WEB-INF/classes中加載文件,以後再從/WEB-INF/lib/中加載。webapp
自動化Web Applicationide
發佈web application的大多數技術就是圍繞着放置一個war或者war的解壓文件們到${jetty.base}/webapps/目錄,這樣Jetty的發佈掃描器(deployment scanner)就會檢測到它們並將其發佈到具備一樣名稱的Context path下。
配置特定的web application發佈項目
jetty發佈描述文件**.xml經過建立一個ContextHandler實例來發布Jetty
默認狀況下,Jetty查看$JETTY_HOME/webapps目錄下的xml文件。
這個xml文件會配置WebAppContext類,其中有兩個節點,分別爲war和contextPath。
使用SystemProperty和Property元素均可以。舉個例子:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_3.dtd">
<Configure class="org.eclipse.jetty.webapp.WebAppContext"> <Set name="contextPath">/wiki</Set> <Set name="war">/opt/myapp/myapp.war</Set> </Configure> |
使用SystemProperty指定myapp.home=/opt/myapp,那麼上述文件變爲下面這個樣子:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_3.dtd"> <Configure class="org.eclipse.jetty.webapp.WebAppContext"> <Set name="contextPath">/wiki</Set> <Set name="war"><SystemProperty name="myapp.home"/>/myapp.war</Set> </Configure> |
發現這樣寫的好處了嗎?那就是每次根目錄變化的時候,只要從新指定myapp.home的值就能夠,改動成本降到了最低。
注:爲了保證你的web.xml文件被檢測到,你須要設置下validateXml屬性值爲true。以下:
<Call name="setAttribute"> <Arg>org.eclipse.jetty.webapp.validateXml</Arg> <Arg type="Boolean">true</Arg> </Call> |
其餘配置項:
extractWAR:不容許解壓war
因爲web.xml是在發佈描述文件以後進行加載的,因此它的屬性會覆蓋發佈描述文件中的。
下面的配置文件檢索了servlet content並設置了一個初始參數。
下面是使用web.xml覆蓋描述文件:
這個特性使得不破壞war文件的狀況下增長參數或servlet mappings。
下面是配置webContext的同時又配置了一個數據庫鏈接池,若是web.xml不包含這個data source的引用,包含它能夠覆蓋以前的。
注:WebAppContext的javadoc是一個不錯的信息來源。
發佈WebAppContext過程:
org.eclipse.jetty.webapp.Configuration接口有不少實現類,每一個類都對應一個特定的功能。
默認的配置類:
剖析配置類:
一個配置類在webAppContext的生命週期中會經歷5次調用:
preConfigure-resource,configure-class,postConfigure-clear resource,deconfigure-undo resource,destroy-delete war
經過建立額外的configuration來擴展容器支持:
下面列舉兩個例子:
a JNDI configuration
JNDI在web應用中檢視容器和環境的鏈接資源情況,使用了兩個額外的配置:
這兩個配置必須在org.eclipse.jetty.webapp.JettyWebXmlConfiguration以前按照順序插入進來。
b Annotation Configuration
這裏只須要一個額外的configuration類來提供servlet註解的檢視:
設置配置列表:
a 直接在webAppContext中配置,以下:
b 經過deployer:
若是使用了deployer,則須要在WebAppProvider中設置這個列表:
配置靜態內容的發佈過程:
須要用到ResourceHandler
熱部署:
若是一個web application或者一個context descriptor加入到目錄中,Jetty’s Deployment(DM)發佈新的context。若是context descriptor更新或者建立了,DM會經歷中止,從新配置,從新發布過程。若是這個context移除了,DM就會停掉它並將其移出服務器。
配置WebAppProvider屬性時下面行爲能夠被控制:
monitoredDirName:發佈web application的目錄
scanInterval:檢視monitoredDirName的間隔時間(秒)。0表明不支持熱部署,web application只能在啓動時發佈。
默認地址是${jetty.home}/etc/jetty-deploy.xml。
首先配置開啓deploy模塊,而後設置。詳見下一講發佈架構。