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的文件

[html] view plain copy

 
  1. <?xml version="1.0"  encoding="ISO-8859-1"?>
  2. <!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">
  3. <Configure class="org.eclipse.jetty.webapp.WebAppContext">
  4. <Set name="contextPath">/myapp</Set>
  5. <Set name="war"><SystemProperty name="jetty.home" default="."/>/webapps/myapp.war</Set>
  6. </Configure>
 

启动jetty,然后在浏览器就能访问localhost:8080/myapp了。

补:学习官方文档发现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。

 
 
第02篇. Jetty 9 实战之安装/运行/部署
http://www.cnblogs.com/pangxiansheng/p/5362813.html
 
____________________________________________________________________________________
 
 

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目录下,添加如下内容:

<?xml version="1.0"  encoding="UTF-8"?><!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd"><Configure class="org.eclipse.jetty.webapp.WebAppContext">
  <Set name="contextPath">/</Set>
  <Set name="war">/opt/www/ugc-base/webapps/RankByElasticSearch-1.0.war</Set></Configure>
 

contextPath配置context path,war指定工程war包或目录的路径;

3. jetty启动/停止

建议通过${JETTY_HOME}下bin/jetty.sh脚本来启动/停止jetty,如:

$ bin/jetty start
$ bin/jetty stop
 

当然,也可以通过start.jar来启动,如:

$ java -jar start.jar
 

如果希望通过start.jar停止,则在启动的时候需要指定STOP.PORT和STOP.KEY两个参数,且启动和停止时,两个参数的值必须匹配,如:

$ java -jar start.jar STOP.PORT=8181 STOP.KEY=ugcKey
$ java -jar start.jar STOP.PORT=8181 STOP.KEY=ugcKey --stop
 

所以,一般通过bin/jetty.sh控制jetty的运行,使用start.jar查看jetty的配置和状态。

4. 配置jetty环境变量和jvm参数

通过bin/jetty.sh来控制jetty的运行,所以编辑bin/jetty.sh文件,可以配置的变量主要有:

JAVA: 设置java命令的绝对路径,即jdk的bin目录下的java命令的路径,如果没设置,则从PATH环境变量中查找;JAVA_OPTIONS:设置jvm参数;JETTY_HOME:jetty的安装目录,如果没有设置,则从调用该脚本的上下文环境中猜测;JETTY_BASE:jetty的base目录,即当前工程使用的jetty环境的根目录,如果没有设置,则与JETTY_HOME相同;JETTY_RUN:配置保存jetty pid文件的路径,如果没有配置,根据以下顺序查找第一个可用目录:/var/run, /usr/var/run, JETTY_BASE, /tmp;JETTY_PID:pid文件路径,默认为:$JETTY_RUN/$NAME.pid(NAME变量表示启动jetty时,去掉扩展名的脚本名称);JETTY_ARGS:jetty参数,如配置端口号等:JETTY_ARGS=8080 jetty.spdy.port=8443JETTY_USER:配置启动用户,如以nkcoder用户启动:JETTY_USER=nkcoder
 

注意:以上这些变量,虽然在jetty的运行环境下都具有默认值,但是在设置时,这些参数还是空的,即不能互相引用,比如,没有显式配置JETTY_BASE,直接配置JETTY_RUN=JETTY_BASE,则此时JETTY_RUN使用的还是默认值,因为JETTY_BASE此时为空。

这里提供一个简单的配置供参考:

JETTY_HOME=/usr/local/jetty9.1JETTY_BASE=$JETTY_HOME
JETTY_RUN=$JETTY_BASE
JETTY_USER=www
JETTY_ARGS=jetty.port=8989JAVA=/usr/local/jdk7/bin/java
JAVA_OPTIONS="-Xloggc:/opt/logs/vrsRank/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=10M -XX:+UseG1GC -XX:+UnlockExperimentalVMOptions -XX:G1MaxNewSizePercent=50 -XX:PermSize=256m -XX:MaxPermSize=256m -Xss256k -server -Xms4G -Xmx4G -Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=18787 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/logs/vrsRank/oom.log"
 

5. 查看jetty配置

通过start.jar查看帮助和配置:

$ java -jar start.jar --help
 

