新一輪學習——Jetty官方文檔及源碼閱讀(二)

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模塊,而後設置。詳見下一講發佈架構。

相關文章
相關標籤/搜索