jetty(官方文档翻译9.2)

Start

和tomcat相比

  1. Jetty更轻量级
  2. Jetty更灵活,体现在其可插拔性和可扩展性,更易于开发者对Jetty本身进行二次开发,定制一个适合自身需求的Web Server。
  3. 当支持大规模企业级应用时,Jetty也许需要扩展,在这场景下Tomcat便是更优的。
    总结:Jetty更满足公有云的分布式环境的需求,而Tomcat更符合企业级环境。

版本选择

下载地址:http://central.maven.org/maven2/org/eclipse/jetty/jetty-distribution/
在这里插入图片描述

In Maven

7.0之前:http://mvnrepository.com/artifact/org.mortbay.jetty/jetty 
<dependency>
    <groupId>org.mortbay.jetty</groupId>
    <artifactId>jetty</artifactId>
    <version>7.0.0.pre5</version>
</dependency>
7.0之后:http://central.maven.org/maven2/org/eclipse/jetty/jetty-project/ 
<dependency>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-project</artifactId>
  <version>${project.version}</version>
</dependency>

启动-win

C:\Users\liuli>cd D:\jetty\jetty-distribution-9.2.9
C:\Users\liuli>d:
D:\jetty\jetty-distribution-9.2.9>java -jar start.jar

在这里插入图片描述

启动-linux

tar -zxvf jetty-distribution-9.2.9.v20150224.tar.gz
mv jetty-distribution-9.2.9.v20150224 jetty-distribution-9.2.9
配置环境变量(可选)
vim /etc/profile
export JETTY_HOME=/home/jetty-distribution-9.2.9
#source /etc/profile
启动:
#cd $JETTY_HOME
#java -jar start.jar
or
#java -jar $JETTY_HOME/start.jar
指定端口
#java -jar $JETTY_HOME/start.jar jetty.port=8081   
#java -jar $JETTY_HOME/start.jar jettys.port=8843

Configuration

查看系统配置:

#java -jar start.jar --list-config

配置顺序:
ini files
mod files
XML files
web.xml
Property Files
配置服务器【org.eclipse.jetty.server.Server etc/jetty.xml】:
ThreadPool
Handlers
Server Attributes
Server fields
Connectors (etc/jetty-https.xml)
Services
配置连接器【etc/jetty-http.xml, jetty-https.xml和 jetty-spdy.xm】
Port
Host
Idle Timeout(空闲超时)
HTTP Configuration
SSL Context Factory
配置上下文(${jetty.base}/webapps/myjetty.xml)
contextPath (设置war路径)
virtualHost(用于绑定域名)
classPath()
attributes(参数配置)
resourceBase(静态资源的目录)

Logging配置

查找方式:
首先从一个Classpath Resource调用 jetty-logging.properties(如果找到)。
然后从System.getProperties()。
配置
在 ${jetty.base}/start.ini 添加 --module=logging
在这里插入图片描述

启动:
日志输出的默认配置将创建一个文件${jetty.logs}/yyyy_mm_dd.stderrout.log
参考:
${jetty.base}/jetty.conf
${jetty.base}/jetty-logging.xml

默认部署

临时目录
Jetty本身没有临时目录,在根下创建work
将WAR文件放入${jetty.base}/webapps/目录中
http://{host}:8080/{warname}/
在这里插入图片描述

访问路径

“jetty-”+host+"-"+port+"-"+resourceBase+"-_"+context+"-"+virtualhost+"-"+randomdigits+".dir"

在这里插入图片描述

自定义部署

指定目录:
${jetty.base}/webapps/目录中,创建xml文件(为方便识别,最好用项目名称myjetty.xml)
在这里插入图片描述

文件服务器

${jetty.home}/webapps/scratch.xml
在这里插入图片描述

在这里插入图片描述

<Set name="directoriesListed">false</Set>

在这里插入图片描述

绑定域名

绑定域(可以是多个):

  <Set name="virtualHosts">
    <Array type="java.lang.String">
      <Item>www.test.com</Item>
    </Array>
  </Set>

修改端口

start.ini   
## HTTP port to listen on
jetty.port=8080

动态部署

