jetty的安装和启动

Jetty是当下非常流行的一款轻量级Java Web服务器和Servlet容器实现,它由Eclipse基金会托管,完全免费而且开放源代码,因此所有人均可以从其官网下载最新源代码进行研究。由于其轻量、灵活的特性,Jetty被广泛用于一系列知名产品,例如ActiveMQ、Maven、Spark、Google App Engine、Eclipse、Hadoop等等。下面就来研究如何安装和启动jetty。
1.安装
http://www.eclipse.org/jetty/previousversions.html网址可以下载不同版本的jetty,不同版本要求的jdk版本是不同的,根据自己jdk版本进行下载,下载完成之后,直接解压就可以使用,解压之后的路径是:”/test/jetty/jetty-distribution-9.2.21.v20170120”,下面是这个路径下解压后目录和文件的解释。

目录作用
bin/用于存放jetty的启动脚本,目前仅提供liunx/unix下的脚本
demo-base/存放一个用于演示的工程
etc/jetty存放xml配置文件的目录
lib/存放jetty运行时依赖的jar包,包括jetty各个模块的jar包,可以说这里就是真正的jetty
logs/存放请求日志的目录
modules/模块定义目录,存放jetty模块定义文件(*.mod)
resources/存放类路径下的资源文件,比如log4j.xml,存放在这个目录下的文件在jetty启动时会被加入到classpath
start.ini存放命令行启动jetty时需要的一些列参数
start.jar用于启动jetty的jar文件
webapps运行于Jetty默认配置下的Web应用部署目录(一般实际部署应用会重新创建一个另外一个目录作为Jetty_base路径)

2.启动
一般情况下都可以通过start.jar包来启动jetty,除此之外,在linux/unix下还可以通过jetty.sh来进行启动.下面分别介绍着两种启动方式:
1) start.jar
这是最通用,也是最灵活的启动方式,无论是在linux下还是在unix下都可以通过这种方式进行启动

  cd $JETTY_HOME
  java -jar start.jar

上面的命令中涉及到了JETTY_HOME这个变量,表示的是jetty的安装目录,也就是”/test/jetty/jetty-distribution-9.2.21.v20170120”目录;在jetty中有两个常用的目录概念,第一个就是JETTY_HOME,表示的是jetty的安装目录,可以通过系统属性jetty.home来引用;第二个是jetty的实例路径,用JETTY_BASE代表,表示存放web应用及其配置文件的一个目录,可以通过系统属性jetty.base来引用,比如上面的demo-base其实就是一个JETTY_BASE目录。设置两个目录属性的好处在于将web应用程序及其配置和jetty安装目录相分离,从而实现最小化jetty升级的影响。启动之后可以看到下面的输出信息:

2017-11-30 21:47:44.156:INFO::main: Logging initialized @367ms
2017-11-30 21:47:44.199:WARN:oejs.HomeBaseWarning:main: This instance of Jetty is not running from a separate {jetty.base} directory, this is not recommended.  See documentation at http://www.eclipse.org/jetty/documentation/current/startup.html
2017-11-30 21:47:44.327:INFO:oejs.Server:main: jetty-9.2.21.v20170120
2017-11-30 21:47:44.343:INFO:oejdp.ScanningAppProvider:main: Deployment monitor [file:/test/jetty/jetty-distribution-9.2.21.v20170120/webapps/] at interval 1
2017-11-30 21:47:44.362:INFO:oejs.ServerConnector:main: Started ServerConnector@25e9a396{HTTP/1.1}{0.0.0.0:9800}
2017-11-30 21:47:44.363:INFO:oejs.Server:main: Started @574ms

从信息中我们可以web应用的部署目录为$JETTY_HOME/webapps,启动端口是9800,其实默认的jetty启动端口是8080,这里的9800是另外配置的。还可以看到jetty提示应该从JETTY_BASE目录下进行部署,而不是直接在安装目录下进行部署。我们可以进入存放演示工程的demo-base目录再进行一次部署。下面是部署日志:

