jetty9部署
https://blog.51cto.com/5404542/1751702
Jetty 9部署web应用
Jetty相关的文章比较少,不过官方文档挺齐全的。做下记录也是好事。
jetty9跟jetty8相比变化还是有一些的,jetty8部署web应用需要将war包部署到${JETTY_HOME}/webapps下,然后将context的相关配置放到${JETTY_HOME}/contexts下,然后启动即可。
jetty9将war包和context配置的xml都放到了${JETTY_HOME}/webapps下了,比如你有一个myapp.war,将其放到webapps下之后,需要新建一个myapp.xml的文件
- <?xml version="1.0" encoding="ISO-8859-1"?>
- <!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">
- <Configure class="org.eclipse.jetty.webapp.WebAppContext">
- <Set name="contextPath">/myapp</Set>
- <Set name="war"><SystemProperty name="jetty.home" default="."/>/webapps/myapp.war</Set>
- </Configure>
补:学习官方文档发现jetty9部署规则如下:
部署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。
1. 简单有效的方式
把要部署的工程(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文件被部署,这里成立的前提是同名,如果不同名,但它们是同一个工程,则会导致工程被重复部署,切记!(关于重复部署,参考前一篇博文:Jetty9避免重复部署)
我建议的做法是:将war包或解压后的目录放在webapps目录下,或者将xml描述文件放在webapps目录下,将war包或目录放在单独的目录里。
2. 配置context path
默认,jetty将webapps目录下的工程名作为context path,如果工程名称为ROOT,则context path为/;比如,将rank.war(或rank目录)放在webapps目录下,则context path为/rank,如果将rank.war重命名为ROOT.war,则context path为/;
如果通过文件名来配置context path无法满足要求,则可以通过xml文件来配置,如将rank.xml放在webapps目录下,添加如下内容:
contextPath配置context path,war指定工程war包或目录的路径;
3. jetty启动/停止
建议通过${JETTY_HOME}下bin/jetty.sh脚本来启动/停止jetty,如:
当然,也可以通过start.jar来启动,如:
如果希望通过start.jar停止,则在启动的时候需要指定STOP.PORT和STOP.KEY两个参数,且启动和停止时,两个参数的值必须匹配,如:
所以,一般通过bin/jetty.sh控制jetty的运行,使用start.jar查看jetty的配置和状态。
4. 配置jetty环境变量和jvm参数
通过bin/jetty.sh来控制jetty的运行,所以编辑bin/jetty.sh文件,可以配置的变量主要有:
注意:以上这些变量,虽然在jetty的运行环境下都具有默认值,但是在设置时,这些参数还是空的,即不能互相引用,比如,没有显式配置JETTY_BASE,直接配置JETTY_RUN=JETTY_BASE,则此时JETTY_RUN使用的还是默认值,因为JETTY_BASE此时为空。
这里提供一个简单的配置供参考:
5. 查看jetty配置
通过start.jar查看帮助和配置:
主要的查看配置的参数有:
6. 一台机器上同时部署多个jetty
以在一台服务器上同时部署两个工程为例,需要两份jetty和一份jdk。和单独部署的唯一区别就是,只要确保pid和port是不同的即可。
第一种方式:修改jetty.sh脚本的名称,因为pid文件的名称就是脚本的名称,如:
工程1使用jetty1,将bin/jetty.sh重命名为bin/jetty1.sh,同时修改其配置如下(注意不用配置JETTY_RUN变量):
工程2使用jetty2,将bin/jetty.sh重命名为bin/jetty2.sh,并修改配置:
此时,两个jetty的pid均位于默认的目录下,即/var/run,路径分别为/var/run/jetty1.pid,/var/run/jetty2.pid。
第二种方式:修改pid文件保存的目录,该目录由JETTY_RUN配置,默认都在/var/run下,如:
工程1使用jetty1,修改bin/jetty.sh如下:
工程2使用jetty2,修改bin/jetty.sh如下:
此时,pid文件位于各自jetty的安装目录下,虽然都为jetty.pid,但是互不影响。
7. 将jetty配置为系统服务
首先,将bin/jetty.sh拷贝到/etc/init.d中:
然后,新建文件/etc/default/jetty,在其中设置环境变量JETTY_HOME:
启动和停止:
说明:bin/jetty.sh默认将/etc/default/{pid}作为其配置文件,此时pid名称即为jetty,所以/etc/default/jetty会作为jetty的配置文件,可以在其中配置JETTY_HOME, JAVA, JAVA_OPTIONS等环境变量。
注意,jetty的服务是默认会占用系统内存的,也就是说,如果你要热部署(不停应用的状态下),系统内存的占用也会越来越高,必须停掉服务,这样才会释放内存,然后替换掉工程,然后重新启动服务
转自【IT精英团】:http://www.itnpc.com/news/web/145189730834348.html