购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.6 Jetty

本节将介绍一款轻量级的Servlet容器—Jetty。Jetty具有开源、轻量级、高性能、可拔插等特点,深受互联网公司的喜爱。

Jetty实现了Java EE各个方面的规范,主要是Servlet规范。最近发布的Java EE平台引入了Web Profile,虽然Jetty本身并不提供所有Web Profile技术,但Jetty架构可以插入第三方实现,以生成根据用户需求定制的容器。

2.6.1 高性能Servlet容器

Jetty作为一款高性能的Web容器,非常适合大量连接和高并发的场景。其中,Jetty使用NIO(非阻塞IO)模式,这在某种程度上是Jetty作为高性能服务器的有力支点。

Jetty NIO组件由以下基本内容组成。

(1)EndPoint:网络上相互通信的对端实体抽象。

(2)Connection:网络实体通信连接的抽象。

(3)ByteBufferPool:缓冲区对象池。

(4)SelectChannelEndPoint:基于NIO模型描述的EndPoint封装。

(5)SelectorManager:选择器管理器。

整个Jetty NIO组件架构基于Reactor模型,并采用异步处理方式来模拟Proactor模式。

2.6.2 可拔插

Jetty通过插件化的方式来增强或简化应用,官方支持以下插件。

·Proxy Servlet

·Balancer Servlet

·CGI Servlet

·Quality of Service Filter

·Denial of Service Filter

·Header Filter

·Gzip Handler

·Cross Origin Filter

·Resource Handler

·Debug Handler

·Statistics Handler

·IP Access Handler

·Moved Context Handler

·Shutdown Handler

·Default Handler

·Error Handler

·Rewrite Handler

使用这些插件也非常简单。例如,想使用Proxy Servlet插件,只需要在应用中添加以下依赖即可。

2.6.3 Jetty常用配置

将Jetty常用配置进行总结,具体内容如下。

1.httpConnector

httpConnector是可选配置。如果没有设置,Jetty将创建ServerConnector实例来监听8080端口。

它可以在命令行上使用系统属性“jetty.http.port”来修改默认的端口配置,例如:

当然,也可以通过配置下面的属性来配置ServerConnector。

·port:连接监听的端口,默认为8080

·host:监听的主机,默认监听所有主机,即所有的主机都可以访问

·name:连接器的名称,在配置指定连接器来处理指定请求时有用

·idleTimeout:连接超时时间

·soLinger:socket连接时间

同样可以在一个标准Jetty的XML配置文件中配置连接,并把配置文件的路径赋值给jettyXml参数。

2.jettyXml

jettyXml是可选配置。通常可以把以逗号分隔的jettyXml配置文件的地址字符串增加到任何插件的配置参数中。如果有另一个Web应用或处理器,特别是连接器,就可以使用它。但是若有另一个Jetty对象,则不能通过插件得到配置信息。

3.scanIntervalSeconds

scanIntervalSeconds为改变自动扫描文件并进行热部署的时间间隔,单位为秒。默认值为0,代表禁用扫描及热部署,只有大于0的配置才可以使其生效。

4.reload

reload为重新加载选项,默认值为automatic(自动),一般用来和配置不为0的scanIntervalSeconds一同使用。默认配置下,当发现有文件改变会自动进行热部署。如果设置为manual(手动),部署将会通过插件被手动触发。这对需要频繁改动文件的情况比较有用,它可忽略改动,直到做完所有改动。

5.dumpOnStart

dumpOnStart为可选择的配置,默认为false。如果设置为true,那么Jetty会在启动时打印出server的结构。

6.loginServices

loginServices为可选择的配置,是一系列org.eclipse.jetty.security.LoginService的实现类。注意,其没有指定默认的域,如果需要在web.xml中配置域,那么可以配置一个统一的域。当然,也可以在Jetty的xml中进行配置,并把配置文件的地址增加到jettyXml中。

7.requestLog

requestLog为可选择的配置,是一个实现了org.eclipse.jetty.server.RequestLog接口的请求日志记录。它有3种方式配置请求日志。

(1)在jettyXml中配置文件,并加到jettyXml参数中。

(2)在context Xml中配置文件,并加到contextXml参数中。

(3)在webAPP元素中配置文件。

8.server

server为可选择的配置,通过配置org.eclipse.jetty.server.Server实例来支持插件的使用,然而通常是不需要配置的,因为插件会自动配置。特别是在使用jettyXml时,不会使用这个元素。

9.stopPort

stopPort为可选择的配置,是一个用来监听停止命令的端口。

10.stopKey

stopKey为可选择的配置,通常和stopPort结合使用。

11.systemProperties

systemProperties为可选择的配置,它允许为执行插件而配置系统参数。

12.systemPropertiesFile

systemPropertiesFile为可选择的配置,是一个包含执行插件系统参数的文件。默认情况下,在文件中设置的参数不会覆盖在命令行中写的参数,不管是通过JVM,还是通过POM的systemProperties。

13.skip

默认为false,如果为true,则插件会取消执行,它同样可以使用-Djetty.skip命令进行设置。

以下是配置示例,需要提醒的是,下面设置了org.eclipse.jetty.server.HttpConfiguration元素,也可以使用一个子XML文件来配置,这是一个相关的部分:

14.jetty-ssl.xml

为HTTPS连接配置SSL,下面的jetty-ssl.xml例子来自jetty-distribution。 i20VMXDdhx7BKlTg+KNMLDKf+auvqYTl9KJ/prk23LRaaDbku/m4N7LGmwr0PvGT

点击中间区域
呼出菜单
上一章
目录
下一章
×