jetty下载地址:
<a href="https://www.eclipse.org/jetty/download.html" target="_blank">https://www.eclipse.org/jetty/download.html</a>
jetty的安装:
下载.tgz的包解压缩的指定目录后即可
例如:将jetty-distribution-9.4.6.v20170531.tar.gz包解压缩到/usr/local/jetty目录。
我们默认把jetty的根目录当成 $JETTY_HOME
jetty目录结构:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<code>[root@localhost jetty01]</code><code># ll</code>
<code>total 712</code>
<code>drwxr-xr-x 2 root root 4096 Sep 1 14:59 bin</code>
<code>drwxr-xr-x 7 root root 4096 Sep 1 14:53 demo-base</code>
<code>drwxr-xr-x 3 root root 4096 Sep 1 14:53 etc</code>
<code>-rw-r--r-- 1 root root 198 Sep 1 16:19 jetty01.state</code>
<code>drwxr-xr-x 13 root root 4096 Sep 1 14:53 lib</code>
<code>-rw-r--r-- 1 root root 30012 Sep 1 14:53 license-eplv10-aslv20.html</code>
<code>drwxr-xr-x 2 root root 4096 Sep 1 14:53 logs</code>
<code>drwxr-xr-x 19 root root 4096 Sep 1 14:53 modules</code>
<code>-rw-r--r-- 1 root root 6262 Sep 1 14:53 notice.html</code>
<code>-rw-r--r-- 1 root root 1637 Sep 1 14:53 README.TXT</code>
<code>drwxr-xr-x 2 root root 4096 Sep 1 14:53 resources</code>
<code>-rw-r--r-- 1 root root 5702 Sep 1 14:53 start.ini</code>
<code>-rw-r--r-- 1 root root 147725 Sep 1 14:53 start.jar</code>
<code>-rw-r--r-- 1 root root 483631 Sep 1 14:53 VERSION.txt</code>
<code>drwxr-xr-x 2 root root 4096 Sep 1 16:36 webapps</code>
目录、文件简介
Location
Description
license-eplv10-aslv20.html
Jetty的许可文件
README.txt
有用的开始信息
VERSION.txt
版本信息
bin/
存放在Unix系统下运行的shell脚本
demo-base/
一个可运行包含示例web应用的Jetty服务器基目录
etc/
Jetty的配置文件
lib/
Jetty运行所必须的jar文件
logs/
日志
modules/
各个模块
notice.html
许可信息等
resources/
包含新增到classpath配置文件夹,如log4j.properties
start.ini
存放启动信息
start.jar
运行Jetty的jar
webapps/
一个用来存放运行在默认配置下的Jetty Web应用目录
重要的目录和文件:
bin/jetty.sh:jetty服务启动/停止脚本,主要有以下变量的配置
<code>JAVA: 设置java命令的绝对路径,即jdk的bin目录下的java命令的路径,如果没设置,则从PATH环境变量中查找;</code>
<code>JAVA_OPTIONS:设置jvm参数;</code>
<code>JETTY_HOME:jetty的安装目录,如果没有设置,则从调用该脚本的上下文环境中猜测;</code>
<code>JETTY_BASE:jetty的base目录,即当前工程使用的jetty环境的根目录,如果没有设置,则与JETTY_HOME相同;</code>
<code>JETTY_RUN:配置保存jetty pid文件的路径,如果没有配置,根据以下顺序查找第一个可用目录:</code><code>/var/run</code><code>, </code><code>/usr/var/run</code><code>, JETTY_BASE, </code><code>/tmp</code><code>;</code>
<code>JETTY_PID:pid文件路径,默认为:$JETTY_RUN/$NAME.pid(NAME变量表示启动jetty时,去掉扩展名的脚本名称);</code>
<code>JETTY_ARGS:jetty参数,如配置端口号等:JETTY_ARGS=8080 jetty.spdy.port=8443</code>
<code>JETTY_USER:配置启动用户,如以nkcoder用户启动:JETTY_USER=nkcoder</code>
jetty运行:
命令方式启动:
<code>cd</code> <code>$JETTY_HOME</code>
<code>java -jar start.jar</code>
这个命令能执行需要$JETTY_HOME下有start.ini文件,改文件中存放的是jetty服务启动信息
start.ini文件默认配置如下:
<code> </code><code>cat</code> <code>start.ini | </code><code>egrep</code> <code>-</code><code>v</code> <code>"^#|^$"</code>
<code>--module=home-base-warning</code>
<code>--module=ext</code>
<code>--module=server</code>
<code>--module=jsp</code>
<code>--module=resources</code>
<code>--module=deploy</code>
<code>--module=jstl</code>
<code>--module=websocket</code>
<code>--module=http</code>
这是因为jetty启动时,会在$JETTY_HOME/webapps中找war包或者web应用的目录。而默认情况下$JETTY_HOME/webapps下没有web应用的war包和文件。所以提示404。
基础应用的例子:
<code>cd</code> <code>$JETTY_HOME</code><code>/demo-base/</code>
<code>java -jar $JETTY_HOME</code><code>/start</code><code>.jar</code>
来看下demo-base目录中的文件,同样有一个webapps目录。
<code>#ll demo-base/</code>
<code>total 20</code>
<code>drwxr-xr-x 2 root root 4096 Sep 1 14:53 etc</code>
<code>drwxr-xr-x 3 root root 4096 Sep 1 14:53 lib</code>
<code>drwxr-xr-x 2 root root 4096 Sep 1 14:53 resources</code>
<code>drwxr-xr-x 2 root root 4096 Sep 1 14:53 start.d</code>
<code>drwxr-xr-x 5 root root 4096 Sep 1 14:53 webapps</code>
jetty如何部署web应用的
把要部署的工程(war包、工程目录或者xml描述文件放到${JETTY_HOME}的webapps目录下即可;
需要注意的是:
jetty会对webapps目录下的几乎所有war包、目录、xml文件(有一些例外,如隐藏文件和.d结尾的目录等会被忽略)进行自动部署。
如果war包、目录和xml文件同名,则部署的顺序为xml文件 > war包 > 目录 。比如,webapps目录下有:rank.war,rank目录以及rank.xml,其中rank目录为rank.war解压后的目录,rank.xml中引用的是rank.war包或者rank目录,则此时,仅有xml文件被部署,这里成立的前提是同名,如果不同名,但它们是同一个工程,则会导致工程被重复部署,切记!
例如一个包含 WEB-INF/ 子文件夹的example/文件夹做为一个标准的web应用进行部署,否则就按静态资源部署,context路径为/example(访问路径: http://localhost:8080/example/);若文件夹名字为ROOT,则访问路径为/;若文件夹名字末尾为.d则此文件夹被忽略(除非被特殊的配置文件引用)
若一个文件example.war被部署在webapps下,则context路径为example/,如果名字为ROOT则访问路径为/,如果example.war文件和example/文件夹同时存在,只有war文件会被部署(这个文件会被当做一个没有被解压的目录来使用)
一个像example.xml的配置文件,若文件中是标准的配置信息,也会被部署,文件中必须包含context path,如果context path和example.xml同时存在,只有example.xml会被部署。
如果你有一个标准的web应用,可以直接将其拷贝到webapps文件夹下进行热部署。
看下demo-base/webapps目录下的文件
<code># ls -l webapps/</code>
<code>total 3624</code>
<code>-rw-r--r-- 1 root root 986372 Sep 1 14:53 async-rest.war</code>
<code>drwxr-xr-x 3 root root 4096 Sep 1 14:53 doc</code>
<code>-rw-r--r-- 1 root root 533 Sep 1 14:53 example-moved.xml</code>
<code>-rw-r--r-- 1 root root 341 Sep 1 14:53 README.TXT</code>
<code>drwxr-xr-x 3 root root 4096 Sep 1 14:53 ROOT</code>
<code>drwxr-xr-x 2 root root 4096 Sep 1 14:53 </code><code>test</code><code>.d</code>
<code>-rw-r--r-- 1 root root 60716 Sep 1 14:53 </code><code>test</code><code>-jaas.war</code>
<code>-rw-r--r-- 1 root root 945 Sep 1 14:53 </code><code>test</code><code>-jaas.xml</code>
<code>-rw-r--r-- 1 root root 62949 Sep 1 14:53 </code><code>test</code><code>-jndi.war</code>
<code>-rw-r--r-- 1 root root 3430 Sep 1 14:53 </code><code>test</code><code>-jndi.xml</code>
<code>-rw-r--r-- 1 root root 517192 Sep 1 14:53 </code><code>test</code><code>-spec.war</code>
<code>-rw-r--r-- 1 root root 2456 Sep 1 14:53 </code><code>test</code><code>-spec.xml</code>
<code>-rw-r--r-- 1 root root 1012480 Sep 1 14:53 </code><code>test</code><code>.war</code>
<code>-rw-r--r-- 1 root root 4623 Sep 1 14:53 </code><code>test</code><code>.xml</code>
<code>-rw-r--r-- 1 root root 1018072 Sep 1 14:53 xref-proxy.war</code>
webapps中文件介绍:
<code>ROOT/:这个文件夹包含各种静态资源。包含Jetty欢迎页面,默认访问路径为/</code>
<code>test</code><code>.d:一个包含附加配置文件的文件夹,被</code><code>test</code><code>.xml使用用来为</code><code>test</code><code>.war增加额外的配置</code>
<code>test</code><code>.xml:一个context配置文件,用来配置和部署</code><code>test</code><code>.war,包含上下文环境和</code><code>test</code><code>.d里面的配置附加的配置信息</code>
<code>test</code><code>.war:在</code><code>test</code><code>.xml里面配置的示例web程序</code>
<code>async-rest.war:一个异步示例的web应用程序</code>
<code>test</code><code>-jaas.war:一个使用JAAS身份验证的web应用程序。</code>
<code>test</code><code>-jaas.xml:用来配置</code><code>test</code><code>-jaas.war的配置文件</code>
<code>test</code><code>-jndi.war:一个使用JNDI的示例应用</code>
<code>test</code><code>-jndi.xml:用来配置</code><code>test</code><code>-jndi.war的配置文件</code>
<code>test</code><code>-spec.war:一个使用注解,ServletContainerInitializers 和Servlet 3.0</code><code>/3</code><code>.1规范的示例应用</code>
<code>test</code><code>-spec.xml:用来配置</code><code>test</code><code>-spec.war的配置文件</code>
<code>xref-proxy.war:使用代理的一个示例应用</code>
<code>example-moved.xml:一个演示MovedContextHandler重定向使用的示例应用</code>
总结:
demo-base/webapps目录下有很多同名的war包和xml文件比如:
test.war和test.xml ,test-jaas.war和test-jaas.xml
这两个文件可以看成是一组。jetty部署example.war包时,需要一个同名的example.xml文件,该文件保存war包的配置
一个简单的xml文件内容如下:
<code><</code><code>Configure</code> <code>class</code><code>=</code><code>"org.eclipse.jetty.webapp.WebAppContext"</code><code>></code>
<code> </code><code><</code><code>Set</code> <code>name</code><code>=</code><code>"contextPath"</code><code>>/jenkins</</code><code>Set</code><code>></code>
<code> </code><code><</code><code>Set</code> <code>name</code><code>=</code><code>"war"</code><code>><</code><code>SystemProperty</code> <code>name</code><code>=</code><code>"jetty.home"</code> <code>default</code><code>=</code><code>"."</code><code>/>/webapps/jenkins.war</</code><code>Set</code><code>></code>
<code> </code><code><</code><code>Get</code> <code>name</code><code>=</code><code>"securityHandler"</code><code>></code>
<code> </code><code><</code><code>Set</code> <code>name</code><code>=</code><code>"loginService"</code><code>></code>
<code> </code><code><</code><code>New</code> <code>class</code><code>=</code><code>"org.eclipse.jetty.security.HashLoginService"</code><code>></code>
<code> </code><code><</code><code>Set</code> <code>name</code><code>=</code><code>"name"</code><code>>Jenkins Realm</</code><code>Set</code><code>></code>
<code> </code><code><</code><code>Set</code> <code>name</code><code>=</code><code>"config"</code><code>><</code><code>SystemProperty</code> <code>name</code><code>=</code><code>"jetty.home"</code> <code>default</code><code>=</code><code>"."</code><code>/>/etc/realm.properties</</code><code>Set</code><code>></code>
<code> </code><code></</code><code>New</code><code>></code>
<code> </code><code></</code><code>Set</code><code>></code>
<code> </code><code></</code><code>Get</code><code>></code>
<code></</code><code>Configure</code><code>></code>
contextPath配置的是访问web应用时的路径,上面配置的是/jenkins,所以访问该应用时,路径为
<a href="http://172.16.42.178:8181/jenkins/" target="_blank">http://localhost:8080/jenkins/</a>
下面以jetty9部署jenkins为例介绍jetty9使用配置
将jenkins.war拷贝到$JETTY_HOME/webapps目录下,创建jenkins.xml文件,配置如上面的文件。启动jetty服务即可。
<code># ll</code>
<code>total 63180</code>
<code>-rwxr-xr-x 1 root root 64685923 Sep 1 16:04 jenkins.war</code>
<code>-rw-r--r-- 1 root root 642 Sep 1 16:26 jenkins.xml</code>
<code>-rw-r--r-- 1 root root 1412 Sep 1 14:53 README.TXT</code>
本文转自 曾哥最爱 51CTO博客,原文链接:http://blog.51cto.com/zengestudy/1962026,如需转载请自行联系原作者