2017-11-29 20:36:18.832:INFO::main: Logging initialized @362ms
2017-11-29 20:36:19.067:WARN::main: demo test-realm is deployed. DO NOT USE IN PRODUCTION!
2017-11-29 20:36:19.070:INFO:oejs.Server:main: jetty-9.2.21.v20170120
2017-11-29 20:36:19.084:INFO:oejdp.ScanningAppProvider:main: Deployment monitor [file:/test/jetty/jetty-distribution-9.2.21.v20170120/demo-base/webapps/] at interval 1
2017-11-29 20:36:20.174:INFO:oejsh.ContextHandler:main: Started o.e.j.w.WebAppContext@5defbbf{/,file:/test/jetty/jetty-distribution-9.2.21.v20170120/demo-base/webapps/ROOT/,AVAILABLE}{/ROOT}
2017-11-29 20:36:20.313:WARN::main: test-spec webapp is deployed. DO NOT USE IN PRODUCTION!
Calling TestListener.contextInitialized
2017-11-29 20:36:20.450:INFO:oejsh.ContextHandler:main: Started o.e.j.w.WebAppContext@3fec9e59{/test-spec,[file:/private/var/folders/vp/3cqtvm496310hg9321jqh5dr0000gn/T/jetty-0.0.0.0-9800-test-spec.war-_test-spec-any-8174046145751790923.dir/webapp/, jar:file:/private/var/folders/vp/3cqtvm496310hg9321jqh5dr0000gn/T/jetty-0.0.0.0-9800-test-spec.war-_test-spec-any-8174046145751790923.dir/webapp/WEB-INF/lib/test-web-fragment-9.2.21.v20170120.jar!/META-INF/resources],AVAILABLE}{/test-spec.war}
2017-11-29 20:36:20.671:INFO:oejsh.ContextHandler:main: Started o.e.j.w.WebAppContext@41af39f0{/proxy,file:/private/var/folders/vp/3cqtvm496310hg9321jqh5dr0000gn/T/jetty-0.0.0.0-9800-xref-proxy.war-_xref-proxy-any-8156636816406605251.dir/webapp/,AVAILABLE}{/xref-proxy.war}
2017-11-29 20:36:20.757:WARN::main: test-jndi webapp is deployed. DO NOT USE IN PRODUCTION!
2017-11-29 20:36:20.826:INFO:oejsh.ContextHandler:main: Started o.e.j.w.WebAppContext@300ae308{/test-jndi,file:/private/var/folders/vp/3cqtvm496310hg9321jqh5dr0000gn/T/jetty-0.0.0.0-9800-test-jndi.war-_test-jndi-any-1314351555443006520.dir/webapp/,AVAILABLE}{/test-jndi.war}
2017-11-29 20:36:20.968:WARN::main: test webapp is deployed. DO NOT USE IN PRODUCTION!
2017-11-29 20:36:21.070:INFO:oejsh.:main: Started o.e.j.w.WebAppContext@412bc86d{/test,file:/private/var/folders/vp/3cqtvm496310hg9321jqh5dr0000gn/T/jetty-0.0.0.0-9800-test.war-_test-any-8161155482385980125.dir/webapp/,AVAILABLE}{/test.war}
2017-11-29 20:36:21.119:WARN::main: test-jaas webapp is deployed. DO NOT USE IN PRODUCTION!
2017-11-29 20:36:21.156:INFO:oejsh.ContextHandler:main: Started o.e.j.w.WebAppContext@4ec5e60d{/test-jaas,file:/private/var/folders/vp/3cqtvm496310hg9321jqh5dr0000gn/T/jetty-0.0.0.0-9800-test-jaas.war-_test-jaas-any-2704129059056436982.dir/webapp/,AVAILABLE}{/test-jaas.war}
2017-11-29 20:36:21.262:WARN::main: async-rest webapp is deployed. DO NOT USE IN PRODUCTION!
2017-11-29 20:36:21.294:INFO:oejsh.ContextHandler:main: Started o.e.j.w.WebAppContext@7ee28774{/async-rest,[file:/private/var/folders/vp/3cqtvm496310hg9321jqh5dr0000gn/T/jetty-0.0.0.0-9800-async-rest.war-_async-rest-any-7133942508641408007.dir/webapp/, jar:file:/private/var/folders/vp/3cqtvm496310hg9321jqh5dr0000gn/T/jetty-0.0.0.0-9800-async-rest.war-_async-rest-any-7133942508641408007.dir/webapp/WEB-INF/lib/example-async-rest-jar-9.2.21.v20170120.jar!/META-INF/resources],AVAILABLE}{/async-rest.war}
2017-11-29 20:36:21.300:INFO:oejsh.ContextHandler:main: Started o.e.j.s.h.MovedContextHandler@6a4554de{/oldContextPath,null,AVAILABLE}
2017-11-29 20:36:21.310:INFO:oejs.ServerConnector:main: Started ServerConnector@765d27b4{HTTP/1.1}{0.0.0.0:9800}
2017-11-29 20:36:21.323:INFO:oejs.ServerConnector:main: Started ServerConnector@28ef1ce5{SSL-http/1.1}{0.0.0.0:8443}
2017-11-29 20:36:21.323:INFO:oejs.Server:main: Started @2853ms

