写在前面:使用jetty已经很久了,它是一个很出色的web容器和工具,特在此和大家分享jetty6的知识。网络上有一些关于jetty的资料,但过去陈旧且不具有系统性,导致很多人误解jetty的功能,国外目前也没有关于jetty的书籍,所以那些搞翻译的人也没有翻译来源,故决定写一本关于jetty6的书,以推广jetty在国内的使用。记住jetty不仅仅是一个web容器!
版权声明:这一系列章节只在javaeye的博客发表,谢绝任何组织和个人的转载或抄袭!本人保留所有权利!如侵犯本版权则需赔偿人民币5000000圆整,因为劳动是无价的,这算便宜的了!
作者:陈汝烨
由于这一些系列文章正在编写过程中,写好一章就发一章,难免有很多错误的地方,欢迎哥们指正!
第2章 Jetty初探
Jetty-8 eclipse | 1.6- | HTTP/1.1 RFC2616 | 3.0 | 2.2 | Development | Standardized async |
Jetty-7 eclipse | 1.5- | HTTP/1.1 RFC2616 | 2.5 | 2.1 | Almost stable | org.eclipse.jetty |
Jetty-6.1 | 1.4-1.6 | HTTP/1.1 RFC2616 | 2.5 | 2.1 or 2.0 | Stable | Async SSL, AJP, cometd, testing |
Jetty-6 | 1.4-1.5 | HTTP/1.1 RFC2616 | 2.5 | 2.1 or 2.0 | Deprecated | Continuations, IOC, NIO, dynamic buffers, smaller, faster, better |
Jetty-5.1 | 1.2-1.5 | HTTP/1.1 RFC2616 | 2.4 | 2.0 | Stable | J2EE 1.4 Compliance tested, optimizations, geronimo integration. |
Jetty-5.0 | 1.2-1.4 | HTTP/1.1 RFC2616 | 2.4 | 2.0 | Deprecated | Schema, JettyPlus |
Jetty-4.2 | 1.2-1.4 | HTTP/1.1 RFC2616 | 2.3+ | 1.2 | Mature | JettyPlus |
Jetty-4.1 | 1.2-1.4 | HTTP/1.1 RFC2616 | 2.3 | 1.2 | Deprecated | JAXP1.1, AJP13(mod_jk) |
Jetty-4.0 | 1.2 | HTTP/1.1 RFC2616 | 2.3 | 1.2 | Deprecated | |
Jetty-3.1 | 1.2 | HTTP/1.1 RFC2068 | 2.2 | 1.1 | Ancient | JMX |
Jetty-3.0 | 1.2 | HTTP/1.1 RFC2068 | 2.2 | 1.1 | Fossilized | |
Jetty-2.4 | 1.1 | HTTP/1.0 RFC1945 | 2.1 | 1.0 | Legendary | |
Jetty-1.0 | 1.0 | HTTP/1.0 RFC1945 | - | - | Mythical |
2.2 安装
2.3 使用java命令启动
2.3.1 快速启动
java -jar start.jar etc/jetty.xml |
- --help 查看帮助信息
- --stop 停止服务,下节中会讲到
- --version 查看当前jetty版本信息
- 其他:作为Jetty服务配置文件
我们看到上条命令指定参数内容为etc/jetty.xml,它实际指向一个服务配置文件,该文件是用来设置jetty服务启动的系统配置信息。比如监听端口,发布某个目录下面的web应用,jndi的配置等等,这些将在后续章节详细描述。当然服务配置文件可以是多个,比如:
java -jar start.jar etc/jetty.xml etc/jetty-plus.xml |
2.3.2 停止服务
java -DSTOP.PORT=8009 -DSTOP.KEY=secret -jar start.jar |
java -DSTOP.PORT=8009 -DSTOP.KEY=secret -jar start.jar --stop |
2.3.3 start.jar深入探讨
- 自动设置正确的 jetty home目录
- 根据JDK版本配置classpath,比如jdk1.5版本之前的版本只能使用jsp2.0规范所需的jar包
- 根据设定的classpath,构建好一个类加载器。再根据设定的main class来调用指定main class的main方法
start.config语法
- 以.path结尾: 如果.path前面的字符串存在且长度大于0,则将该类路径加入到系统类路径中
- 包含 “=” : 执行System.setProperty(property,value)调用,“=”左边为property,右边为value
- 以.class结尾:如果".class"前面有值的话,就设定为Main class
- 以.xml结尾: 如果指定的xml文件存在的话就作为jetty服务的启动配置文件之一
- 以/*结尾: 指定目录下面的所以jar或者zip文件,被加入到classpath中
- 以/**结尾: 指定递归该目录下面的所以jar或者zip文件,被加入到classpath中
- 以/结尾: 指定的目录作为classpath的一部分
- 其他: 作为一个文件加入到classpath中
- "<",">"," <=",">=","==","!=" 是条件的比较操作符,从左到右执行
- exists 检测紧跟着后面的文件是否存在
- available 检测紧跟着后面的class是否存在
- !表示非;always表示true
- 变量nargs表示传递给start.jar的参数数量
- 变量java表示java版本
- 所有的指令按行从上到下执行
- 如果一个文件或者目录由于条件被否决,没有被加入到类路径中,那么即使后续指令中包含了该文件或者目录,那么同样不会被加入到类路径中
- 指令或者条件中, $(...) 表示获取系统属性,即一次System.getProperty()调用。如$(jetty.class.path).path指令,当系统属性“jetty.class.path”没有设置,那么运行时实际指令的值位 “.path”。如果设置系统属性“jetty.class.path”的值为"/usr/local/jarlib",那么运行时实际指令值为 "/usr/local/jarlib.path"
$(jetty.class.path).path always
$(jetty.lib)/** exists $(jetty.lib)
# Try different settings of jetty.home until the jetty.jar is found.
jetty.home=. ! exists $(jetty.home)/start.jar
jetty.home=.. ! exists $(jetty.home)/start.jar
jetty.home=/home/jetty ! exists $(jetty.home)/start.jar
jetty.home=/C:/jetty ! exists $(jetty.home)/start.jar
jetty.home=. ! exists $(jetty.home)/start.jar
# The main class to run
org.mortbay.xml.XmlConfiguration.class
$(start.class).class
# The default configuration files
$(jetty.home)/etc/jetty.xml nargs == 0
# Set the jetty classpath
$(jetty.home)/lib/* always
# Set the classpath for the supporting cast
$(jetty.home)/lib/jsp-2.1/* java >= 1.5
$(jetty.home)/lib/jsp-2.0/* ! available org.apache.jasper.servlet.JspServlet
$(jetty.home)/lib/management/*
$(jetty.home)/lib/management/mx4j/* java < 1.5
$(jetty.home)/lib/naming/*
$(jetty.home)/lib/plus/*
$(jetty.home)/lib/xbean/*
$(jetty.home)/lib/wadi/*
$(jetty.home)/lib/grizzly/*
$(jetty.home)/lib/annotations/* java >= 1.5
$(jetty.home)/lib/jre1.5/** java >= 1.5
# Recursively add all jars and zips from the ext lib
$(jetty.home)/lib/ext/** always
# Try some standard locations for anything missing.
/usr/share/java/ant.jar ! available org.apache.tools.ant.Main
# Add a resources directory if it is there
$(jetty.home)/resources/
|
2.4我们可以学到什么
2.5 Windows系统下启动和关闭控制
注册Windows服务
启动服务
停止服务
注销服务
jetty-service.conf 配置文件
wrapper.java.classpath.1=../lib/win32/*.jar
2.6 Linux系统下启动和关闭控制
2.6.1 系统变量的设置
JAVA_HOME
JAVA
JAVA_OPTIONS
JETTY_RUN
JETTY_PID
JETTY_ARGS
JETTY_HOME
JETTY_USER
JETTY_PORT
2.6.2 命令参数
start
启动jetty服务
停止jetty服务
restart
重启jetty服务
supervise
挂起服务
2.6.3 相关配置文件
/etc/jetty.conf
- 以“#”开头:该行内容作为注解
- 指向一个文件的路径:如果该文件存在则作为jetty启动的一个启动配置文件
- 指向一个目录的路径:如果该目录存在,则目录下的所有.xml的文件会被作为启动配置文件
如果不存在该文件,jetty.sh将会使用默认值 :
“ ${JETTY_HOME}/etc/jetty-logging.xml ${JETTY_HOME}/etc/jetty.xml ”
/etc/default/jetty 、/etc/default/jetty6 和 $HOME/.jettyrc
- "<",">"," <=",">=","==","!=" 是条件的比较操作符,从左到右执行
- exists 检测紧跟着后面的文件是否存在
- available 检测紧跟着后面的class是否存在
- !表示非;always表示true
- 变量nargs表示传递给start.jar的参数数量
- 变量java表示java版本
- 所有的指令按行从上到下执行
- 如果一个文件或者目录由于条件被否决,没有被加入到类路径中,那么即使后续指令中包含了该文件或者目录,那么同样不会被加入到类路径中
- 指令或者条件中, $(...) 表示获取系统属性,即一次System.getProperty()调用。如$(jetty.class.path).path指令,当系统属性“jetty.class.path”没有设置,那么运行时实际指令的值位 “.path”。如果设置系统属性“jetty.class.path”的值为"/usr/local/jarlib",那么运行时实际指令值为 "/usr/local/jarlib.path"
$(jetty.class.path).path always
$(jetty.lib)/** exists $(jetty.lib)
# Try different settings of jetty.home until the jetty.jar is found.
jetty.home=. ! exists $(jetty.home)/start.jar
jetty.home=.. ! exists $(jetty.home)/start.jar
jetty.home=/home/jetty ! exists $(jetty.home)/start.jar
jetty.home=/C:/jetty ! exists $(jetty.home)/start.jar
jetty.home=. ! exists $(jetty.home)/start.jar
# The main class to run
org.mortbay.xml.XmlConfiguration.class
$(start.class).class
# The default configuration files
$(jetty.home)/etc/jetty.xml nargs == 0
# Set the jetty classpath
$(jetty.home)/lib/* always
# Set the classpath for the supporting cast
$(jetty.home)/lib/jsp-2.1/* java >= 1.5
$(jetty.home)/lib/jsp-2.0/* ! available org.apache.jasper.servlet.JspServlet
$(jetty.home)/lib/management/*
$(jetty.home)/lib/management/mx4j/* java < 1.5
$(jetty.home)/lib/naming/*
$(jetty.home)/lib/plus/*
$(jetty.home)/lib/xbean/*
$(jetty.home)/lib/wadi/*
$(jetty.home)/lib/grizzly/*
$(jetty.home)/lib/annotations/* java >= 1.5
$(jetty.home)/lib/jre1.5/** java >= 1.5
# Recursively add all jars and zips from the ext lib
$(jetty.home)/lib/ext/** always
# Try some standard locations for anything missing.
/usr/share/java/ant.jar ! available org.apache.tools.ant.Main
# Add a resources directory if it is there
$(jetty.home)/resources/
|
2.4我们可以学到什么
2.5 Windows系统下启动和关闭控制
注册Windows服务
启动服务
停止服务
注销服务
jetty-service.conf 配置文件
wrapper.java.classpath.1=../lib/win32/*.jar
2.6 Linux系统下启动和关闭控制
2.6.1 系统变量的设置
JAVA_HOME
JAVA
JAVA_OPTIONS
JETTY_RUN
JETTY_PID
JETTY_ARGS
JETTY_HOME
JETTY_USER
JETTY_PORT
2.6.2 命令参数
start
启动jetty服务
停止jetty服务
restart
重启jetty服务
supervise
挂起服务