java jetty启动_[深入浅出Jetty 04]Jetty的启动方式

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

9b8a8a44dd1c74ae49c20a7cd451974e.png 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 Found

Error 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

9b8a8a44dd1c74ae49c20a7cd451974e.png] [properties

9b8a8a44dd1c74ae49c20a7cd451974e.png] [configs

9b8a8a44dd1c74ae49c20a7cd451974e.png]

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求贤若渴

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值