可以看到部署目录变成了$JETTY_HOME/demo-base/webapps,另外因为demo-base下的webapps下同时存在好几个应用,所以会有多个应用启动的信息。另外jetty不会将war包直接解压到部署目录,而是解压到了临时目录,jetty默认的临时目录为系统临时目录(使用的是java.io.tmpdir环境变量的值)。当然,临时目录可以通过不同的方式进行变更。
demo-base默认部署了六个应用(除ROOT),用于演示不同的功能特性,部署目录中除了包含相关的WAR包外还有各个应用的配置文件,见下图:
这里写图片描述
在浏览器中输入127.0.0.1:9800就可以看到ROOT中index.html定义好的页面。
这里写图片描述
start.jar的基本命令格式如下:

java -jar [选项...] [属性...] [配置...]

常见的选项配置如下:
这里写图片描述
这里写图片描述
除了上面的选择,start.jar还支持设置属性(格式如”key=value”),这些属性可以影响jetty的启动,常见的属性有jetty.home jetty.base,jetty.http.host jetty.port等。
上面已经提到可以自己创建JETTY_BASE目录,然后将应用部署到这个目录下,先在JETTY_HOME目录下创建一个base-test目录,然后在这个目录直接执行命令,这时候会报如下错误:

WARNING: Nothing to start, exiting ...

Usage: java -jar start.jar [options] [properties] [configs]
       java -jar start.jar --help  # for more information

这是因为还没对这个目录进行配置,参考下demo-base目录就会发现还缺少一些配置文件以及webapps目录,当然这些不需要我们手动创建,可以通过java -jar $JETTY_HOME/start.jar --add-to-startd=http,deployjava -jar $JETTY_HOME/start.jar --add-to-start=http,deploy添加启动模块,运行完命令之后,会在当前目录下新建start.d或start.ini和webapps目录。而在start.d目录下会新增http.ini deploy.ini server.ini三个配置文件,而webapps目录为空。如果这时候通过start.jar进行启动,我们看到的仍会是404页面,我们可以通过将web应用拷贝到webapps目录下去进行部署。
通过以上过程可以知道,Jetty通过命令行可以很容易的完成基础目录的初始化(模块按需指定)以及Web应用部署,这给Jetty服务器实例的维护带来了极大的便利。结合动态的端口分配(由jetty.port属性指定,可以作为start.jar的参数传入),我们可以非常方便的在一台物理机上批量初始化和运行Jetty实例。
2) jetty.sh
在linux下jetty还提供了一个脚本(JETTY_HOME/bin/jetty.sh)来进行jetty的启动,所以也可以通过下面的命令来启动jetty:./$JETTY_HOME/bin/jetty.sh start (注意权限问题),当然也可以直接进到jetty安装路径的bin目录下执行。jetty.sh可以接受的参数如下:
这里写图片描述

通过jetty.sh来启动jetty时,会默认将jetty的安装目录作为jetty.base路径,如果要修改,可以通过编辑jetty.sh文件,在顶部添加如“JETTY_BASE=/opt/jetty-base”,将JETTY_BASE变更为自己希望的目录(当然在这之前,我们需要确保已对该目录进行了初始化)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值