Jetty提供了众多的参数和配置来保证满足不同场景下的启动方式。
除了极大方便嵌入式启动之外,从程序外部也非常好容易启动jetty。
[原文:http://www.blogjava.net/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_CLASSPATHjava -cp $JETTY_CLASSPATH $*
然后运行查看下
[adyliu@adyliu-pc jetty8]$sh run.sh org.eclipse.jetty.start.Main2012-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: */*
>
Error 404 - Not FoundError 404 - Not Found.
运行方法2
另外上述运行等价于:
[adyliu@adyliu-pc jetty8]$sh run.sh org.eclipse.jetty.xml.XmlConfiguration etc/jetty.xml2012-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.jar2012-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 --helpUsage: 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= 指定特别的start.config,以便覆盖内置的start.config.(经过测试,如果指定此文件,那么内置的配置将不再读取,这导致必须将所有配置写全,包括mainclass/jetty config/OPTIONS等)
--ini= 从配置文件中装载命令行参数。上面参数以及下面提到的参数是在太多,可以从配置文件中一次性加载,默认的配置文件是${jetty.home}/start.ini。
--pre= 指定特别的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求贤若渴