参考:
http://www.inter12.org/archives/649
一 简介
挂在eclipse基金会下
java语言编写的实现servlet规范的web容器
支持SPDY, WebSocket, OSGi, JMX, JNDI, JAAS
最新版本是jetty9,必须JDK7支持
目前使用的项目:alibaba japan,b2b activeMq,apache-camel,fisheye,confluence,hadoop (更全可见:http://www.eclipse.org/jetty/powered/)
源码存放地址:https://github.com/eclipse/jetty.project
ps:
挂在eclipse基金会下其他知名开源框架还有 Sphinx(搜索服务器)Hudson(持续集成),Subversive(svn工具),AspectJ(aop框架),hadoop(离线计算)等
二 主要目录结构解析
bin/ ― 启动、停止脚本
etc/ ― 配置文件目录,不同于tomcat的conf
lib/ ― 自身必须加装的包 例如jetty-deploy,jetty-http,jetty-io 等
license-eplv10-aslv20.html
logs/ ― 日志目录
notice.html
README.txt
resources/ ― jetty的资源文件 ,里面是一些log4j的配置
start.d/
start.ini
start.jar ― jetty 的启动jar包 s示例:java $JAVA_OPTS -Djetty.port=$app_port -jar start.jar $jetty_etc/jetty.xml
VERSION.txt
webapps/ ― 包的部署目录
webapps.demo/
三 几个重要的配置文件
3.1 START.INI
当你通过:java -jar start.jar 启动时候,读取的配置来之 $JETTY_HOME/start.ini
具体查看当前使用的配置 通过命令 java -jar start.jar �help 以下就是默认配置
――――――――――――――――――――――――――――――-
The current start.ini arguments are:
OPTIONS=Server,websocket,resources,ext
threads.min=10
threads.max=200
threads.timeout=60000
jetty.dump.start=false
jetty.dump.stop=false
etc/jetty.xml
OPTIONS=jmx
etc/jetty-jmx.xml
OPTIONS=jsp
jetty.port=8080
http.timeout=30000
etc/jetty-http.xml
etc/jetty-deploy.xml
OPTIONS=rewrite
etc/jetty-rewrite.xml
etc/jetty-demo.xml
OPTIONS=client
etc/test-realm.xml
OPTIONS=jaas
jaas.login.conf=webapps.demo/test-jaas.d/login.conf
etc/jetty-jaas.xml
OPTIONS=jndi,jndi.demo
OPTIONS=plus
etc/jetty-plus.xml
OPTIONS=annotations
etc/jetty-annotations.xml
etc/jetty-ssl.xml
etc/jetty-https.xml
etc/jetty-demo.xml 中定义了默认启动加载的应用包 在webapps.demo目录 root路径的加载是在ROOT包下
―――――――――――――――
<Ref refid=”DeploymentManager”>
<Call id=”webappprovider” name=”addAppProvider”>
<Arg>
<New class=”org.eclipse.jetty.deploy.providers.WebAppProvider”>
<Set name=”monitoredDirName”><Property name=”jetty.home” default=”.” />/webapps.demo</Set>
<Set name=”defaultsDescriptor”><Property name=”jetty.home” default=”.” />/etc/webdefault.xml</Set>
另外jetty启动的JVM参数配置也在这里 vim start.ini
#===========================================================
# Configure JVM arguments.
# If JVM args are include in an ini file then �exec is needed
# to start a new JVM from start.jar with the extra args.
# If you wish to avoid an extra JVM running, place JVM args
# on the normal command line and do not use �exec
#―――――――――――――――――――�
# �exec
# -Xmx2000m
# -Xmn512m
# -XX:+UseConcMarkSweepGC
# -XX:ParallelCMSThreads=2
# -XX:+CMSClassUnloadingEnabled
# -XX:+UseCMSCompactAtFullCollection
# -XX:CMSInitiatingOccupancyFraction=80
3.2 JETTY.XML
<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd">
<!-- jetty 的每一示例都是一个Server -->
<Configure id="Server" class="org.eclipse.jetty.server.Server">
<!-- 请求的线程池配置-->
<Get name="ThreadPool">
<Set name="minThreads" type="int"><Property name="threads.min" default="10"/></Set>
<Set name="maxThreads" type="int"><Property name="threads.max" default="200"/></Set>
<Set name="idleTimeout" type="int"><Property name="threads.timeout" default="60000"/></Set>
<Set name="detailedDump">false</Set>
</Get>
<!-- 线程的调度器 -->
<Call name="addBean">
<Arg>
<New class="org.eclipse.jetty.util.thread.ScheduledExecutorScheduler"/>
</Arg>
</Call>
<!-- http https SPDY请求进来的默认配置 -->
<New id="httpConfig" class="org.eclipse.jetty.server.HttpConfiguration">
<Set name="secureScheme">https</Set>
<Set name="securePort"><Property name="jetty.secure.port" default="8443" /></Set>
<Set name="outputBufferSize">32768</Set>
<Set name="requestHeaderSize">8192</Set>
<Set name="responseHeaderSize">8192</Set>
<Set name="sendServerVersion">true</Set>
<Set name="sendDateHeader">false</Set>
<Set name="headerCacheSize">512</Set>
<!-- Uncomment to enable handling of X-Forwarded- style headers
<Call name="addCustomizer">
<Arg><New class="org.eclipse.jetty.server.ForwardedRequestCustomizer"/></Arg>
</Call>
-->
</New>
<!-- 请求的处理器,会处理Contexts中定义的handler 及默认的Handler-->
<Set name="handler">
<New id="Handlers" class="org.eclipse.jetty.server.handler.HandlerCollection">
<Set name="handlers">
<Array type="org.eclipse.jetty.server.Handler">
<Item>
<New id="Contexts" class="org.eclipse.jetty.server.handler.ContextHandlerCollection"/>
</Item>
<Item>
<New id="DefaultHandler" class="org.eclipse.jetty.server.handler.DefaultHandler"/>
</Item>
</Array>
</Set>
</New>
</Set>
<!-- 其他配置选项 -->
<Set name="stopAtShutdown">true</Set>
<Set name="stopTimeout">5000</Set>
<Set name="dumpAfterStart"><Property name="jetty.dump.start" default="false"/></Set>
<Set name="dumpBeforeStop"><Property name="jetty.dump.stop" default="false"/></Set>
</Configure>
3.3 ETC/JETTY-DEPLOY.XML
定义了 应用加载包的信息
―――――――――――――――――――――――――――――――――――-
<?xml version=”1.0″?>
<!DOCTYPE Configure PUBLIC “-//Jetty//Configure//EN” “http://www.eclipse.org/jetty/configure_9_0.dtd”>
<!� 定义包的部署管理 �>
<Configure id=”Server” class=”org.eclipse.jetty.server.Server”>
<Call name=”addBean”>
<Arg>
<New id=”DeploymentManager” class=”org.eclipse.jetty.deploy.DeploymentManager”>
<!� 加载的上下文目录 Contexts 的定义是在 jetty.xml中 �>
<Set name=”contexts”>
<Ref refid=”Contexts” />
</Set>
<Call name=”setContextAttribute”>
<Arg>org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern</Arg>
<Arg>.*/servlet-api-[^/]*\.jar$</Arg>
</Call>
<!� 应用的 provider 默认指向的是deploy目录 加载的配置是:/etc/webdefault.xml �>
<Call id=”webappprovider” name=”addAppProvider”>
<Arg>
<New class=”org.eclipse.jetty.deploy.providers.WebAppProvider”>
<Set name=”monitoredDirName”><Property name=”jetty.home” default=”.” />/webapps</Set>
<Set name=”defaultsDescriptor”><Property name=”jetty.home” default=”.” />/etc/webdefault.xml</Set>
<Set name=”scanInterval”>1</Set>
<Set name=”extractWars”>true</Set>
<Set name=”configurationManager”>
<New class=”org.eclipse.jetty.deploy.PropertiesConfigurationManager”>
<!� file of context configuration properties
<Set name=”file”><SystemProperty name=”jetty.home”/>/etc/some.properties</Set>
�>
<!� set a context configuration property
<Call name=”put”><Arg>name</Arg><Arg>value</Arg></Call>
�>
</New>
</Set>
</New>
</Arg>
</Call>
</New>
</Arg>
</Call>
</Configure>
自己定义个加载目录
<?xml version=”1.0″ encoding=”ISO-8859-1″?>
<!DOCTYPE Configure PUBLIC “-//Mort Bay Consulting//DTD Configure//EN” “http://jetty.mortbay.org/configure.dtd”>
<Configure class=”org.mortbay.jetty.webapp.WebAppContext”>
<Set name=”contextPath”>/</Set>
<Set name=”war”>/home/xx/xx.war</Set>
<Set name=”extractWAR”>true</Set>
<Set name=”copyWebDir”>false</Set>
</Configure>
若是WAR是myapp.war,那么访问路径就是/myapp
若是包名是ROOT.WAR,那么访问路径是/
若是包名是ROOT-foobar.war,那么访问路径是/ 同时建立了一个虚拟主机foobar