做專案經常遇到需要開發Java應用,我喜歡用Jetty進行開發、部署,主要是由於Jetty的輕量級。
Jetty 專案主頁:http://www.eclipse.org/jetty/, 最新版9.30剛剛新增對 HTTP/2的支援。
但是Jetty在Windows下部署不是很方便,需要用命令列。
每次都要使用命令列,很是麻煩,於是我打算做一個Jetty的小工具,把命令列操作封裝一下,可以在GUI中啟動、停止Jetty,可以配置常用引數等。
完成之後的介面如下:
編譯好的可執行檔案:
JettyMonitor-v0.1-alpha-x64.7z JettyMonitor-v0.1-alpha-x86.7z
注意需要安裝.NET Framework 4.5.2:
開發人員安裝Dev Pack:http://www.microsoft.com/en-us/download/details.aspx?id=42637
終端使用者安裝執行時:http://www.microsoft.com/en-us/download/details.aspx?id=42642
Java Home :經常做Java開發的朋友一看就知道是JDK的目錄。
這些目錄在點選儲存配置後儲存在配置檔案裡:
第一次執行時還可以從環境變數中查詢:
EnvironmentUtil 是一個環境變數幫助類,便於對環境變數進行各種操作,具體細節請參見原始碼。
Jetty Home:指解壓縮後的Jetty目錄:
那麼Jetty Base 是什麼呢?官方文件上有介紹:http://www.eclipse.org/jetty/documentation/current/quickstart-running-jetty.html
A jetty base allows the configuration and web applications of a server instance to be stored separately from the jetty distribution, so that upgrades can be done with minimal disruption.
即Jetty Base 目錄是一個應用的單獨儲存目錄,可以與Jetty Home主目錄的配置不相同。這樣帶來了一個顯著的好處,以後升級Jetty版本時對原有應用的影響很小。
Jetty Base 是Jetty 9.1版本才引入的,非常新。
Jetty 的官方部署建議是新建立一個Jetty Base部署,而不是把war包等直接放到Jetty Home主目錄的webapps目錄中。
本地埠是Jetty的Web埠,預設是8080,。遠端埠是遠端除錯用的,可以不開啟。
常規執行的命令是:java -jar start.jar jetty.http.port=8080
藉助JVM進行遠端除錯的命令是:java -Xdebug -agentlib:jdwp=transport=dt_socket,address=9000,server=y,suspend=n -jar start.jar jetty.http.port=8080
我們來整理一下Jetty部署的步驟:
1、選擇一個目錄Jetty Base目錄中,進入該目錄。
2、初始化Jetty Base目錄:java -jar %JETTY_HOME%/start.jar --add-to-startd=http,deploy
--add-to-startd 引數負責初始化需要的Jetty模組,Jetty有很多模組,位於:%JETTY_HOME%/modules
根據需要進行新增,我是用Spring MVC開發的,新增了這些模組:--add-to-startd=http,deploy,spring,servlet,servlets,webapp,jsp,jstl,server
除了--add-to-startd命令,Jetty還有很多命令,可以輸入:java –jar start.jar –help 檢視:
初始化完成後Jetty Base目錄下生成兩個目錄:
其中start.d儲存模組的配置檔案:
webapps用來放置釋出的war包等:
3、執行java –jar start.jar啟動Jetty
我把這三個步驟整合到一個批處理中,便於用程式處理:
cd /d "D:\Publish\JettyBase"
"C:\Program Files\Java\JDK8\bin\java.exe" -jar "D:\Developer\Server\Application\Jetty\Jetty9\start.jar" --add-to-startd=http,deploy,spring,servlet,servlets,webapp,jsp,jstl,server
"C:\Program Files\Java\JDK8\bin\java.exe" -Xdebug -agentlib:jdwp=transport=dt_socket,address=9000,server=y,suspend=n -jar "D:\Developer\Server\Application\Jetty\Jetty9\start.jar" jetty.http.port=8080
啟動Jetty時使用Process執行批處理:
注意要啟用重定向標準輸出與標準錯誤,才能獲取到批處理的執行結果:
啟動成功:
開啟瀏覽器測試一下:
在IDE中可以很方便的設定遠端除錯:
可以直接在配置命令列中編輯批處理的內容,編輯完後儲存:
配置檔案儲存在小工具同一目錄中:
停止Jetty時需要注意,因為我們使用Process執行批處理啟動的Jetty,即用cmd.exe 啟動了Jetty的Java程式,Java程式作為cmd的子程式駐留,不能直接用process.Close()關閉。
這裡我們再用Process執行dos命令來殺掉所有的Jetty程式:TASKKILL /F /PID xxx /T
/F 是強制殺掉,/PID 指定程式ID, /T 是殺掉所有子程式:
因此這樣來停止Jetty:
執行結果:
小結:
這樣,我們就可以不用在純命令列介面中操作了,而且配置可以儲存、自定義,可以檢視啟動、停止日誌等。
修改一下配置也可以適用於其他Java伺服器。