主要的查看配置的参数有:

--list-config: 查看启动jetty使用的配置:java环境,jetty环境,JVM参数,属性,服务器classpath,服务器的xml配置等;--list-modules: 查看系统使用的模块--list-classpath: 查看系统使用的classpath--version:查看版本信息--module=<model-name>:临时启用一个模块
 

6. 一台机器上同时部署多个jetty

以在一台服务器上同时部署两个工程为例,需要两份jetty和一份jdk。和单独部署的唯一区别就是,只要确保pid和port是不同的即可。

第一种方式:修改jetty.sh脚本的名称,因为pid文件的名称就是脚本的名称,如:

工程1使用jetty1,将bin/jetty.sh重命名为bin/jetty1.sh,同时修改其配置如下(注意不用配置JETTY_RUN变量):

JETTY_HOME=/usr/local/jetty1
JETTY_BASE=$JETTY_HOME
JETTY_USER=www
JETTY_ARGS=jetty.port=8181JAVA=/usr/local/jdk7/bin/java
JAVA_OPTIONS="-Xloggc:/opt/logs/ugcRank/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps"
 

工程2使用jetty2,将bin/jetty.sh重命名为bin/jetty2.sh,并修改配置:

JETTY_HOME=/usr/local/jetty2
JETTY_BASE=$JETTY_HOME
JETTY_USER=www
JETTY_ARGS=jetty.port=8282JAVA=/usr/local/jdk7/bin/java
JAVA_OPTIONS="-Xloggc:/opt/logs/vrsRank/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps"
 

此时,两个jetty的pid均位于默认的目录下,即/var/run,路径分别为/var/run/jetty1.pid,/var/run/jetty2.pid。

第二种方式:修改pid文件保存的目录,该目录由JETTY_RUN配置,默认都在/var/run下,如:

工程1使用jetty1,修改bin/jetty.sh如下:

JETTY_HOME=/usr/local/jetty1
JETTY_BASE=$JETTY_HOME
JETTY_RUN=$JETTY_BASE
JETTY_USER=www
JETTY_ARGS=jetty.port=8181JAVA=/usr/local/jdk7/bin/java
JAVA_OPTIONS="-Xloggc:/opt/logs/ugcRank/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps"
 

工程2使用jetty2,修改bin/jetty.sh如下:

JETTY_HOME=/usr/local/jetty1
JETTY_BASE=$JETTY_HOME
JETTY_RUN=$JETTY_BASE
JETTY_USER=www
JETTY_ARGS=jetty.port=8181JAVA=/usr/local/jdk7/bin/java
JAVA_OPTIONS="-Xloggc:/opt/logs/ugcRank/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps"
 

此时,pid文件位于各自jetty的安装目录下,虽然都为jetty.pid,但是互不影响。

7. 将jetty配置为系统服务

首先,将bin/jetty.sh拷贝到/etc/init.d中:

$ cp bin/jetty.sh /etc/init.d/jetty
 

然后,新建文件/etc/default/jetty,在其中设置环境变量JETTY_HOME:

$ vim /etc/default/jetty
JETTY_HOME=/usr/local/jetty9.1
 

启动和停止:

$ service jetty start
$ service jetty stop
 

说明: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