路径:${jetty.home}/webapps/
${jetty.home}/etc/jetty-deploy.xml
在这里插入图片描述
monitoredDirName要扫描Web应用程序的目录的文件路径或URL。
scanInterval用于更改的扫描周期(以秒为单位)
extractWars 如果参数为true,则任何打包的WAR或zip文件在部署前首先被提取到临时目录。如果Web应用程序中存在未编译的JSP,设置为true

FormSize

Max Form Size 限制客户到服务器提交数据大小,有助于保护服务器免受发送大量数据的恶意客户端的拒绝服务攻击.。默认200000字节

<Configure class="org.eclipse.jetty.webapp.WebAppContext">
  <!-- - - - - - - - - - - - - - - - - - - - - - - - -- - -->
  <!-- Max Form Size  -->
  <!-- - - - - - - - - - - - - - - - - - - - - - -->
  <Set name="maxFormContentSize">200000</Set>
</Configure>

https

所有密码:123456
相关文件: start.ini etc/jetty-ssl.xml etc/jetty-https.xml
• dname的值详解:
  CN(Common Name名字与姓氏【域名】)
  OU(Organization Unit组织单位名称)
  O(Organization组织名称)
  L(Locality城市或区域名称)
  ST(State州或省份名称)
  C(Country国家名称)
一、生成密钥对和证书
使用JDK的keytool生成密钥和证书
(以下命令直接将密钥对和证书生成到文件中keystore:)
#keytool -keystore keystore -alias jetty -validity 3650 -genkey -keyalg RSA
您现在具有运行SSL连接的最低要求,并可以直接进行配置SSL连接器
使用xml
修改start.ini 在 jetty.dump.stop=:后添加:
etc/jetty-ssl.xml
etc/jetty-https.xml
修改端口etc/jetty-https.xml:
注意:https默认端口为443 ,如果启动不起来,看下是否被占用,建议修改成其他,这里使用8843
在这里插入图片描述
启动(系统默认证书)
在这里插入图片描述
配置证书etc/jetty-ssl.xml:
在这里插入图片描述
1.替换 /etc/keystore文件
2.在配置文件中修改证书的密码
在这里插入图片描述
使用start.ini

--module=ssl
jetty.secure.port=8443
jetty.keystore=etc/keystore
jetty.truststore=etc/keystore
jetty.keystore.password=OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4
jetty.keymanager.password=OBF:1u2u1wml1z7s1z7a1wnl1u2g
jetty.truststore.password=OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4

密码安全

$ java -cp lib/jetty-util-$JETTY_VERSION.jar org.eclipse.jetty.util.security.Password
Usage - java org.eclipse.jetty.util.security.Password [<user>] <password>
If the password is ?, the user will be prompted for the password
#java -cp lib/jetty-util-9.2.9.v20150224.jar org.eclipse.jetty.util.security.Password jrtty 123456

在这里插入图片描述

123456
OBF:19iy19j019j219j419j619j8
MD5:e10adc3949ba59abbe56e057f20f883e
CRYPT:jrBNjeORtvBWo

(https配置安全升级)
在这里插入图片描述

linux-进程管理

#ps -ef|grep java
#ps -ef|grep jetty
#kill -9 
#killall java

nginx+jetty+https

参考 https://github.com/472732787/jetty

Administration

start

start.jar
服务类路径
# java -jar start.jar --list-classpath
启用的模块
# java -jar start.jar --list-modules
查看系统配置:
# java -jar start.jar --list-config
其他(# java -jar start.jar --help)
--version
--dry-run
--exec
--start-log-file=<filename> 
--module=<name>,(<name>)*
-add-to-start=<name>,(<name>)*
--add-to-startd=<name>,(<name>)*
--write-module-graph=<filename>
--stop
     STOP.PORT=<number> 
STOP.KEY=<alphanumeric>
STOP.WAIT=<number>

init.sh

# cp bin/jetty.sh /etc/init.d/jetty
#在jetty根目录下执行
# echo JETTY_HOME=`pwd` > /etc/default/jetty 
#(可在在所有目录下执行,前提是配置了JETTY_HOME)
# echo JETTY_HOME=$JETTY_HOME > /etc/default/jetty
# cat /etc/default/jetty (查看结果)

在这里插入图片描述

启动# service jetty start

在这里插入图片描述

prunsrv.exe

prunsrv 配置为windows 服务
http://commons.apache.org/proper/commons-daemon/procrun.html 
安装服务(//IS)
prunsrv //IS//TestService --DisplayName="Test Service" \
        --Install=prunsrv.exe --Jvm=auto --StartMode=jvm --StopMode=jvm \
        --StartClass=org.apache.SomeStartClass --StartParams=arg1;arg2;arg3 \
        --StopClass=org.apache.SomeStopClass --StopParams=arg1#arg2
更新服务(//US)
prunsrv //US//TestService --Description="Some Dummy Service" \
        --Startup=auto --Classpath=%CLASSPATH%;test.jar
删除服务(//DS)
prunsrv //DS//TestService
测试服务(//TS)
prunsrv //TS//TestService [additional arguments]

init.bat

安装为一个win服务 install-jetty-service.bat

  1. 配置路径
C:\>mkdir opt
C:\>cd opt
C:\opt>mkdir jetty logs myappbase temp
C:\opt>dir

在这里插入图片描述
2. 安装jdk
3. 获取ProcRun(commons-daemon-1.0.15-bin-windows.zip)
把prunmgr.exe 和 prunsrv.exe
在这里插入图片描述
4. 解压jetty 到C:\opt\jetty
在这里插入图片描述
5. 初始化工作目录

cd myappbase java -jar …\jetty\start.jar
–add-to-start=deploy,http,logging

在这里插入图片描述

  1. 配置脚本并执行(注意要已管理员身份运行)
@echo off
set SERVICE_NAME=JettyService
set JETTY_HOME=C:\opt\jetty
set JETTY_BASE=C:\opt\myappbase
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\logs
set PR_STDOUTPUT=auto
set PR_STDERROR=auto
set PR_LOGLEVEL=Debug
 
@REM Path to Java Installation
set JAVA_HOME=D:\DataBase\Java1.7\jdk1.7.0_79
set PR_JVM=D:\DataBase\Java1.7\jre7\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\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

效果
在这里插入图片描述

SERVICE_NAME
这是Windows看到的服务的名称。“服务”窗口中的名称将显示该名称。
STOPKEY
这是ShutdownMonitor的密钥(密码),用于发出停止服务器的正式命令。
STOPPORT
Shutdown Monitor侦听停止命令的端口。
如果您在同一台计算机上有多个Jetty服务器,则每个服务的此端口将需要不同
使用:

net start JettyService
net stop JettyService
net restart JettyService

在这里插入图片描述

JNDI

(Java Naming and Directory Interface,Java命名和目录接口)
启用:--module=jndi  【start.ini】
       或
java -jar ../start.jar --add-to-startd=jndi
数据源
**mysql**
<New id="DSTest" class="org.eclipse.jetty.plus.jndi.Resource">
   <Arg></Arg>
   <Arg>jdbc/DSTest</Arg>
   <Arg>
      <New class="com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource">
         <Set name="Url">jdbc:mysql://localhost:3306/databasename</Set>
         <Set name="User">user</Set>
         <Set name="Password">pass</Set>
      </New>
   </Arg>
  </New>
**oracle**
<New id="DSTest" class="org.eclipse.jetty.plus.jndi.Resource">
  <Arg></Arg>
  <Arg>jdbc/DSTest</Arg>
  <Arg>
    <New class="oracle.jdbc.pool.OracleDataSource">
      <Set name="DriverType">thin</Set>
      <Set name="URL">jdbc:oracle:thin:@fmsswdb1:10017:otcd</Set>
      <Set name="User">xxxx</Set>
      <Set name="Password">xxxx</Set>
      <Set name="connectionCachingEnabled">true</Set>
      <Set name="connectionCacheProperties">
        <New class="java.util.Properties">
          <Call name="setProperty">
            <Arg>MinLimit</Arg>
            <Arg>5</Arg>
          </Call>
          <!-- put the other properties in here too -->
        </New>
      </Set>
    </New>
  </Arg>
</New>

Optimizing

【调整JVM垃圾收集(GC)可以极大地改善Jetty的性能,GC的最佳调整取决于应用程序的行为,需要详细的分析,但有一般的建议。】

要打印用于配置JVM的隐式标志:
-XX:+ PrintCommandLineFlags
禁用RMI定期执行的显式GC:
-XX:+ DisableExplicitGC
打印详细信息GC活动的日期和时间戳:
-XX:+ PrintGCDateStamps \ 
-XX:+ PrintGCTimeStamps \ 
-XX:+ PrintGCDetails \ 
-XX:+ PrintTenuringDistribution
将GC详细信息记录到文件中:
-Xloggc:[path/to/gc.log]
以较少的细节打印GC活动:
-verbose:gc
要在80%的老一代满的情况下使用完全GC的并发marksweep GC:
-XX:+UseConcMarkSweepGC \
-XX:CMSInitiatingOccupancyFraction=80

Session 持久化

持久化(如果启用持久性,则在关闭完成之前将所有现有的有效会话保存到磁盘。在重新启动时,Jetty恢复保存的会话)

<Set name="sessionHandler">
    <New class="org.eclipse.jetty.server.session.SessionHandler">
      <Arg>
        <New class="org.eclipse.jetty.server.session.HashSessionManager">
         <Set name="storeDirectory">your/chosen/directory/goes/here</Set>
        </New>
      </Arg>
    </New>
  </Set>

延时加载(确保在servlet环境启动之后加载会话):

<Set name="lazyLoad">true</Set>

在Jetty Maven启用

<plugin>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-maven-plugin</artifactId>
  <version>9.0.0.RC2 (or current version)</version>
  <configuration>
    <!-- ... -->
    <webAppConfig implementation="org.eclipse.jetty.maven.plugin.JettyWebAppContext">
      <defaultsDescriptor>${project.build.outputDirectory}/META-INF/webdefault.xml</defaultsDescriptor>
      <contextPath>${jetty.contextRoot}</contextPath>
      <sessionHandler implementation="org.eclipse.jetty.server.session.SessionHandler">
        <sessionManager implementation="org.eclipse.jetty.server.session.HashSessionManager">
          <storeDirectory>${project.basedir}/target/jetty-sessions</storeDirectory>
          <idleSavePeriod>1</idleSavePeriod>
        </sessionManager>
      </sessionHandler>
    </webAppConfig>
    <!-- ... -->
  </configuration>
</plugin>

Session 共享

准备:

  1. 部署2个应用(myjetty.war 端口分别 8060 800,分别访问查看效果)
    http://localhost:8060/HelloServlet?name=liuli
    http://localhost:8070/HelloServlet?name=liuli
  2. 用nginx做负载,之后访问查看效果
    http://localhost/HelloServlet?name=liuli

Mongodb

准备:配置好mongodb 并启动

  1. 在jetty.xml配置(org.eclipse.jetty.nosql.mongodb.MongoSessionIdManager)
<!--mongodb  session共享  start-->
<New id="mongodb" class="com.mongodb.MongoClient">
    <Arg type="java.lang.String">127.0.0.1</Arg>
    <Arg type="int">27017</Arg>
    <Call name="getDB">
        <Arg>jetty_session</Arg>
        <Call id="sessionDocument" name="getCollection">
            <Arg>jetty_session_collection</Arg>
        </Call>
    </Call>
</New>
<Set name="sessionIdManager">
    <New id="mongoIdMgr" class="org.eclipse.jetty.nosql.mongodb.MongoSessionIdManager">
        <Arg>
            <Ref id="Server" />
        </Arg>
        <Arg>
            <Ref id="sessionDocument" />
        </Arg>
        <Set name="workerName">fred</Set>
        <Set name="scavengePeriod">60</Set>
    </New>
</Set>
<Call name="setAttribute">
    <Arg>mongoIdMgr</Arg>
    <Arg>
        <Ref id="mongoIdMgr" />
    </Arg>
</Call>
<!--mongodb  session共享   end -->	 

  1. 配置应用映射(myjetty.xml)
   <!--mongodb  session共享  start-->  
 <Ref name="Server" id="Server">
    <Call id="mongoIdMgr" name="getSessionIdManager"/>
  </Ref>
<Set name="sessionHandler">
  <New class="org.eclipse.jetty.server.session.SessionHandler">
    <Arg>
      <New id="mongoMgr"  class="org.eclipse.jetty.nosql.mongodb.MongoSessionManager">
        <Set name="sessionIdManager">
          <Ref id="mongoIdMgr"/>
        </Set>
      </New>
    </Arg>
  </New>
</Set>
 <!--mongodb  session共享   end -->

DB

不推荐

Redis

https://github.com/ovea-deprecated/jetty-session-redis 2012之后就没更新了,不推荐使用。

本文中用到的脚本,资料 请移步:https://github.com/472732787/jetty

参考资料:
http://www.eclipse.org/jetty/documentation/current/ 当前版本
http://www.eclipse.org/jetty/previousversions.html 历史版本
http://www.eclipse.org/jetty/documentation/9.2.22.v20170531/ 9.2版本
http://www.eclipse.org/jetty/documentation/9.3.22.v20171030/ 9.3版本
文档下载:
http://central.maven.org/maven2/org/eclipse/jetty/jetty-documentation/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Jetty 欢迎访问Jetty文档 Wiki. Jetty是一个开源项目,提供了http服务器、http客户端和java servlet容器。 这个wiki提供jetty的入门教程、基础配置、功能特性、优化、安全、JavaEE、监控、常见问题、故障排除帮助等等。它包含教程、使用手册、视频、特征描述、参考资料以及常见问题。 Jetty文档 ---------------- 入门: 下载Download, 安装, 配置, 运行 Jetty入门(视频) 下载和安装Jetty 如何安装一个Jetty包 如何配置Jetty – 主要文档 如何运行Jetty 用JConsole监控Jetty 如何使用Jetty开发 Jetty HelloWorld教程 Jetty和Maven HelloWorld教程 Jetty(6)入门 (www.itjungle.com) Jetty Start.jar 配置Jetty 如何设置上下文(Context Path) 如何知道使用了那些jar包 如何配置SSL 如何使用非root用户监听80端口 如何配置连接器(Connectors) 如何配置虚拟主机(Virtual Hosts) 如何配置会话ID(Session IDs) 如何序列化会话(Session) 如何重定向或移动应用(Context) 如何让一个应用响应一个特定端口 使用JNDI 使用JNDI 在JNDI中配置数据源(DataSource) 内嵌Jetty服务器 内嵌Jetty教程 内嵌Jetty的HelloWorld教程 内嵌Jetty视频 优化Jetty 如何配置垃圾收集 如何配置以支持高负载 在Jetty中部署应用 部署管理器 部署绑定 热部署 Context提供者 如何部署web应用 webApp提供者 如何部署第三方产品 部署展开形式的web应用 使用Jetty进行开发 如何使用Jetty进行开发 如何编写Jetty中的Handlers 使用构建工具 如何在Maven中使用Jetty 如何在Ant中使用Jetty Maven和Ant的更多支持 Jetty Maven插件(Plugin) Jetty Jspc Maven插件(Plugin) Maven web应用工程原型 Ant Jetty插件(Plugin) 使用集成开发环境(IDEs) 在Eclipse中使用Jetty 在IntelliJ中使用Jetty 在Eclipse中工作 在Eclipse中开发Jetty Jetty WTP插件(Plugin) JettyOSGi SDK for Eclipse-PDE EclipseRT Jetty StarterKit SDK OSGi Jetty on OSGi, RFC66 基于Jetty OSGi的产品 OSGi贴士 Equinox中使用Jetty实现HTTP Service Felix中使用Jetty实现HTTP Service PAX中使用Jetty实现HTTP Srevice ProSyst mBedded Server Equinox Edition Spring Dynamic Modules里的Jetty JOnAS5里的Jetty 配置Ajax、Comet和异步Servlets 持续和异步Servlets 100 Continue和102 Processing WebSocket Servlet 异步的REST Stress Testing CometD 使用Servlets和Filters Jetty中绑定的Servlets Quality of Service Filter Cross Origin Filter 配置安全策略(Security Policies) 安全领域(Security Realms) 安全域配置教程 Java Authentication and Authorization Service (JAAS) JAAS配置教程 JASPI 安全模型(Secure Mode) 存储在文件中的安全密码以及编程教程 如何开启或禁止Jetty中的SSL功能 如何在Jetty中安全存储密码 如何安全终止Jetty 如何配置Spnego Application Server Integrations(集成) Apache Geronimo JEE 配置Apache httpd和Jetty教程 配置Apache mod_proxy和Jetty 配置Jetty中的AJP13 在JBoss中配置Jetty Remote Glassfish EJBs from Jetty Jetty and Spring EJB3 (Pitchfork) JBoss EJB3 ObjectWeb EasyBeans
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值