jetty服務器的安裝和部署、新增到開機啓動服務

[html]  view plain copy
 
  1. Jetty的首頁地址是http://www.mortbay.org/jetty/,點擊Downloads進入下載介紹頁面,因爲Jetty7以後,託管服務有Eclipse接替,因此jetty6.1以前(包含6.1)繼續由Codehaus提供下載服務,在該頁面的下方有以下信息:   
  2.       
  3.    
  4.   
  5.    
  6.   
  7. 版本 Java HTTP Servlet JSP Status Notes   
  8. Jetty-8 eclipse 1.6- HTTP/1.1 RFC2616 3.0 2.2 Development Standardized async   
  9. Jetty-7 eclipse 1.5- HTTP/1.1 RFC2616 2.5 2.1 Almost stable org.eclipse.jetty   
  10. Jetty-6.1 1.4-1.6 HTTP/1.1 RFC2616 2.5 2.1 or 2.0 Stable Async SSL, AJP, cometd, testing   
  11. 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   
  12. Jetty-5.1 1.2-1.5 HTTP/1.1 RFC2616 2.4 2.0 Stable J2EE 1.4 Compliance tested, optimizations, geronimo integration.   
  13. Jetty-5.0 1.2-1.4 HTTP/1.1 RFC2616 2.4 2.0 Deprecated Schema, JettyPlus   
  14. Jetty-4.2 1.2-1.4 HTTP/1.1 RFC2616 2.3+ 1.2 Mature JettyPlus   
  15. Jetty-4.1 1.2-1.4 HTTP/1.1 RFC2616 2.3 1.2 Deprecated JAXP1.1, AJP13(mod_jk)   
  16. Jetty-4.0 1.2 HTTP/1.1 RFC2616 2.3 1.2 Deprecated     
  17. Jetty-3.1 1.2 HTTP/1.1 RFC2068 2.2 1.1 Ancient JMX   
  18. Jetty-3.0 1.2 HTTP/1.1 RFC2068 2.2 1.1 Fossilized     
  19. Jetty-2.4 1.1 HTTP/1.0 RFC1945 2.1 1.0 Legendary     
  20. Jetty-1.0 1.0 HTTP/1.0 RFC1945 - - Mythical     
  21.   
  22.    
  23.   
  24.   
  25.   
  26.    
  27.   
  28.   
  29.   
  30.  本書討論的Jetty版本是6.1,也是目前使用最多的穩定版本,咱們到http://dist.codehaus.org/jetty/jetty-6.1.22/下載6.1系列最新的6.1.22版本:  
  31.   
  32.   
  33. jetty-6.1.22-src.zip 16-Nov-2009 23:04 5.7M  
  34. jetty-6.1.22.zip 16-Nov-2009 23:10 24M   
  35.   
  36.   
  37.     咱們下載24M大小的jetty-6.1.22.zip文件,另一個文件有5M是由於只包含了Jetty源碼和實例源碼,jetty-6.1.22.zip文件包包含了 api文檔,實例代碼、jetty源碼、發行Jar文件、各操做系統下的啓動腳本和其餘部分依賴包。也許你會有疑問,我以前介紹Jetty的時候說Jetty體積很是小,是的沒錯!Jetty核心文件的大小隻有約700K!  
  38.   
  39.   
  40.   
  41.   
  42. 2.2 安裝  
  43.     要運行Jetty的首要條件固然是須要安裝JDK了,建議使用j2se 1.5以上的版本,關於JDK或者JRE的安裝,爲了環保這裏就再也不花費篇章介紹了,請參考其餘網絡資料。  
  44.   
  45.       
  46.   
  47.     其實Jetty所謂的安裝過程也就是將下載的文件解壓到指定的目錄,而後根據不一樣的操做系統來配置環境變量而已。  
  48.   
  49.   
  50.   
  51.    之後講解如何從maven源碼編譯等。  
  52. 2.3 使用java命令啓動  
  53.     只要在支持j2se的平臺的操做系統下,jetty均可以運行。因此咱們先介紹jetty提供的跨平臺的服務啓動方式。  
  54.   
  55. 2.3.1 快速啓動  
  56.      打開控制檯,定位到jetty的安裝目錄,執行命令:              
  57.            
  58. java -jar start.jar etc/jetty.xml   
  59.   
  60.   
  61.   
  62. 提示:關於如何執行java的jar文件請查找其餘資料。  
  63.   
  64.   
  65.     start.jar 後面內容是傳遞給start.jar的參數,多個參數用空格隔開。  
  66.   
  67.   
  68. 參數內容能夠有如下幾種:  
  69. --help    查看幫助信息   
  70. --stop    中止服務,下節中會講到   
  71. --version  查看當前jetty版本信息   
  72. 其餘:做爲Jetty服務配置文件   
  73.   
  74.   
  75.     咱們看到上條命令指定參數內容爲etc/jetty.xml,它實際指向一個服務配置文件,該文件是用來設置jetty服務啓動的系統配置信息。好比監聽端口,發佈某個目錄下面的web應用,jndi的配置等等,這些將在後續章節詳細描述。固然服務配置文件能夠是多個,好比:  
  76.   
  77.   
  78.   
  79. java -jar start.jar etc/jetty.xml etc/jetty-plus.xml   
  80.   
  81.   
  82.   
  83.    這條命令就指定了兩個服務配置文件,etc/jetty.xml和etc/jetty-plus.xml。  
  84.   
  85.   
  86.     在後續的章節中術語「服務配置文件」就是指的這些文件。  
  87.      
  88.     使用瀏覽器打開地址 http://localhost:8080/ ,你將會看到jetty的默認示例站點。  
  89.   
  90.   
  91.   
  92. 2.3.2 中止服務  
  93.     在剛纔啓動jetty的終端窗口裏面按住ctrl-c鍵便可。  
  94.   
  95.   
  96.   
  97.     不過你能夠這樣來啓動  
  98.   
  99.   
  100.   
  101. java -DSTOP.PORT=8009 -DSTOP.KEY=secret -jar start.jar  
  102.    
  103.   
  104.        
  105.   
  106.     jetty啓動後會在本地監聽你指定的端口8009,並將在驗證下次關閉命令的密碼secret。如今再經過命令:  
  107.   
  108.   
  109. java -DSTOP.PORT=8009 -DSTOP.KEY=secret -jar start.jar --stop    
  110.   
  111.   
  112.   
  113.     就能夠在本機的另一個終端窗口來中止jetty服務。在linux系統中,你能夠先將jetty進程轉移到後臺執行,而後再經過命令行來中止Jetty服務。  
  114.   
  115.   
  116.     哦,看了上面的介紹你或許覺得jetty啓動和關閉是如此麻煩,一點也不符合Jetty小巧玲瓏的氣質。其實Jetty爲咱們準備了各個操做系統中快捷的方式。不過記住無論何種方式最終都是經過start.jar來啓動jetty服務的。  
  117.   
  118.   
  119. 2.3.3 start.jar深刻探討  
  120.      初學者能夠先跳過本節。本節討論start.jar模塊的做用和細節。start.jar讓jetty各個不一樣的組件聯合起來工做,使得jetty看上去像一個服務器軟件,同時start.jar也不過是jetty的其中一個組件而已。瞭解start.jar工做原理後,咱們就能夠知道#jetty_home/lib下面那麼多文件夾下面的jar文件是如何配被選擇性地加入到classpath中去的。  
  121.   
  122.   
  123.     Jetty start 組件提供了跨平臺的啓動方式。 經過啓動命令 java -DDEBUG=true -jar start.jar [jetty.xml ... ] 能夠看到啓動過程的debug日誌信息。  
  124.   
  125.   
  126.     看看Jetty start 在啓動過程當中都作了哪些操做:  
  127.   
  128.           
  129.   
  130. 自動設置正確的 jetty home目錄   
  131. 根據JDK版本配置classpath,好比jdk1.5版本以前的版本只能使用jsp2.0規範所需的jar包   
  132. 根據設定的classpath,構建好一個類加載器。再根據設定的main class來調用指定main class的main方法   
  133.     因而可知start組件是至關獨立的組件,甚至咱們能夠在本身的項目裏面單獨使用該組件控制程序的啓動。  
  134.   
  135.   
  136.   
  137.     start.config語法  
  138.     Jetty start是由一個名叫start.config的配置文件控制的,這個文件存在在start.jar裏面,路徑是org/mortbay/start/start.config。熟悉這個配置文件的內容會對jetty做爲服務器的啓動過程有更好的瞭解。最重要的是咱們知道jetty的classpath的設置和如何經過設置系統變量來把外部類路徑增長到jetty中。  
  139.   
  140.   
  141.     start.config的格式是每一行一條指令,若是以#開頭則爲註解行。指令的後面是執行條件,若是條件不符合則忽略。  
  142.   
  143.     指令有以下幾種狀況:  
  144.   
  145. 以.path結尾: 若是.path前面的字符串存在且長度大於0,則將該類路徑加入到系統類路徑中   
  146. 包含 「=」  :   執行System.setProperty(property,value)調用,「=」左邊爲property,右邊爲value   
  147. 以.class結尾:若是".class"前面有值的話,就設定爲Main class   
  148. 以.xml結尾:  若是指定的xml文件存在的話就做爲jetty服務的啓動配置文件之一   
  149. 以/*結尾:    指定目錄下面的因此jar或者zip文件,被加入到classpath中   
  150. 以/**結尾:  指定遞歸該目錄下面的因此jar或者zip文件,被加入到classpath中   
  151. 以/結尾:     指定的目錄做爲classpath的一部分   
  152. 其餘:         做爲一個文件加入到classpath中   
  153.     關於條件:  
  154. "<",">"," <=",">=","==","!=" 是條件的比較操做符,從左到右執行   
  155. exists 檢測緊跟着後面的文件是否存在   
  156. available 檢測緊跟着後面的class是否存在   
  157. !表示非;always表示true   
  158. 變量nargs表示傳遞給start.jar的參數數量   
  159. 變量java表示java版本   
  160.     其餘規則:  
  161. 全部的指令按行從上到下執行   
  162. 若是一個文件或者目錄因爲條件被否決,沒有被加入到類路徑中,那麼即便後續指令中包含了該文件或者目錄,那麼一樣不會被加入到類路徑中   
  163. 指令或者條件中, $(...) 表示獲取系統屬性,即一次System.getProperty()調用。如$(jetty.class.path).path指令,當系統屬性「jetty.class.path」沒有設置,那麼運行時實際指令的值位 「.path」。若是設置系統屬性「jetty.class.path」的值爲"/usr/local/jarlib",那麼運行時實際指令值爲 "/usr/local/jarlib.path"   
  164.   
  165.   
  166. start.config文件  
  167. $(jetty.class.path).path                         always  
  168. $(jetty.lib)/**                                  exists $(jetty.lib)  
  169.   
  170.   
  171.   
  172.   
  173. # Try different settings of jetty.home until the jetty.jar is found.  
  174. jetty.home=.                                     ! exists $(jetty.home)/start.jar   
  175. jetty.home=..                                    ! exists $(jetty.home)/start.jar  
  176. jetty.home=/home/jetty                           ! exists $(jetty.home)/start.jar  
  177. jetty.home=/C:/jetty                             ! exists $(jetty.home)/start.jar  
  178. jetty.home=.                                     ! exists $(jetty.home)/start.jar   
  179.   
  180.   
  181. # The main class to run  
  182. org.mortbay.xml.XmlConfiguration.class  
  183. $(start.class).class  
  184.   
  185.   
  186. # The default configuration files  
  187. $(jetty.home)/etc/jetty.xml                      nargs == 0  
  188.   
  189.   
  190. # Set the jetty classpath  
  191. $(jetty.home)/lib/*                              always  
  192.   
  193.   
  194. # Set the classpath for the supporting cast                 
  195. $(jetty.home)/lib/jsp-2.1/*                      java >= 1.5     
  196. $(jetty.home)/lib/jsp-2.0/*                      ! available org.apache.jasper.servlet.JspServlet                 
  197. $(jetty.home)/lib/management/*         
  198. $(jetty.home)/lib/management/mx4j/*              java 1.5             
  199. $(jetty.home)/lib/naming/*                                
  200. $(jetty.home)/lib/plus/*                               
  201. $(jetty.home)/lib/xbean/*                               
  202. $(jetty.home)/lib/wadi/*                               
  203. $(jetty.home)/lib/grizzly/*                               
  204. $(jetty.home)/lib/annotations/*                  java >= 1.5                              
  205.   
  206.   
  207. $(jetty.home)/lib/jre1.5/**                      java >= 1.5  
  208.   
  209.   
  210. # Recursively add all jars and zips from the ext lib  
  211. $(jetty.home)/lib/ext/**                        always  
  212.   
  213.   
  214. # Try some standard locations for anything missing.  
  215. /usr/share/java/ant.jar                          ! available org.apache.tools.ant.Main  
  216.   
  217.   
  218. # Add a resources directory if it is there  
  219. $(jetty.home)/resources/   
  220.   
  221.   
  222.   
  223.       
  224.   
  225. 2.4咱們能夠學到什麼  
  226.   
  227.   
  228.   
  229.   
  230. 2.5 Windows系統下啓動和關閉控制  
  231.       
  232.     jetty利用Win32Wrapper工具(http://wrapper.tanukisoftware.org)使得在window系統上能夠以控制檯或者Window服務的方式運行jetty程序,使用起來很是方便。  
  233.      
  234.   
  235.     在 $jetty_home/bin目錄下有以下幾個相關文件:Jetty-Service.exe , jetty-service.conf。雙擊Jetty-Service.exe 文件,便可以控制檯的方式來運行jetty了。jetty-service.conf 顯然是配置文件了,一會詳細介紹。  
  236.   
  237.   
  238.      (之後咱們用 $jetty_home來表示Jetty的安裝目錄)  
  239.   
  240.       
  241.   
  242.   註冊Windows服務  
  243.         打開命令行,轉到 $jetty_home/bin 目錄,執行命令:  
  244.   
  245.           
  246.   
  247.         E:\jetty-6.1.22\bin>Jetty-Service.exe --install jetty-service.conf  
  248.         wrapper  | Jetty6-Service installed.  
  249.   
  250.   
  251.   啓動服務  
  252.         執行命令: Jetty-Service.exe --start jetty-service.conf   
  253.   中止服務  
  254.          執行命令:Jetty-Service.exe --stop jetty-service.conf   
  255.   註銷服務  
  256.          執行命令:Jetty-Service.exe --remove jetty-service.conf   
  257.   
  258.   
  259.       
  260.   
  261.     你在成功註冊Windows服務後,能夠修改服務讓其隨系統自動啓動。  
  262.   
  263.   
  264.   
  265. jetty-service.conf 配置文件  
  266. wrapper.java.classpath.1=../lib/win32/*.jar                 
  267.   
  268. wrapper.java.classpath.2=../lib/*.jar  
  269. wrapper.java.classpath.3=../start.jar  
  270. wrapper.java.library.path.1=../lib/win32/  
  271. #wrapper.java.additional.n能夠設置jvm參數  
  272. wrapper.java.additional.1=-Djetty.home=../           #設置系統屬性jetty.home,指定jetty根目錄  
  273. wrapper.java.additional.2=-Djetty.logs=../logs        #設置系統屬性jetty.logs  
  274. wrapper.java.initmemory=3                                 #jvm初始內存大小  
  275. wrapper.java.maxmemory=64                              #jvm內存大小  
  276. wrapper.java.mainclass=org.mortbay.jetty.win32service.JettyServiceWrapperListener  
  277. #wrapper.app.parameter.n能夠設置應用程序參數,及 -jar start.jar 後面的參數  
  278. #例如 wrapper.app.parameter.1=../etc/jetty.xml ../etc/jetty-ajp.xml  
  279. wrapper.app.parameter.1=../etc/jetty.xml  
  280. wrapper.console.format=PM  
  281. wrapper.console.loglevel=INFO  
  282. wrapper.logfile=../logs/jetty-service.log          #輸出到System.out到內容將同時被記錄在該文件  
  283. wrapper.logfile.format=LPTM  
  284. wrapper.logfile.loglevel=INFO  
  285. wrapper.logfile.maxsize=0                          #jetty-service.log文件的最大尺寸,0表示不限制  
  286. wrapper.logfile.maxfiles=0                          #當限制文件大小時,容許存在的最多文件個數  
  287. wrapper.syslog.loglevel=NONE  
  288. wrapper.ntservice.name=Jetty  
  289. wrapper.ntservice.displayname=Jetty6-Service  
  290. wrapper.ntservice.description=Jetty is an open-source, standards-based, full-featured web server implemented entirely in java  
  291. wrapper.ntservice.starttype=AUTO_START  
  292. wrapper.ntservice.interactive=false  
  293.   
  294.   
  295. #Win32Wrapper中定義一個觸發器,當控制拋出OutOfMemoryError錯誤,則重啓Jetty服務  
  296. wrapper.filter.trigger.1=java.lang.OutOfMemoryError    
  297. wrapper.filter.action.1=RESTART  
  298.   
  299.   
  300. 2.6 Linux系統下啓動和關閉控制  
  301.      在$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來關閉相應進程。  
  302.   
  303.      在jetty.sh裏面還能夠定製變量來控制jetty,如指定JAVA_HOME目錄、指定jvm最大內存、指定pid文件的位置等。  
  304.   
  305. 2.6.1 系統變量的設置  
  306. 提示:在編輯變量的時候「=」兩邊千萬不要有空格。  
  307.   
  308.   
  309. 下面逐個介紹各變量的做用:  
  310.   
  311.   
  312.   
  313. JAVA_HOME      
  314.     指定Java安裝目錄。當你須要指定特定位置的jdk或者jetty搜索不到java安裝目錄時,須要設定該變量。  
  315.   
  316. 例如:    JAVA_HOME=/usr/local/java/jdk1.5.0_10/  
  317.   
  318.   
  319. JAVA  
  320.      執行java命令。默認值爲 $JAVA_HOME/bin/java。通常不須要設置。  
  321.   
  322.   
  323.   
  324. JAVA_OPTIONS  
  325.     JVM的可選參數。你能夠利用這個選項配置內存大小、系統變量等等其餘參數,這個變量很是有用。  
  326.   
  327.   
  328.   
  329. 例如:JAVA_OPTIONS="-Xmn128M -Xms256M -Xmx1024M   
  330. -Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.EPollSelectorProvider"  
  331.   
  332.   
  333. JETTY_RUN  
  334.     jetty.pid文件的存放目錄。默認值爲 /var/run, /usr/var/run  或 /tmp 三者之一。若是你須要在一臺服務器上啓動多個安裝目錄下的jetty,那麼必須設定該變量以免共享同一pid文件而形成衝突。建議設置爲各個安裝目錄下面新建的run目錄。  
  335.   
  336.   
  337.   
  338. JETTY_PID  
  339.     pid文件的路徑。默認值 $JETTY_RUN/jetty.pid。通常不須要設置。  
  340.   
  341.   
  342.   
  343. JETTY_ARGS  
  344.     傳遞給jetty的參數。值 java -jar start.jar 後面的部分。  
  345.   
  346.   
  347.   
  348. JETTY_HOME  
  349.     jetty安裝目錄。雖然jetty嘗試搜索jetty安裝目錄,可是咱們仍是建議設定該變量。  
  350.   
  351. 例如:  
  352.     JETTY_HOME=/usr/local/jetty-6.1.22  
  353.   
  354.   
  355.     在啓動java時增長jvm 參數 「-Djetty.home=$JETTY_HOME」 。因此在Linux環境下,start.jar的自動搜索jetty_home的動做會被取消。  
  356.   
  357.   
  358.   
  359. JETTY_USER  
  360.     如設定該值,那麼將以該用戶的身份啓動jetty  
  361.   
  362.   
  363.   
  364. JETTY_PORT  
  365.     jetty服務器監聽端口。若是設定該值,那麼在啓動java時增長jvm 參數 「-Djetty.port=$JETTY_PORT」 。  
  366.     在jetty啓動配置文件裏,<Set name="Port"><SystemProperty name="jetty.port" default="8080"/></Set>這個語句將會使用咱們這裏指定的端口值。  
  367.   
  368.   
  369. 2.6.2 命令參數  
  370.     系統控制檯中,跳轉到 $jetty_home/bin目錄下,輸入「  ./jetty.sh start」,其中start爲命令參數,如今介紹幾個經常使用命令參數  
  371.   
  372.       
  373.   
  374. start      
  375.     啓動jetty服務  
  376.   
  377.    
  378.   
  379. stop      
  380.     中止jetty服務  
  381.   
  382. restart   
  383.     重啓jetty服務  
  384. supervise      
  385.   
  386.    
  387.   
  388.     掛起服務  
  389.   
  390.   
  391.   
  392. check     
  393.   
  394.   
  395.      顯示當前jetty實例運行時所使用的變量參數,能夠用來查看變量是否設置正確。  
  396. 顯示結果實例:  
  397. node-189 bin # ./jetty.sh check  
  398. Checking arguments to Jetty:  
  399. JETTY_HOME     =  /usr/local/jetty-6.1.15  
  400. JETTY_CONF     =  
  401. JETTY_RUN      =  /var/run  
  402. JETTY_PID      =  /var/run/jetty.pid  
  403. JETTY_PORT     =  
  404. JETTY_LOGS     =  
  405. CONFIGS        =  /usr/local/jetty-6.1.15/etc/jetty-logging.xml /usr/local/jetty-6.1.15/etc/jetty.xml  
  406. JAVA_OPTIONS   =   -Djetty.home=/usr/local/jetty-6.1.15 -Djava.io.tmpdir=/tmp  
  407. JAVA           =  /usr/local/java/jdk1.5.0_10/bin/java  
  408. CLASSPATH      =  /usr/local/java/jdk1.5.0_10/lib:/usr/local/java/jdk1.5.0_10/jre/lib  
  409. 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  
  410.   
  411.   
  412. Jetty running pid=24573  
  413.   
  414.   
  415.   
  416.   
  417. 2.6.3 相關配置文件  
  418.   
  419.   
  420. /etc/jetty.conf  
  421.     若是該文件存在,那麼該文件的內容會被解析用來設定jetty 啓動配置文件(configurations),規則以下:  
  422.   
  423.   
  424.   
  425. 以「#」開頭:該行內容做爲註解   
  426. 指向一個文件的路徑:若是該文件存在則做爲jetty啓動的一個啓動配置文件   
  427. 指向一個目錄的路徑:若是該目錄存在,則目錄下的全部.xml的文件會被做爲啓動配置文件   
  428.    
  429.   
  430.     若是不存在該文件,jetty.sh將會使用默認值 :  
  431.   
  432. 「 ${JETTY_HOME}/etc/jetty-logging.xml ${JETTY_HOME}/etc/jetty.xml 」  
  433.   
  434.   
  435.   
  436. /etc/default/jetty 、/etc/default/jetty6 和 $HOME/.jettyrc  
  437.     若任何一個文件存在,那麼jetty.sh文件執行時都會執行它。咱們能夠在這些文件中配置系統變量。  
相關文章
相關標籤/搜索