jetty9部署的更多相关文章

  1. jetty9 安装部署更改端口号

    1.下载jetty 并解压到指定目录 2.更改默认端口号--在start.d中的http.ini中修改 3.启动服务 在jetty的根目录中输入命令 java -jar start.jar  服务就启 ...

  2. jetty9 web app的部署

    jetty9将web app和web app的context配置文件都放在${JETTY_HOME}/webapps下面. 例如,如果有一个myapp.war,首先将其放入${JETTY_HOME}/ ...

  3. 用Jenkins+Gradle+Jetty实现持续集成、测试、部署

    自动集成有很多种方案,本例用到的工具是Jenkins(前身Hudson)+Gradle+Jetty,关于Gradle可参考上一篇,Gradle常见问题. 本例项目名称: WAP Jetty 安装Jen ...

  4. 第02篇. Jetty 9 实战之安装/运行/部署

    一直以来,想改变一些自己早已经习惯的事情. 一直都听说jetty跟Tomcat一样,是一个web容器. 一直都是在说等等,再等等,等有时间的时候! 一直都是给自己一些逃避的理由 1. 首先从Jetty ...

  5. Jetty9开发(1)

    Version: 9.2.14.v20151106  Jetty : 开发文档 jetty的官网:http://www.eclipse.org/jetty/ Jetty : 开发文档 目录 I. je ...

  6. Solr6.0与Jetty、Tomcat在Win环境下搭建/部署

    摘要: Solr6的新特性包括增强的edismax,对SQL更好的支持--并行SQL.JDBC驱动.更多的SQL语法支持等,并且在Solr6发布以后,Solr5还在持续更新,对于想尝鲜Solr6的用户 ...

  7. jetty9.4缓存文件目录自定义

    jetty9.4安装包解压之后,有几个修改的地方和jetty7.6有不同,需要单独注意一下: 1. 端口设置 端口设置在${jetty_home}/start.ini中 2. 缓存文件生成目录 项目通 ...

  8. Solr——Windows下部署Solr7.5.0至jetty、Tomcat

    Solr6用默认的Jetty启动 需要的软件支持 JDK1.8以上 Solr6的安装包(solr-7.5.0.zip ) Solr自带一个Jetty环境,可以很方便的运行Solr. 直接到解压缩的so ...

  9. docker 部署 jenkins

    建议使用的Docker映像是jenkinsci/blueocean image(来自 the Docker Hub repository). 该镜像包含当前的长期支持 (LTS) 的Jenkins版本 ...

随机推荐

  1. linux安装IB驱动方法

    一.准备 1.Linux操作系统7.6(根据实际情况变更,此处用redhat7.6系统举例) 2.驱动:MLNX_OFED_LINUX-4.6-1.0.1.1-rhel7.6-x86_64.tgz(根 ...

  2. MySQL学习——存储引擎

    MySQL学习——存储引擎 摘要:本文主要学习了MySQL数据库的存储引擎. 什么是存储引擎 数据库存储引擎是数据库底层软件组件,数据库管理系统使用数据引擎进行创建.查询.更新和删除数据操作.不同的存 ...

  3. JavaScript操作数据库JS操作Access数据库

    avaScript操作数据库JS操作Access数据库,跟其他语言操作差不多,总结了一下习惯代码,仅供参考学习.现在在F盘有文件abc.mdf,表名为Student,一共2个字段,Id数字类型主键,s ...

  4. 记一次asp.net core 在iis上运行抛出502.5错误

    asp.net core 在iis上运行抛出502.5异常的部分原因以及解决方案 环境说明 已安装 .net core runtime 2.1.401 已安装 .net core windows ho ...

  5. Python的日志功能

    python自带的logging是日志处理模块,可以记录日志,并输出到控制台和文件等.日志分5个级别:DEBUG:调试信息,权重10INFO:一般信息,权重20WARNING:警告信息,权重30ERR ...

  6. 使用JAVAScript技术在WEB网页实现摇一摇的应用

    实现效果如下: 代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...

  7. 抓包工具 tcpdump 用法说明

    tcpdump采用命令行方式对接口的数据包进行筛选抓取,其丰富特性表现在灵活的表达式上. 不带任何选项的tcpdump,默认会抓取第一个网络接口,且只有将tcpdump进程终止才会停止抓包. 例如: ...

  8. Jetbrain系列编辑器设置忽略目录(node_moudles)

    使用Vue 或React开发,或者nodejs开发,用Idea/Webstrom 打开项目的时候,Updating Indexes到node_moudles目录的时候 会很慢很慢很慢.... 可以设置 ...

  9. 6.1 Spark SQL

    一.从shark到Spark SQL Hive能够把SQL程序转换成map-reduce程序   可以把Hadoop中的Hive看作是一个接口,主要起到了转换的功能,并没有实际存储数据. Shark即 ...

  10. 03webpack--输入webpack--自动打包

    如何实现时时跟新我写的代码 此时就需要有一个配置文件了 webpack.config.js这个文件 这个文件是在跟目录下哦 webpack是基于node去构建的 所以你的依法和node还是很相似的哦 ...