1. 程式人生 > >jetty部署WEB程式上下文啟動兩次,定時任務啟動兩次

jetty部署WEB程式上下文啟動兩次,定時任務啟動兩次

將web程式部署到webapps目錄下,導致定時任務啟動兩次,後來檢視上下文啟動,發現真的啟動了兩次,contextpath如下:

1. /

2. mycms

我到webapps目錄結構如下:

mycms/

website.xml

其中website.xml檔案是jetty的xml部署描述符,因此jetty啟動後會啟動兩次,一次是website.xml部署檔案啟動的,另一次是jetty容器自動識別webapps/mycms/WEB-INF/web.xml標準Servlet應用啟動的。

解決方法:

1. 更改部署方式,刪除website.xml部署描述檔案,重新命名mycms資料夾為root,這樣啟動的contextpath為“/”

2. 刪除mycms資料夾,配置標準的war包,將website.xml檔案中的war屬性指向war包所在路徑

P.S.: jetty部署方式(摘自參考資料)

 jetty支援多種部署方式,比如servlet規範中的滿足以上內容條件的war包,jetty自己提供的xml部署描述符,或者直接就是一個滿足servlet規範的資料夾(war包本來也是要解壓的)

(1)簡單部署,直接將war包或者解壓的war目錄放入jetty.home/webapps目錄下,然後啟動,jetty的部署掃描器會找到部署的內容,然後自動設定contextPath為該war包或war目錄的名字即可完成部署,但要注意war的名字,當war的名字為root.war或者資料夾的名字為war的時候,contextPath就是root,在瀏覽器中訪問的時候就不需要輸入contextPath了,而直接訪問根目錄,比如http://localhost:8080/就可以訪問到root.war這個應用了,當你的jetty只需要部署這一個應用,將其命名為root.war還是可以滴.

    當你需要使war包的名字和contextPath不同,這時候怎麼辦呢?就是第二種方式:

(2)XML部署描述符,這種方式就是在webapps目錄中不放除了xml檔案描述符之外的任何war包或者war目錄,jetty部署掃描器能自動載入到這個xml檔案,然後通過xml檔案中定義的WebAppContext例項中的war和contextPath屬性來找到你的war包或者war目錄,比如這樣一個xml檔案:

    <Configure class="org.eclipse.jetty.webapp.WebAppContext">

      <Set name="contextPath">/mycontext</Set>

      <Set name="war">/home/wilsonp/myapp/myapp.war</Set>

    </Configure>

(3)war包部署

參考資料: