Jetty9架构解析-安装和启动
来源:互联网 发布:倪妮和angelababy 知乎 编辑:程序博客网 时间:2024/05/16 12:56
1.2. 安装和启动
1.2.1. Jetty下载、安装
你可以从http://www.eclipse.org/jetty/download.html下载最新的Jetty发布包,本书基于最新的9.3.x(9.3.11.v20160721)讲解,你可以根据需要下载zip或者tgz格式的压缩包。
Jetty是免安装的,直接将其解压到指定目录即可使用。
1.2.2. Jetty目录介绍
进入Jetty目录,我们会发现Jetty主要包含了以下目录和文件,针对这些目录和文件我们做一个简单的介绍,以便我们后续章节的讲解:
1.2.3. Jetty启动
通常情况下,我们可以通过运行start.jar来启动Jetty,除此之外,在Linux/Unix下,还可以通过bin/jetty.sh脚本启动,下面我们分别介绍一下这两种启动方式。
注意:在启动Jetty之前,首先需要确保当前操作系统已经安装了JDK1.8,同时配置了JAVA_HOME环境变量。
start.jar
这是通用的也是最灵活的Jetty启动方式。无论Windows还是Linux,均可以执行以下命令启动Jetty:
cd $JETTY_HOMEjava -jar start.jar
注意:与Tomcat类似,在Jetty中也存在两个常用目录变量:1、安装目录,可通过系统属性jetty.home获取该路径,本书由JETTY_HOME表示;2、Jetty实例的基础路径,该路径保存了Jetty实例的配置以及部署目录等,可通过系统属性jetty.base获取该路径,本书由JETTY_BASE表示。通过这种机制,可以将Jetty实例的配置以及Web应用与Jetty安装目录分离,从而最小化升级Jetty造成的中断。
运行命令后,将看到控制台输出以下信息,即表示Jetty启动成功:
2016-09-18 17:54:01.807:INFO::main: Logging initialized @1246ms2016-09-18 17:54:02.009: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.html2016-09-18 17:54:02.477:INFO:oejs.Server:main: jetty-9.3.11.v201607212016-09-18 17:54:02.509:INFO:oejdp.ScanningAppProvider:main: Deployment monitor [file:///C:/jetty/webapps/] at interval 12016-09-18 17:54:02.649:INFO:oejs.AbstractConnector:main: Started ServerConnect-or@5f375618{HTTP/1.1,[http/1.1]}{0.0.0.0:8080}2016-09-18 17:54:02.665:INFO:oejs.Server:main: Started @2097ms
由于我们是在Jetty安装目录下启动Jetty,因此Web应用的部署目录为$JETTY_HOME/webapps。当我们不指定端口时,Jetty的默认启动端口为8080。
我们在浏览器中输入http://127.0.0.1:8080,可以看到如下界面:
这是因为我们没有部署任何应用,所以请求处理失败。
Jetty并不推荐我们在JETTY_HOME目录下启动服务器,而是从JETTY_BASE目录启动。为了贯彻这一理念,Jetty在发布包中提供了一个用于演示的BASE目录:JETTY_HOME/demo-base,通过它可以演示Jetty推荐的启动方式。
执行以下命令,将JETTY_HOME/demo-base/作为JETTY_BASE启动Jetty:
cd $JETTY_HOME/demo-base/java -jar $JETTY_HOME/start.jar
从启动日志,我们可以发现如下信息:
- Web应用部署目录变为JETTY_HOME/demo-base/webapps。
- Jetty默认的临时目录为系统临时目录(使用的是java.io.tmpdir环境变量的值)。当然,临时目录可以通过不同的方式进行变更,具体可以见本书第3章。
对WAR包的处理与Tomcat不同。Jetty并未将WAR直接解压到部署目录,而是在临时目录下生成了相关的解压文件,这种方式使得部署目录更清晰和易于维护。
demo-base默认部署了六个应用(除ROOT),用于演示不同的功能特性,部署目录中除了包含相关的WAR包外还有各个应用的配置文件(Jetty应用部署形式见本书第2章)。
在浏览器中输入http://127.0.0.1:8080,可以看到如下界面:
注意:demo-base下的Web应用仅用于演示,当生产环境部署Jetty时,务必将其删除。
start.jar的基本命令格式如下:
java -jar start.jar [选项...] [属性...] [配置...]
它支持多个选项用于完成不同的操作,主要如下:
除了以上选项,start.jar还支持设置属性(格式如“name=value”),这些属性会影响Jetty的启动机制。常见的属性如:jetty.home、jetty.base、jetty.http.host、jetty.http.port等,其它属性我们在后续章节相关部分会进行说明。
既然已经了解start.jar,那么我们如何手动创建一个新的Jetty基础目录并启动?这对于Jetty来说非常简单。
首先,创建一个空目录:
mkdir /opt/jetty/new_base
接下来,进入目录并启动:
cd /opt/jetty/new_basejava -jar $JETTY_HOME/start.jar
我们会看到如下提示:
WARNING: Nothing to start, exiting ...Usage: java -jar start.jar [options] [properties] [configs] java -jar start.jar --help # for more information
这是因为当前目录没有初始化任何配置。我们可以执行以下命令来添加默认启动模块:
java -jar $JETTY_HOME/start.jar --add-to-startd=http,deploy
或者
java -jar $JETTY_HOME/start.jar --add-to-start=http,deploy
再次启动Jetty,我们会看到如下日志:
2016-10-08 17:30:50.839:INFO::main: Logging initialized @387ms2016-10-08 17:30:51.010:INFO:oejs.Server:main: jetty-9.3.11.v201607212016-10-08 17:30:51.027:INFO:oejdp.ScanningAppProvider:main: Deployment monitor [file:///opt/jetty/new_base/webapps/] at interval 12016-10-08 17:30:51.045:INFO:oejs.AbstractConnector:main: Started ServerConnector@56cbfb61{HTTP/1.1,[http/1.1]}{0.0.0.0:8080}2016-10-08 17:30:51.046:INFO:oejs.Server:main: Started @594ms
我们可以将Web应用拷贝到/opt/jetty/new_base/webapps/目录下进行部署。
通过以上过程可以知道,Jetty通过命令行可以很容易的完成基础目录的初始化(模块按需指定)以及Web应用部署,这给Jetty服务器实例的维护带来了极大的便利。结合动态的端口分配(由jetty.http.port属性指定),我们可以非常方便的在一台物理机上批量初始化和运行Jetty实例。
jetty.sh
在Linux/Unix系统下,Jetty提供了一个Shell脚本文件(JETTY_HOME/bin/jetty.sh)用来启动/停止Jetty服务器(类似于Tomcat),因此我们还可以通过以下命令启动Jetty:
.$JETTY_HOME/bin/jetty.sh start
$JETTY_HOME替换为Jetty的安装目录,当然,你也可以直接进到bin目录下执行。
jetty.sh脚本支持以下选项以完成不同操作:
默认情况下,jetty.sh方式启动时,JETTY_BASE为Jetty服务器的安装目录,我们可以通过编辑jetty.sh文件,在顶部添加如“JETTY_BASE=/opt/jetty-base”,将JETTY_BASE变更为自己希望的目录(当然在这之前,我们需要确保已对该目录进行了初始化)。
1.2.4 Jetty系统服务
Linux系统服务
使用过Nginx服务器的人都知道,在Linux系统下,我们可以直接通过系统服务来启动和停止Nginx,这种操作方式更加简便和快捷。通过jetty.sh,我们也可以将Jetty设置为Linux系统服务。只需要以root权限执行以下命令即可(假设Jetty安装目录为“/opt/jetty”):
cp /opt/jetty/bin/jetty.sh /etc/init.d/jettyecho JETTY_HOME=`pwd` > /etc/default/jetty
添加成功后,执行以下命令查看效果:
service jetty start
如1.2.3所述,大多数情况下,Jetty推荐单独设置JETTY_BASE用作实例的配置和部署目录,此时,我们只需要在/etc/default/jetty添加对应参数即可(假设Jetty实例基础目录为“/opt/jetty-base”,注意需要确保该目录已经进行了Jetty配置初始化):
cp /opt/jetty/bin/jetty.sh /etc/init.d/jettyecho JETTY_HOME=`pwd` > /etc/default/jettyecho "JETTY_BASE=/opt/jetty-base" >> /etc/default/jetty
当然,我们还可以用同样的方式添加其它初始变量,如临时目录变量TMPDIR。
Windows系统服务
与Tomcat提供了Windows可执行文件以及service.bat(添加Tomcat为系统服务的脚本)不同,Jetty要添加为Windows系统服务相对比较复杂。
首先,由于Jetty并未提供可执行文件,因此需要依赖第三方程序进行封装,官方推荐的是Apache ProcRun 。
其次,我们需要像Tomcat一样编写一个bat脚本来添加系统服务,幸运的是我们不需要从零开始,只需要基于官方文档提供的示例脚本稍加修改即可:
@echo off set SERVICE_NAME=JettyService set JETTY_HOME=C:\opt\jetty set JETTY_BASE=C:\opt\jetty-base set STOPKEY=secret set STOPPORT=50001 set PR_INSTALL=C:\opt\prunsrv.exe @REM Service Log Configuration set PR_LOGPREFIX=%SERVICE_NAME% set PR_LOGPATH=C:\opt\jetty-logs set PR_STDOUTPUT=auto set PR_STDERROR=auto set PR_LOGLEVEL=Debug @REM Path to Java Installation set JAVA_HOME=C:\Program Files\Java\jdk1.8.0 set PR_JVM=%JAVA_HOME%\jre\bin\server\jvm.dll set PR_CLASSPATH=%JETTY_HOME%\start.jar;%JAVA_HOME%\lib\tools.jar @REM JVM Configuration set PR_JVMMS=128 set PR_JVMMX=512 set PR_JVMSS=4000 set PR_JVMOPTIONS=-Duser.dir="%JETTY_BASE%";-Djava.io.tmpdir="C:\opt\jetty-temp";-Djetty.home="%JETTY_HOME%";-Djetty.base="%JETTY_BASE%" @REM Startup Configuration set JETTY_START_CLASS=org.eclipse.jetty.start.Main set PR_STARTUP=auto set PR_STARTMODE=java set PR_STARTCLASS=%JETTY_START_CLASS% set PR_STARTPARAMS=STOP.KEY="%STOPKEY%";STOP.PORT=%STOPPORT% @REM Shutdown Configuration set PR_STOPMODE=java set PR_STOPCLASS=%JETTY_START_CLASS% set PR_STOPPARAMS=--stop;STOP.KEY="%STOPKEY%";STOP.PORT=%STOPPORT%;STOP.WAIT=10 "%PR_INSTALL%" //IS/%SERVICE_NAME% ^ --DisplayName="%SERVICE_NAME%" ^ --Install="%PR_INSTALL%" ^ --Startup="%PR_STARTUP%" ^ --LogPath="%PR_LOGPATH%" ^ --LogPrefix="%PR_LOGPREFIX%" ^ --LogLevel="%PR_LOGLEVEL%" ^ --StdOutput="%PR_STDOUTPUT%" ^ --StdError="%PR_STDERROR%" ^ --JavaHome="%JAVA_HOME%" ^ --Jvm="%PR_JVM%" ^ --JvmMs="%PR_JVMMS%" ^ --JvmMx="%PR_JVMMX%" ^ --JvmSs="%PR_JVMSS%" ^ --JvmOptions="%PR_JVMOPTIONS%" ^ --Classpath="%PR_CLASSPATH%" ^ --StartMode="%PR_STARTMODE%" ^ --StartClass="%JETTY_START_CLASS%" ^ --StartParams="%PR_STARTPARAMS%" ^ --StopMode="%PR_STOPMODE%" ^ --StopClass="%PR_STOPCLASS%" ^ --StopParams="%PR_STOPPARAMS%" if not errorlevel 1 goto installed echo Failed to install "%SERVICE_NAME%" service. Refer to log in %PR_LOGPATH% goto end :installed echo The Service "%SERVICE_NAME%" has been installed :end
注意加粗部分,我们需要指定Jetty、Apache ProcRun、Java的安装目录,Jetty实例的基础目录、临时目录、日志目录等。
该脚本执行成功后,我们可以在Windows系统服务界面看到名为“JettyService”服务,并在该界面启动/停止Jetty。
虽然采用系统服务的方式启动Jetty比较便捷,而且也便于那些不熟悉Java的运维人员使用,但是它的缺点也非常明显,由于$JETTY_BASE是固定的,因此我们无法像start.jar一样灵活启动多个实例。
- Jetty9架构解析-安装和启动
- Jetty9架构解析-安装和启动
- Jetty9架构解析-安装和启动
- Jetty9架构解析-目录
- Jetty9架构解析-Jetty介绍
- Jetty9架构解析-Jetty配置及部署
- linux 下安装jdk8和Jetty9.4.6
- Jetty9架构解析-Jetty配置及部署(二)
- centos 安装jetty9
- jetty9安装配置
- jetty9.2.6 嵌入式启动二
- 关于ubuntu16.04中安装jetty9后,启动服务出现找不到jdk问题
- jetty9.2.6 安装 部署 运行
- ubuntu server 14安装jetty9
- centos7安装jetty9.3.10笔记
- jetty9.4.5安装部署文档
- fastDFS架构解析和安装测试教程
- 嵌入式jetty9启动标准webapp目录
- leetcode——backtracking and array 递归类问题
- 黑蝙蝠中队
- Spring学习笔记01
- Centos7 开放端口
- Mac 基础教程:如何让 Finder 显示隐藏文件和文件夹
- Jetty9架构解析-安装和启动
- Remove Nth Node From End of List(java实现)
- Dispatcher initialization failed Unable to load configuration.
- 如何在项目中引入oscache(二)
- 《深度探索C++对象模型》:简单对象模型、表格驱动模型、C++对象模型
- 学习ArcGis for Android一些类图关系笔记
- 程序员"小抄"集合
- 远程线程注入(一)编写动态链接库
- keil软件调试STM32,想通过logic analyser查看引脚输出的pwm波时,出现unknown singal的解决方法