<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    xylz,imxylz

    關注后端架構、中間件、分布式和并發編程

       :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      111 隨筆 :: 10 文章 :: 2680 評論 :: 0 Trackbacks
    Jetty提供了眾多的參數和配置來保證滿足不同場景下的啟動方式。

    除了極大方便嵌入式啟動之外,從程序外部也非常好容易啟動jetty。

    [原文:http://www.tkk7.com/xylz/archive/2012/03/28/372923.html]

    運行方式

    運行方法1

    首先我們以一個標準的jar程序啟動來看待這個問題.
    [adyliu@adyliu-pc jetty8]$ cat run.sh 
    #!/bin/bash


    JETTY_CLASSPATH="./start.jar"
    for f in `find ./lib -name "*.jar"`
    do
        JETTY_CLASSPATH=$JETTY_CLASSPATH:$f
    done

    #echo $JETTY_CLASSPATH
    java -cp $JETTY_CLASSPATH $*

    然后運行查看下
    [adyliu@adyliu-pc jetty8]$ sh run.sh org.eclipse.jetty.start.Main
    2012-03-28 16:00:57.532:INFO:oejs.Server:jetty-8.1.2.v20120308
    2012-03-28 16:00:57.578:INFO:oejs.AbstractConnector:Started SelectChannelConnector@0.0.0.0:8080

    由于沒有任何web環境,因此此時訪問任何地址應該都是404。測試一下:
    [adyliu@adyliu-pc jetty8]$ curl -v http://127.0.0.1:8080
    * About to connect() to 127.0.0.1 port 8080
    *   Trying 127.0.0.1 connected
    * Connected to 127.0.0.1 (127.0.0.1) port 8080
    > GET / HTTP/1.1
    > User-Agent: curl/7.15.5 (x86_64-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5
    > Host: 127.0.0.1:8080
    Accept: */*

    < HTTP/1.1 404 Not Found
    < Date: Wed, 28 Mar 2012 08:15:27 GMT
    < Content-Type: text/html
    < Content-Length618
    < Server: Jetty(8.1.2.v20120308)
    <HTML>
    <HEAD>
    <TITLE>Error 404 - Not Found</TITLE>
    <BODY>
    <H2>Error 404 - Not Found.</H2>

    運行方法2

    另外上述運行等價于:
    [adyliu@adyliu-pc jetty8]$ sh run.sh org.eclipse.jetty.xml.XmlConfiguration etc/jetty.xml
    2012-03-28 16:31:16.481:INFO:oejs.Server:jetty-8.1.2.v20120308
    2012-03-28 16:31:16.518:INFO:oejs.AbstractConnector:Started SelectChannelConnector@0.0.0.0:8080

    運行方法3

    第三種方法就是使用封裝好的start.jar,這個jar包封裝了一些常規的配置。

    在開始之前,我們先重命名下默認的start.ini,因為默認的配置文件會啟動一個test.war環境。
    mv start.ini start.ini.default
    [adyliu@adyliu-pc jetty8]$ java -jar start.jar
    2012-03-28 16:35:21.941:INFO:oejs.Server:jetty-8.1.2.v20120308
    2012-03-28 16:35:21.992:INFO:oejs.AbstractConnector:Started SelectChannelConnector@0.0.0.0:8080

    可以看出這個方式和第一種、第二種完全相同。
    另外start.jar提供了一種可以查看當前運行參數的命令:
    java -jar start.jar --dry-run

    可能輸出:
    /opt/apps/jdk/bin/java -Djetty.home=/opt/apps/jetty8 -cp /opt/apps/jetty8/resources:\
    /opt/apps/jetty8/lib/jetty-xml-8.1.2.v20120308.jar:/opt/apps/jetty8/lib/servlet-api-3.0.jar:\
    /opt/apps/jetty8/lib/jetty-http-8.1.2.v20120308.jar:/opt/apps/jetty8/lib/jetty-continuation-8.1.2.v20120308.jar:\
    /opt/apps/jetty8/lib/jetty-server-8.1.2.v20120308.jar:/opt/apps/jetty8/lib/jetty-security-8.1.2.v20120308.jar:\
    /opt/apps/jetty8/lib/jetty-servlet-8.1.2.v20120308.jar:/opt/apps/jetty8/lib/jetty-webapp-8.1.2.v20120308.jar:\
    /opt/apps/jetty8/lib/jetty-deploy-8.1.2.v20120308.jar:/opt/apps/jetty8/lib/jetty-servlets-8.1.2.v20120308.jar:\
    /opt/apps/jetty8/lib/jetty-util-8.1.2.v20120308.jar:/opt/apps/jetty8/lib/jetty-io-8.1.2.v20120308.jar \
    org.eclipse.jetty.xml.XmlConfiguration /tmp/start1059041541723976621.properties /opt/apps/jetty8/etc/jetty.xml

    有意思的是這里有一個臨時文件:/tmp/start1059041541723976621.properties,里面記錄了所有系統屬性,也就是類似System.getProperties()。
    除非是嵌入式開發,否則我們都是用start.jar來啟動jetty。

    命令參數

    start.jar提供了大量的參數來負責啟動JVM。
    下面命令列出所有的命令行參數:
    java -jar start.jar --help

    現在問題來了,這些默認的參數都是哪來的?例如,如果想改變${jetty.home}又怎樣?
    jetty內部默認提供了一個默認的配置文件start.config來解決此問題。
    默認情況下start.jar里面帶有一個默認的start.config文件,這個文件有一些預置的定義。
    [adyliu@adyliu-pc jetty8]$ jar tvf start.jar | grep start.config
      8669 Fri Mar 09 00:13:12 CST 2012 org/eclipse/jetty/start/start.config

    start.config
     文件內容非常大,其中大部分是注釋。

    start.config的作用有以下幾個:

    • 定義jetty.home屬性
    • 定義jetty啟動類
    • 定義jetty啟動的默認配置文件
    • 定義OPTIONS
    • 根據OPTIONS來定義classpath

    上面特別提到OPTIONS。什么是OPTIONS?

    OPTIONS

    由于jetty是高度可定制的,因此jetty將各個模塊拆分成各個非常細小的模塊。每一個模塊(實際上是一個個的jar包),我們可以簡單的看出是一個OPTION。而每一個OPTION都會對應于實際的jar,這就決定了這些jar包是否需要加入classpath,并且在jetty啟動的時候是否需要做一些額外的事情。

    start.config文件的語法也挺有意思的。支持一些簡單的邏輯判斷,例如文件是否存在、命令行參數是否存在等。

    默認情況下有如下配置:

    • path參數的值加入classpath
    • lib參數的值作為目錄搜索jar包,其中的jar/zip包加入classpath
    • 默認的啟動類是org.eclipse.jetty.xml.XmlConfiguration.class,除非定義了start.class屬性
    • 默認的jetty配置文件是$(jetty.home)/etc/jetty.xml,除非傳入的參數不為空
    • 默認${jetty.home}目錄是當前目錄(不一定是start.jar所在路徑)。${jetty.home}屬性搜索順序有:
      • $(jetty.home) 參數或者系統屬性(包括環境變量)
      • . 當前路徑
      • .. 當前路徑的父路徑
      • jetty-distribution/src/main/resources 當前路徑的發行版子路徑
      • ../jetty-distribution/src/main/resources 當前路徑的父路徑的發行版子路徑
    • 默認的classpath有:
      • resources
      • lib/jetty-xml-8.1.2.v20120308.jar
      • lib/servlet-api-3.0.jar
      • lib/jetty-http-8.1.2.v20120308.jar
      • lib/jetty-continuation-8.1.2.v20120308.jar
      • lib/jetty-server-8.1.2.v20120308.jar
      • lib/jetty-security-8.1.2.v20120308.jar
      • lib/jetty-servlet-8.1.2.v20120308.jar
      • lib/jetty-webapp-8.1.2.v20120308.jar
      • lib/jetty-deploy-8.1.2.v20120308.jar
      • lib/jetty-servlets-8.1.2.v20120308.jar
      • lib/jetty-util-8.1.2.v20120308.jar
      • lib/jetty-io-8.1.2.v20120308.jar

    start.jar參數

    我們再來看start.jar支持的參數:

    [adyliu@adyliu-pc jetty8]# java -jar start.jar --help
    Usage: java -jar start.jar [options] [properties] [configs]

    options

    其中options列表(這指的是命令行參數,不是模塊,由此可見jetty將內置的OPTIONS定義為模塊多好)有:

    • --version 列出版本號
    • --list-options 列出當前start.config支持的所有OPTIONS
    • --list-config 列出當前start.config內容(文本內容)
    • --dry-run 列出當前配置要啟動的java進程完整參數(不啟動jetty服務)
    • --exec 啟動子進程(只有啟動子進程才能修改-X,-D等參數,因為start.jar本身就是依靠java進程啟動的,不能在運行時改變)
    • --stop 停止運行的jetty實例
    • --daemon 后臺運行jetty,啟動將stdout/stderr記錄到${jetty.log}/start.log中(好了,這個變量jetty.log沒有默認配置說明,估計是${jetty.home}/logs目錄)
    • --config=<file> 指定特別的start.config,以便覆蓋內置的start.config.(經過測試,如果指定此文件,那么內置的配置將不再讀取,這導致必須將所有配置寫全,包括mainclass/jetty config/OPTIONS等)
    • --ini=<file> 從配置文件中裝載命令行參數。上面參數以及下面提到的參數是在太多,可以從配置文件中一次性加載,默認的配置文件是${jetty.home}/start.ini。
    • --pre=<file> 指定特別的jetty運行配置文件,這個配置文件在后面提高的配置文件前面運行,相當于改變默認的裝載機制。

    properties

    屬性分成兩種,一種是會傳遞給系統屬性(java.lang.System#getProperty(String)),一種只是作為jetty的啟動參數。

    如果要傳遞給系統屬性,則格式是: -Dname=value,和java進程系統屬性類似。

    jetty也有一些默認的系統屬性:

    屬性類型描述
    org.eclipse.jetty.util.log.class class jetty日志記錄,默認為:org.eclipse.jetty.util.log.Slf4jLog
    org.eclipse.jetty.util.log.DEBUG boolean 調試日志輸出地方,默認為stderr和java內置的Logger,如果是其他日志則需要設置為true,默認為false
    org.eclipse.jetty.util.log.IGNORED boolean 是否記錄一些忽略的錯誤日志,默認為false
    org.eclipse.jetty.util.log.SOURCE boolean 記錄錯誤日志行號?位置?默認為false
    com.sun.management.jmxremote   啟動jmx管理

    jetty的啟動參數屬性,格式是: name=value,注意這里沒有-D了。這些參數不會傳遞給系統屬性。

    所有參數列表:

    • path=[directory]: 傳遞額外的classpath,參考上面默認的start.config配置
    • lib=[directory]: 傳遞額外classpath搜索jar/zip的目錄
    • STOP.PORT=[number]: 停止jetty的端口(遠程管理)
    • STOP.KEY=[alphanumeric]: 停止jetty的密碼(遠程管理)
    • DEBUG=true: 是否啟動調試模式,同時會設置org.eclipse.jetty.util.log.DEBUG屬性為true,默認為false
    • OPTIONS=[option,option...]: OPTION列表,也就是要啟動的模塊列表。

    在內置的start.config中默認的OPTIONS列表有:

    • All
    • Client
    • Server
    • ajp
    • annotations
    • client
    • default
    • deploy
    • ext
    • jmx
    • jndi
    • jsp
    • jta
    • monitor
    • overlay
    • overlays
    • plus
    • policy
    • resources
    • rewrite
    • security
    • server
    • servlet
    • servlets
    • setuid
    • webapp
    • websocket
    • xml

    configs

    jetty運行需要一些配置文件,這些配置文件對應于不同的OPTION所需要的配置。

    默認的jetty配置存在都存在于${jetty.home}/etc中,所有配置文件列表有:

    • etc/jetty-ajp.xml
    • etc/jetty-annotations.xml
    • etc/jetty-bio-ssl.xml
    • etc/jetty-bio.xml
    • etc/jetty-contexts.xml
    • etc/jetty-debug.xml
    • etc/jetty-deploy.xml
    • etc/jetty-fileserver.xml
    • etc/jetty-ipaccess.xml
    • etc/jetty-jmx.xml
    • etc/jetty-logging.xml
    • etc/jetty-monitor.xml
    • etc/jetty-overlay.xml
    • etc/jetty-plus.xml
    • etc/jetty-policy.xml
    • etc/jetty-proxy.xml
    • etc/jetty-requestlog.xml
    • etc/jetty-rewrite.xml
    • etc/jetty-ssl.xml
    • etc/jetty-stats.xml
    • etc/jetty-testrealm.xml
    • etc/jetty-webapps.xml
    • etc/jetty-xinetd.xml
    • etc/jetty.xml

    這么多配置,如何記得住?該使用哪些配置?

    下一個章節中介紹配置文件。


    參考資源:


    ©2009-2014 IMXYLZ |求賢若渴
    posted on 2012-03-28 19:02 imxylz 閱讀(28364) 評論(2)  編輯  收藏 所屬分類: Jetty

    評論

    # re: [深入淺出Jetty 04]Jetty的啟動方式 2012-03-30 07:50 tb
    恩 學習了   回復  更多評論
      


    ©2009-2014 IMXYLZ
    主站蜘蛛池模板: 美女扒开尿口给男人爽免费视频| 久久亚洲国产精品| 国产成人免费A在线视频| 毛片在线看免费版| 97人伦色伦成人免费视频| 日韩欧毛片免费视频| 亚洲影院在线观看| 亚洲AV福利天堂一区二区三| 亚洲国产精品VA在线看黑人| 成人免费无码大片a毛片 | 亚洲无成人网77777| 亚洲精品电影在线| 亚洲同性男gay网站在线观看| 亚洲人6666成人观看| 亚洲视频在线观看2018| 一本色道久久88—综合亚洲精品| 亚洲乱码日产精品一二三| 国产精品亚洲精品爽爽| 日本黄页网址在线看免费不卡| 亚洲免费在线观看| 日本免费中文字幕| 国产大片91精品免费观看不卡| 亚洲欧美一区二区三区日产| 亚洲av无码片vr一区二区三区| 日本一区二区在线免费观看| 本免费AV无码专区一区| 日韩精品免费视频| 在线观看免费人成视频| 国产乱子伦片免费观看中字| 亚洲色无码一区二区三区| 久久久亚洲欧洲日产国码是AV| 2017亚洲男人天堂一| 极品美女一级毛片免费| 成人无码区免费A∨直播| 最近2019免费中文字幕视频三| 妞干网在线免费观看| 亚洲精品人成无码中文毛片| 亚洲人成电影亚洲人成9999网| 国产亚洲精品bv在线观看| 一级人做人爰a全过程免费视频 | 亚洲中文字幕一二三四区苍井空 |