jetty服務器的安裝和部署、新增到開機啓動服務
- Jetty的首頁地址是http://www.mortbay.org/jetty/,點擊Downloads進入下載介紹頁面,因爲Jetty7以後,託管服務有Eclipse接替,因此jetty6.1以前(包含6.1)繼續由Codehaus提供下載服務,在該頁面的下方有以下信息:
-
-
-
-
-
- 版本 Java HTTP Servlet JSP Status Notes
- Jetty-8 eclipse 1.6- HTTP/1.1 RFC2616 3.0 2.2 Development Standardized async
- Jetty-7 eclipse 1.5- HTTP/1.1 RFC2616 2.5 2.1 Almost stable org.eclipse.jetty
- Jetty-6.1 1.4-1.6 HTTP/1.1 RFC2616 2.5 2.1 or 2.0 Stable Async SSL, AJP, cometd, testing
- Jetty-6 1.4-1.5 HTTP/1.1 RFC2616 2.5 2.1 or 2.0 Deprecated Continuations, IOC, NIO, dynamic buffers, smaller, faster, better
- Jetty-5.1 1.2-1.5 HTTP/1.1 RFC2616 2.4 2.0 Stable J2EE 1.4 Compliance tested, optimizations, geronimo integration.
- Jetty-5.0 1.2-1.4 HTTP/1.1 RFC2616 2.4 2.0 Deprecated Schema, JettyPlus
- Jetty-4.2 1.2-1.4 HTTP/1.1 RFC2616 2.3+ 1.2 Mature JettyPlus
- Jetty-4.1 1.2-1.4 HTTP/1.1 RFC2616 2.3 1.2 Deprecated JAXP1.1, AJP13(mod_jk)
- Jetty-4.0 1.2 HTTP/1.1 RFC2616 2.3 1.2 Deprecated
- Jetty-3.1 1.2 HTTP/1.1 RFC2068 2.2 1.1 Ancient JMX
- Jetty-3.0 1.2 HTTP/1.1 RFC2068 2.2 1.1 Fossilized
- Jetty-2.4 1.1 HTTP/1.0 RFC1945 2.1 1.0 Legendary
- Jetty-1.0 1.0 HTTP/1.0 RFC1945 - - Mythical
-
-
-
-
-
-
-
-
-
- 本書討論的Jetty版本是6.1,也是目前使用最多的穩定版本,咱們到http://dist.codehaus.org/jetty/jetty-6.1.22/下載6.1系列最新的6.1.22版本:
-
-
- jetty-6.1.22-src.zip 16-Nov-2009 23:04 5.7M
- jetty-6.1.22.zip 16-Nov-2009 23:10 24M
-
-
- 咱們下載24M大小的jetty-6.1.22.zip文件,另一個文件有5M是由於只包含了Jetty源碼和實例源碼,jetty-6.1.22.zip文件包包含了 api文檔,實例代碼、jetty源碼、發行Jar文件、各操做系統下的啓動腳本和其餘部分依賴包。也許你會有疑問,我以前介紹Jetty的時候說Jetty體積很是小,是的沒錯!Jetty核心文件的大小隻有約700K!
-
-
-
-
- 2.2 安裝
- 要運行Jetty的首要條件固然是須要安裝JDK了,建議使用j2se 1.5以上的版本,關於JDK或者JRE的安裝,爲了環保這裏就再也不花費篇章介紹了,請參考其餘網絡資料。
-
-
-
- 其實Jetty所謂的安裝過程也就是將下載的文件解壓到指定的目錄,而後根據不一樣的操做系統來配置環境變量而已。
-
-
-
- 之後講解如何從maven源碼編譯等。
- 2.3 使用java命令啓動
- 只要在支持j2se的平臺的操做系統下,jetty均可以運行。因此咱們先介紹jetty提供的跨平臺的服務啓動方式。
-
- 2.3.1 快速啓動
- 打開控制檯,定位到jetty的安裝目錄,執行命令:
-
- java -jar start.jar etc/jetty.xml
-
-
-
- 提示:關於如何執行java的jar文件請查找其餘資料。
-
-
- start.jar 後面內容是傳遞給start.jar的參數,多個參數用空格隔開。
-
-
- 參數內容能夠有如下幾種:
- --help 查看幫助信息
- --stop 中止服務,下節中會講到
- --version 查看當前jetty版本信息
- 其餘:做爲Jetty服務配置文件
-
-
- 咱們看到上條命令指定參數內容爲etc/jetty.xml,它實際指向一個服務配置文件,該文件是用來設置jetty服務啓動的系統配置信息。好比監聽端口,發佈某個目錄下面的web應用,jndi的配置等等,這些將在後續章節詳細描述。固然服務配置文件能夠是多個,好比:
-
-
-
- java -jar start.jar etc/jetty.xml etc/jetty-plus.xml
-
-
-
- 這條命令就指定了兩個服務配置文件,etc/jetty.xml和etc/jetty-plus.xml。
-
-
- 在後續的章節中術語「服務配置文件」就是指的這些文件。
-
- 使用瀏覽器打開地址 http://localhost:8080/ ,你將會看到jetty的默認示例站點。
-
-
-
- 2.3.2 中止服務
- 在剛纔啓動jetty的終端窗口裏面按住ctrl-c鍵便可。
-
-
-
- 不過你能夠這樣來啓動
-
-
-
- java -DSTOP.PORT=8009 -DSTOP.KEY=secret -jar start.jar
-
-
-
-
- jetty啓動後會在本地監聽你指定的端口8009,並將在驗證下次關閉命令的密碼secret。如今再經過命令:
-
-
- java -DSTOP.PORT=8009 -DSTOP.KEY=secret -jar start.jar --stop
-
-
-
- 就能夠在本機的另一個終端窗口來中止jetty服務。在linux系統中,你能夠先將jetty進程轉移到後臺執行,而後再經過命令行來中止Jetty服務。
-
-
- 哦,看了上面的介紹你或許覺得jetty啓動和關閉是如此麻煩,一點也不符合Jetty小巧玲瓏的氣質。其實Jetty爲咱們準備了各個操做系統中快捷的方式。不過記住無論何種方式最終都是經過start.jar來啓動jetty服務的。
-
-
- 2.3.3 start.jar深刻探討
- 初學者能夠先跳過本節。本節討論start.jar模塊的做用和細節。start.jar讓jetty各個不一樣的組件聯合起來工做,使得jetty看上去像一個服務器軟件,同時start.jar也不過是jetty的其中一個組件而已。瞭解start.jar工做原理後,咱們就能夠知道#jetty_home/lib下面那麼多文件夾下面的jar文件是如何配被選擇性地加入到classpath中去的。
-
-
- Jetty start 組件提供了跨平臺的啓動方式。 經過啓動命令 java -DDEBUG=true -jar start.jar [jetty.xml ... ] 能夠看到啓動過程的debug日誌信息。
-
-
- 看看Jetty start 在啓動過程當中都作了哪些操做:
-
-
-
- 自動設置正確的 jetty home目錄
- 根據JDK版本配置classpath,好比jdk1.5版本以前的版本只能使用jsp2.0規範所需的jar包
- 根據設定的classpath,構建好一個類加載器。再根據設定的main class來調用指定main class的main方法
- 因而可知start組件是至關獨立的組件,甚至咱們能夠在本身的項目裏面單獨使用該組件控制程序的啓動。
-
-
-
- start.config語法
- Jetty start是由一個名叫start.config的配置文件控制的,這個文件存在在start.jar裏面,路徑是org/mortbay/start/start.config。熟悉這個配置文件的內容會對jetty做爲服務器的啓動過程有更好的瞭解。最重要的是咱們知道jetty的classpath的設置和如何經過設置系統變量來把外部類路徑增長到jetty中。
-
-
- start.config的格式是每一行一條指令,若是以#開頭則爲註解行。指令的後面是執行條件,若是條件不符合則忽略。
-
- 指令有以下幾種狀況:
-
- 以.path結尾: 若是.path前面的字符串存在且長度大於0,則將該類路徑加入到系統類路徑中
- 包含 「=」 : 執行System.setProperty(property,value)調用,「=」左邊爲property,右邊爲value
- 以.class結尾:若是".class"前面有值的話,就設定爲Main class
- 以.xml結尾: 若是指定的xml文件存在的話就做爲jetty服務的啓動配置文件之一
- 以/*結尾: 指定目錄下面的因此jar或者zip文件,被加入到classpath中
- 以/**結尾: 指定遞歸該目錄下面的因此jar或者zip文件,被加入到classpath中
- 以/結尾: 指定的目錄做爲classpath的一部分
- 其餘: 做爲一個文件加入到classpath中
- 關於條件:
- "<",">"," <=",">=","==","!=" 是條件的比較操做符,從左到右執行
- exists 檢測緊跟着後面的文件是否存在
- available 檢測緊跟着後面的class是否存在
- !表示非;always表示true
- 變量nargs表示傳遞給start.jar的參數數量
- 變量java表示java版本
- 其餘規則:
- 全部的指令按行從上到下執行
- 若是一個文件或者目錄因爲條件被否決,沒有被加入到類路徑中,那麼即便後續指令中包含了該文件或者目錄,那麼一樣不會被加入到類路徑中
- 指令或者條件中, $(...) 表示獲取系統屬性,即一次System.getProperty()調用。如$(jetty.class.path).path指令,當系統屬性「jetty.class.path」沒有設置,那麼運行時實際指令的值位 「.path」。若是設置系統屬性「jetty.class.path」的值爲"/usr/local/jarlib",那麼運行時實際指令值爲 "/usr/local/jarlib.path"
-
-
- start.config文件
- $(jetty.class.path).path always
- $(jetty.lib)/** exists $(jetty.lib)
-
-
-
-
- # Try different settings of jetty.home until the jetty.jar is found.
- jetty.home=. ! exists $(jetty.home)/start.jar
- jetty.home=.. ! exists $(jetty.home)/start.jar
- jetty.home=/home/jetty ! exists $(jetty.home)/start.jar
- jetty.home=/C:/jetty ! exists $(jetty.home)/start.jar
- jetty.home=. ! exists $(jetty.home)/start.jar
-
-
- # The main class to run
- org.mortbay.xml.XmlConfiguration.class
- $(start.class).class
-
-
- # The default configuration files
- $(jetty.home)/etc/jetty.xml nargs == 0
-
-
- # Set the jetty classpath
- $(jetty.home)/lib/* always
-
-
- # Set the classpath for the supporting cast
- $(jetty.home)/lib/jsp-2.1/* java >= 1.5
- $(jetty.home)/lib/jsp-2.0/* ! available org.apache.jasper.servlet.JspServlet
- $(jetty.home)/lib/management/*
- $(jetty.home)/lib/management/mx4j/* java < 1.5
- $(jetty.home)/lib/naming/*
- $(jetty.home)/lib/plus/*
- $(jetty.home)/lib/xbean/*
- $(jetty.home)/lib/wadi/*
- $(jetty.home)/lib/grizzly/*
- $(jetty.home)/lib/annotations/* java >= 1.5
-
-
- $(jetty.home)/lib/jre1.5/** java >= 1.5
-
-
- # Recursively add all jars and zips from the ext lib
- $(jetty.home)/lib/ext/** always
-
-
- # Try some standard locations for anything missing.
- /usr/share/java/ant.jar ! available org.apache.tools.ant.Main
-
-
- # Add a resources directory if it is there
- $(jetty.home)/resources/
-
-
-
-
-
- 2.4咱們能夠學到什麼
-
-
-
-
- 2.5 Windows系統下啓動和關閉控制
-
- jetty利用Win32Wrapper工具(http://wrapper.tanukisoftware.org)使得在window系統上能夠以控制檯或者Window服務的方式運行jetty程序,使用起來很是方便。
-
-
- 在 $jetty_home/bin目錄下有以下幾個相關文件:Jetty-Service.exe , jetty-service.conf。雙擊Jetty-Service.exe 文件,便可以控制檯的方式來運行jetty了。jetty-service.conf 顯然是配置文件了,一會詳細介紹。
-
-
- (之後咱們用 $jetty_home來表示Jetty的安裝目錄)
-
-
-
- 註冊Windows服務
- 打開命令行,轉到 $jetty_home/bin 目錄,執行命令:
-
-
-
- E:\jetty-6.1.22\bin>Jetty-Service.exe --install jetty-service.conf
- wrapper | Jetty6-Service installed.
-
-
- 啓動服務
- 執行命令: Jetty-Service.exe --start jetty-service.conf
- 中止服務
- 執行命令:Jetty-Service.exe --stop jetty-service.conf
- 註銷服務
- 執行命令:Jetty-Service.exe --remove jetty-service.conf
-
-
-
-
- 你在成功註冊Windows服務後,能夠修改服務讓其隨系統自動啓動。
-
-
-
- jetty-service.conf 配置文件
- wrapper.java.classpath.1=../lib/win32/*.jar
-
- wrapper.java.classpath.2=../lib/*.jar
- wrapper.java.classpath.3=../start.jar
- wrapper.java.library.path.1=../lib/win32/
- #wrapper.java.additional.n能夠設置jvm參數
- wrapper.java.additional.1=-Djetty.home=../ #設置系統屬性jetty.home,指定jetty根目錄
- wrapper.java.additional.2=-Djetty.logs=../logs #設置系統屬性jetty.logs
- wrapper.java.initmemory=3 #jvm初始內存大小
- wrapper.java.maxmemory=64 #jvm內存大小
- wrapper.java.mainclass=org.mortbay.jetty.win32service.JettyServiceWrapperListener
- #wrapper.app.parameter.n能夠設置應用程序參數,及 -jar start.jar 後面的參數
- #例如 wrapper.app.parameter.1=../etc/jetty.xml ../etc/jetty-ajp.xml
- wrapper.app.parameter.1=../etc/jetty.xml
- wrapper.console.format=PM
- wrapper.console.loglevel=INFO
- wrapper.logfile=../logs/jetty-service.log #輸出到System.out到內容將同時被記錄在該文件
- wrapper.logfile.format=LPTM
- wrapper.logfile.loglevel=INFO
- wrapper.logfile.maxsize=0 #jetty-service.log文件的最大尺寸,0表示不限制
- wrapper.logfile.maxfiles=0 #當限制文件大小時,容許存在的最多文件個數
- wrapper.syslog.loglevel=NONE
- wrapper.ntservice.name=Jetty
- wrapper.ntservice.displayname=Jetty6-Service
- wrapper.ntservice.description=Jetty is an open-source, standards-based, full-featured web server implemented entirely in java
- wrapper.ntservice.starttype=AUTO_START
- wrapper.ntservice.interactive=false
-
-
- #Win32Wrapper中定義一個觸發器,當控制拋出OutOfMemoryError錯誤,則重啓Jetty服務
- wrapper.filter.trigger.1=java.lang.OutOfMemoryError
- wrapper.filter.action.1=RESTART
-
-
- 2.6 Linux系統下啓動和關閉控制
- 在$jetty_home/bin目錄下,Jetty爲咱們提供了一個名爲jetty.sh的shell腳本文件,在linux環境下咱們用這命令 ./jetty.sh start 和 .jetty.sh stop 命令來啓動和關閉jetty。jetty.sh在啓動Jetty後,將jvm的系統進程ID保存在一個$JETTY_RUN/jetty.pid的文件裏面,而後在收到stop命令後讀取pid來關閉相應進程。
-
- 在jetty.sh裏面還能夠定製變量來控制jetty,如指定JAVA_HOME目錄、指定jvm最大內存、指定pid文件的位置等。
-
- 2.6.1 系統變量的設置
- 提示:在編輯變量的時候「=」兩邊千萬不要有空格。
-
-
- 下面逐個介紹各變量的做用:
-
-
-
- JAVA_HOME
- 指定Java安裝目錄。當你須要指定特定位置的jdk或者jetty搜索不到java安裝目錄時,須要設定該變量。
-
- 例如: JAVA_HOME=/usr/local/java/jdk1.5.0_10/
-
-
- JAVA
- 執行java命令。默認值爲 $JAVA_HOME/bin/java。通常不須要設置。
-
-
-
- JAVA_OPTIONS
- JVM的可選參數。你能夠利用這個選項配置內存大小、系統變量等等其餘參數,這個變量很是有用。
-
-
-
- 例如:JAVA_OPTIONS="-Xmn128M -Xms256M -Xmx1024M
- -Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.EPollSelectorProvider"
-
-
- JETTY_RUN
- jetty.pid文件的存放目錄。默認值爲 /var/run, /usr/var/run 或 /tmp 三者之一。若是你須要在一臺服務器上啓動多個安裝目錄下的jetty,那麼必須設定該變量以免共享同一pid文件而形成衝突。建議設置爲各個安裝目錄下面新建的run目錄。
-
-
-
- JETTY_PID
- pid文件的路徑。默認值 $JETTY_RUN/jetty.pid。通常不須要設置。
-
-
-
- JETTY_ARGS
- 傳遞給jetty的參數。值 java -jar start.jar 後面的部分。
-
-
-
- JETTY_HOME
- jetty安裝目錄。雖然jetty嘗試搜索jetty安裝目錄,可是咱們仍是建議設定該變量。
-
- 例如:
- JETTY_HOME=/usr/local/jetty-6.1.22
-
-
- 在啓動java時增長jvm 參數 「-Djetty.home=$JETTY_HOME」 。因此在Linux環境下,start.jar的自動搜索jetty_home的動做會被取消。
-
-
-
- JETTY_USER
- 如設定該值,那麼將以該用戶的身份啓動jetty
-
-
-
- JETTY_PORT
- jetty服務器監聽端口。若是設定該值,那麼在啓動java時增長jvm 參數 「-Djetty.port=$JETTY_PORT」 。
- 在jetty啓動配置文件裏,<Set name="Port"><SystemProperty name="jetty.port" default="8080"/></Set>這個語句將會使用咱們這裏指定的端口值。
-
-
- 2.6.2 命令參數
- 系統控制檯中,跳轉到 $jetty_home/bin目錄下,輸入「 ./jetty.sh start」,其中start爲命令參數,如今介紹幾個經常使用命令參數
-
-
-
- start
- 啓動jetty服務
-
-
-
- stop
- 中止jetty服務
-
- restart
- 重啓jetty服務
- supervise
-
-
-
- 掛起服務
-
-
-
- check
-
-
- 顯示當前jetty實例運行時所使用的變量參數,能夠用來查看變量是否設置正確。
- 顯示結果實例:
- node-189 bin # ./jetty.sh check
- Checking arguments to Jetty:
- JETTY_HOME = /usr/local/jetty-6.1.15
- JETTY_CONF =
- JETTY_RUN = /var/run
- JETTY_PID = /var/run/jetty.pid
- JETTY_PORT =
- JETTY_LOGS =
- CONFIGS = /usr/local/jetty-6.1.15/etc/jetty-logging.xml /usr/local/jetty-6.1.15/etc/jetty.xml
- JAVA_OPTIONS = -Djetty.home=/usr/local/jetty-6.1.15 -Djava.io.tmpdir=/tmp
- JAVA = /usr/local/java/jdk1.5.0_10/bin/java
- CLASSPATH = /usr/local/java/jdk1.5.0_10/lib:/usr/local/java/jdk1.5.0_10/jre/lib
- RUN_CMD = /usr/local/java/jdk1.5.0_10/bin/java -Djetty.home=/usr/local/jetty-6.1.15 -Djava.io.tmpdir=/tmp -jar /usr/local/jetty-6.1.15/start.jar /usr/local/jetty-6.1.15/etc/jetty-logging.xml /usr/local/jetty-6.1.15/etc/jetty.xml
-
-
- Jetty running pid=24573
-
-
-
-
- 2.6.3 相關配置文件
-
-
- /etc/jetty.conf
- 若是該文件存在,那麼該文件的內容會被解析用來設定jetty 啓動配置文件(configurations),規則以下:
-
-
-
- 以「#」開頭:該行內容做爲註解
- 指向一個文件的路徑:若是該文件存在則做爲jetty啓動的一個啓動配置文件
- 指向一個目錄的路徑:若是該目錄存在,則目錄下的全部.xml的文件會被做爲啓動配置文件
-
-
- 若是不存在該文件,jetty.sh將會使用默認值 :
-
- 「 ${JETTY_HOME}/etc/jetty-logging.xml ${JETTY_HOME}/etc/jetty.xml 」
-
-
-
- /etc/default/jetty 、/etc/default/jetty6 和 $HOME/.jettyrc
- 若任何一個文件存在,那麼jetty.sh文件執行時都會執行它。咱們能夠在這些文件中配置系統變量。
歡迎關注本站公眾號,獲取更多信息