2017-06-07 98 views
0

我已經在osx上使用自制軟件安裝Jetty。碼頭是在通常的文件夾中:碼頭服務純html和JS代碼

/usr/local/Cellar/jetty/9.4.5.v20170502 

但是,我們不打算將此用於任何與Java相關的任何事情。這只是我們的要求,我們將要生產的Web服務器是Websphere。我們的代碼是純html和一些JS。只有靜態文件。網絡上的所有教程都需要修改XML文件併爲java應用程序設置複雜的文件夾結構。我們不需要這些。我們只需要將html/js文件放在某個特定的位置。

有沒有簡單的方法來做到這一點?我們是否需要爲這個簡單的任務創建一個start.jar?我們如何通過Maven或其他方式創建WAR包?希望得到這個開發環境的簡單指針。謝謝!

回答

1

看來你可能已經過時了這一點。 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上多讀一些。

+0

謝謝你對這個病人和詳細的答案。官方文檔比官方文檔更有幫助,這些文檔假定來自深度Java社區。現在,有沒有辦法創建一個'jetty_base'目錄,但沒有任何'webapp'的複雜性? Can Jetty可以運行類似的東西,還是需要在Java世界中如此常見的多餘的迷宮文件夾?我不喜歡那些「jsp.ini」等。只是一個html,js,css文件夾。謝謝! –

+0

我寫了大量的官方文檔,因此我會將注意事項爲了清晰起見而進行審查。至於'webapps'文件夾和ini文件,它們是必需的。各種ini文件是服務器的配置機制,並允許您自定義Jetty以滿足您的需求。 'webapps'文件夾是Web應用程序的默認位置,但您可以在上面激活的'stackoverflow/start.d/deploy.ini'文件中更改此位置。 – Walkerwatch

+0

從技術上講,您可以在不創建基礎的情況下運行所有​​內容,並且只使用命令行中每個模塊的所有默認值,但我不會推薦它。例如:'java -jar /path/to/start.jar --module = server,client,deploy,http,webapp,jsp jetty.deploy.monitoredDir =/relative/path/to/webapp'。請注意,這樣做只會啓用用於*運行服務器的模塊,並且不會創建配置文件。 *不推薦用於生產。 – Walkerwatch