Jetty是一个开源项目,提供了HTTP Server,HTTP Client和Javax.servlet容器,这里(http://www.eclipse.org/jetty/)是它的官方网站,这里对它做一个基本的介绍,包括基本目录、启动方式和应用部署。
Jetty目录结构
下面是Jetty 9.10的发布版本包含的文件和文件夹,及其作用。
license-eplv10-aslv20.html
Jetty的License文件
README.txt
Jetty的基本信息和命令
VERSION.txt
发布版本
bin/
Jetty运行在Unix系统上的shell脚本
demo-base/
一个Jetty的base文件夹,用于运行演示webapps的Jetty server
etc/
Jetty的XML配置文件文件夹
lib/
Jetty依赖的JAR文件
logs/
请求日志
modules/
module定义文件夹
notice.html
License信息和免责条款
resources/
附属资源的配置文件
start.d/
*.ini文件,这些文件包含一些配置文件,在命令行中会被作为参数添加上去(看start.ini)
start.ini
包含添加到实际的命令行中的参数(modules,properties和XML配置文件)
start.jar
调用Jetty的Jar
webapps/
默认的Jetty放置webapps的文件夹
这里做一个基本的了解,后面将详细讲述。
启动Jetty
Jetty的默认端口是8080,使用下面的命令启动:
>cd $JETTY_HOME
>java -jar start.jar
然后你能在浏览器中访问:http://localhost:8080。
Demo Base
在9.1.0之后,Jetty不再部署任何demo web应用,因此要看演示,你需要从demo-base文件夹启动Jetty,如下:
>cd $JETTY_HOME/demo-base/
>java -jar ../start.jar
打开浏览器,输入http://localhost:8080,你将看到一个欢迎页面和几个demo/test web应用。
创建新Jetty Base
上面描述的demo-base文件夹是一个jetty.base机制的一个例子,该机制在Jetty 9.1增加。Jetty base允许服务端实例的配置和web应用被分别地存储,以保证升级的影响降到最小。Jetty的默认配置基于两个属性:
jetty.home:定义jetty分发的位置,包括他的libs,默认modules和默认XML文件(例如start.jar,lib,等等)
jetty.base:定义一个jetty服务器的特定实例的位置,包括他的配置,logs和web应用(例如start.ini,start.d,logs和webapps)
jetty.home和jetty.base可以直接在命令行中指定,也可以通过环境变量使用,例如:
>cd $JETTY_BASE
>java -jar $JETTY_HOME/start.jar
这个跟随的命令创建了一个新的base文件夹,并激活了一个HTTP连接器和web应用部署者:
>mkdir /tmp/mybase
>cd /tmp/mybase
>java -jar $JETTY_HOME/start.jar
WARNING: Nothing to start, exiting ...
Usage: java -jar start.jar [options] [properties] [configs]
java -jar start.jar --help # for more information
>java -jar $JETTY_HOME/start.jar --add-to-startd=http,deploy
http initialised in ${jetty.base}/start.d/http.ini (created)
server initialised in ${jetty.base}/start.d/server.ini (created)
deploy initialised in ${jetty.base}/start.d/deploy.ini (created)
MKDIR: ${jetty.base}/webapps
server initialised in ${jetty.base}/start.d/server.ini
>java -jar $JETTY_HOME/start.jar
2013-09-06 14:59:32.542:INFO:oejs.Server:main: jetty-9.1.0-SNAPSHOT
2013-09-06 14:59:32.572:INFO:oejdp.ScanningAppProvider:main: Deployment monitor [file:/tmp/mybase/webapps/] at interval 1
2013-09-06 14:59:32.602:INFO:oejs.ServerConnector:main: Started ServerConnector@405a2273{HTTP/1.1}{0.0.0.0:8080}
[...]
改变Jetty端口
你可以通过在命令行中设置jetty.port改变端口:
>cd $JETTY_HOME/demo-base
>java -jar start.jar jetty.port=8081
你可以将属性值添加到start.ini文件或者start.d/*.ini文件中。默认情况下,jetty定义jetty.port属性在start.d/http.ini文件中,可以被修改。
使用HTTPS启动
使用下面的方式可以激活https模块:
>java -jar start.jar --add-to-startd=https
https initialised in ${jetty.home}/start.d/https.ini (created)
ssl initialised in ${jetty.home}/start.d/ssl.ini (created)
server enabled in ${jetty.home}/start.ini
resources enabled in ${jetty.home}/start.ini
ext enabled in ${jetty.home}/start.ini
>java -jar start.jar
2013-09-06 13:52:43.326:INFO:oejs.Server:main: jetty-9.1.0
...
--add-to-startd执行如下操作:
1)创建https.ini文件激活和配置https连接器模块。https模块增加etc/jetty-https.xml文件到命令行中。
2)创建start.d/ssl.ini文件激活和配置SSL keystore。ssl模块增加etc/jetty-ssl.xml文件到命令行。
3)检查etc/keystore文件是否存在,如果不存在,则下载一个示范keystore文件。
更多的start.jar选项
start.jar的工作是解释命令行,start.ini和start.d是提供Java classpath和属性和配置文件列表。start.jar有许多的选项,你可以通过下面的命令看到:
>java -jar start.jar --help
部署web应用
web应用部署在webapps文件夹,支持热部署,支持标准的WAR文件和Jetty配置文件,并遵循下面的约定:
1)如果文件夹example/被部署,且包含一个WEB-INF/子文件夹,则它作为标准web应用部署,否则它作为静态目录上下文部署。上下文路径是/example(即:http://localhost:8080/example/),但如果文件夹名是ROOT(大小写敏感),则上下文路径是/。如果文件夹名以“.d”结束,则被忽略(但可以通过直接配置来使用)。
2)文件example.war被作为标准web应用部署,上下文路径为/example(即:http://localhost:8080/example/)。如果文件名是ROOT(大小写敏感),则上下文路径为/。如果example.war和example/同时存在,则WAR被部署。
3)一个XML文件example.xml被部署,配置通过XML文件定义,配置必须包含上下文路径。如果example.xml和example.war存在,仅XML被部署。
如果你有一个标准的web应用,你能通过拷贝它到webapps文件夹来热部署它到Jetty。