Jetty提供了眾多的參數和配置來保證滿足不同場景下的啟動方式。
除了極大方便嵌入式啟動之外,從程序外部也非常好容易啟動jetty。
[原文:http://m.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-
Length:
618
< 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}又怎樣?
默認情況下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
|求賢若渴