看來你可能已經過時了這一點。 start.jar
只是啓動服務器的JAR文件。您可以輕鬆地將Jetty的靜態內容託管出來。我不確定你的具體要求,但爲了舉例,我只是假設你有一個簡單的網頁和一些資源。你的實現可能看起來像這樣。
裏面的碼頭9.4.5.v20170502目錄 - 也稱爲JETTY_HOME(你可以瞭解Jetty_Home vs Jetty_Base here),你會發現以下目錄:
斌示範基地等的lib日誌模塊資源的webapps
這些是事實的標準,不應該修改(儘管如果需要,演示版可以完全刪除)。您需要創建您自己的Jetty_Base目錄來託管您的內容,我們將其稱爲stackoverflow
。值得注意的是,一個Jetty_Base可以存在於任何地方,爲了這個例子的方便,我只是把它放在這裏。
在stackoverflow
目錄內,你會發現什麼都沒有開始,所以我們需要啓用一些模塊來填充我們的Jetty_Base
。現在,我不知道你計劃用這個網絡服務器做什麼,所以我會保持最小 - 足以承載內容。在這個目錄裏面運行:
> java -jar ../start.jar --create-startd
MKDIR : ${jetty.base}/start.d
INFO : Base directory was modified
這將爲我們所有的模塊文件的目錄start.d住,這使得修改和配置的東西一件輕而易舉的事(儘管這個例子一切的緣故會保留默認)。現在我們需要添加啓用服務器功能的模塊。
> java -jar ../start.jar --list-modules
我不打算在這裏貼上整個列表,而是啓用以下:
> java -jar ../start.jar --add-to-start=server,client,deploy,http,webapp,jsp
INFO : webapp initialized in ${jetty.base}/start.d/webapp.ini
INFO : server initialized in ${jetty.base}/start.d/server.ini
INFO : security transitively enabled
INFO : apache-jsp transitively enabled
INFO : servlet transitively enabled
INFO : jsp initialized in ${jetty.base}/start.d/jsp.ini
INFO : jndi transitively enabled
INFO : client initialized in ${jetty.base}/start.d/client.ini
INFO : http initialized in ${jetty.base}/start.d/http.ini
INFO : annotations transitively enabled
INFO : plus transitively enabled
INFO : deploy initialized in ${jetty.base}/start.d/deploy.ini
MKDIR : ${jetty.base}/webapps
INFO : Base directory was modified
這將使我定義的所有模塊,可以通過運行查看可用模塊的完整列表(服務器,客戶端,部署,http,webapp,jsp)以及它們運行所需的任何依賴項以及任何必需的文件夾(如webapps)。
現在,我創建了一個非常小的webapp,名爲示例。我已經先行一步,並把它移到到webapps目錄我們stackoverflow
Jetty_Base內:
> tree
.
├── start.d
│ ├── client.ini
│ ├── deploy.ini
│ ├── http.ini
│ ├── jsp.ini
│ ├── server.ini
│ └── webapp.ini
└── webapps
├── example
│ ├── images
│ │ ├── jetty-header.jpg
│ │ └── webtide_logo.jpg
│ ├── index.html
│ └── jetty.css
└── example.xml
我有我的這個Web應用程序命名爲example.xml
,它僅支持靜態內容創建方面的XML文件,它是非常簡單的:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_3.dtd">
<Configure id="exampleApp" class="org.eclipse.jetty.webapp.WebAppContext">
<Set name="contextPath">/example</Set>
<Set name="war"><Property name="jetty.webapps" default="."/>/example</Set>
</Configure>
此配置web應用程序,這樣,當我運行服務器,我可以瀏覽到,在這種情況下,localhost:8080/example
,看到我的內容。現在我所要做的就是運行我的服務器。從stackoverflow目錄中:
java -jar ../start.jar
2017-06-08 10:36:32.300:INFO::main: Logging initialized @427ms to org.eclipse.jetty.util.log.StdErrLog
2017-06-08 10:36:32.477:INFO:oejs.Server:main: jetty-9.4.5.v20170502
2017-06-08 10:36:32.494:INFO:oejdp.ScanningAppProvider:main: Deployment monitor [file:///Users/example/installs/repository/jetty-distribution-9.4.5.v20170502/stackoverflow/webapps/] at interval 1
2017-06-08 10:36:32.633:INFO:oeja.AnnotationConfiguration:main: Scanning elapsed time=26ms
2017-06-08 10:36:32.668:INFO:oejs.session:main: DefaultSessionIdManager workerName=node0
2017-06-08 10:36:32.668:INFO:oejs.session:main: No SessionScavenger set, using defaults
2017-06-08 10:36:32.669:INFO:oejs.session:main: Scavenging every 600000ms
2017-06-08 10:36:32.692:INFO:oejsh.ContextHandler:main: Started [email protected]{/example,file:///Users/example/installs/repository/jetty-distribution-9.4.5.v20170502/stackoverflow/webapps/example/,AVAILABLE}{/example}
2017-06-08 10:36:32.713:INFO:oejs.AbstractConnector:main: Started [email protected]{HTTP/1.1,[http/1.1]}{0.0.0.0:8080}
2017-06-08 10:36:32.714:INFO:oejs.Server:main: Started @840ms
而現在你有一個服務器啓動並運行和內容被服務。我希望這有幫助。起初看起來似乎很壓倒,但一旦你弄髒了手,它並不是那麼糟糕。我建議在official documentation上多讀一些。
謝謝你對這個病人和詳細的答案。官方文檔比官方文檔更有幫助,這些文檔假定來自深度Java社區。現在,有沒有辦法創建一個'jetty_base'目錄,但沒有任何'webapp'的複雜性? Can Jetty可以運行類似的東西,還是需要在Java世界中如此常見的多餘的迷宮文件夾?我不喜歡那些「jsp.ini」等。只是一個html,js,css文件夾。謝謝! –
我寫了大量的官方文檔,因此我會將注意事項爲了清晰起見而進行審查。至於'webapps'文件夾和ini文件,它們是必需的。各種ini文件是服務器的配置機制,並允許您自定義Jetty以滿足您的需求。 'webapps'文件夾是Web應用程序的默認位置,但您可以在上面激活的'stackoverflow/start.d/deploy.ini'文件中更改此位置。 – Walkerwatch
從技術上講,您可以在不創建基礎的情況下運行所有內容,並且只使用命令行中每個模塊的所有默認值,但我不會推薦它。例如:'java -jar /path/to/start.jar --module = server,client,deploy,http,webapp,jsp jetty.deploy.monitoredDir =/relative/path/to/webapp'。請注意,這樣做只會啓用用於*運行服務器的模塊,並且不會創建配置文件。 *不推薦用於生產。 – Walkerwatch