Jetty 介绍和插件使用

2019-07-09 0 By admin

Jetty和Tomcat为目前全球范围内最著名的两款开源的webserver/servlet容器。
由于它们的实现都遵循Java Servlet规范,一个java Web应用部署于两款容器的任意一个皆可。

一、Jetty与Tomcat比较,有哪差异呢?

1、Jetty更轻量级。这是相对Tomcat而言的。
由于Tomcat除了遵循Java Servlet规范之外,自身还扩展了大量JEE特性以满足企业级应用的需求,所以Tomcat是较重量级的,而且配置较Jetty亦复杂许多。但对于大量普通互联网应用而言,并不需要用到Tomcat其他高级特性,所以在这种情况下,使用Tomcat是很浪费资源的。这种劣势放在分布式环境下,更是明显。换成Jetty,每个应用服务器省下那几兆内存,对于大的分布式环境则是节省大量资源。而且,Jetty的轻量级也使其在处理高并发细粒度请求的场景下显得更快速高效。
2、jetty更灵活,体现在其可插拔性和可扩展性,更易于开发者对Jetty本身进行二次开发,定制一个适合自身需求的Web Server。相比之下,重量级的Tomcat原本便支持过多特性,要对其瘦身的成本远大于丰富Jetty的成本。用自己的理解,即增肥容易减肥难。
3、然而,当支持大规模企业级应用时,Jetty也许便需要扩展,在这场景下Tomcat便是更优的。

二、基于Maven 工程,运行web 应用的两种方法:

第一种:在IDE 工具种配置Web 应用服务器,
第二种:在pom.xml 文件中配置Web应用服务器的插件。

三、Jetty-maven-plugin 插件介绍

Jetty7 – 此插件更名为jetty-maven-plugin,以便更符合maven2的协定。
为了在Jetty里运行一个Web应用,你如果按照Maven默认的做法构造,你不需要配置任何其它东西。

  1. resources文件存放,${basedir}/src/main/webapp下;
  2. Classes文件存放在${project.build.outputDirectory}下
  3. web.xml的配置描述${basedir}/src/main/webapp/WEB-INF/web.xml

只需输入:mvn jetty:run
这将在端口为8080的Jetty服务器上启动你的项目。
Jetty将持续运行,直到插件是明确停止,例如,按下<ctrl-c>,您也可以使用mvn jetty:stop命令。
委托这个插件运行Web应用是非常方便的,因为它可以配置成能定期扫描Web应用的任何改变和自动部署Web应用。
这就可以消除开发周期中编译和部署的步骤从而更加富有成效。你使用的IDE时对项目做的任何改变,都将直接自动导入到当前运行的web容器里,使您可以立即对其进行测试,立竿见影。

<!-- jetty插件 -->
<plugin>
    <groupId>org.mortbay.jetty</groupId>
    <artifactId>maven-jetty-plugin</artifactId>
    <version>6.1.25</version>
    <configuration>
        <connectors>
            <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
                <port>8000</port>
                <maxIdleTime>60000</maxIdleTime>
            </connector>
        </connectors>
        <contextPath>/bbs</contextPath>
        <scanIntervalSeconds>0</scanIntervalSeconds>
    </configuration>
</plugin>

四、容器级配置

Connectors 可选
一组org.mortbay.jetty.Connector对象,包含jetty的端口监听。如果你不指定任何一个NIO的org.mortbay.jetty.nio.SelectChannelConnector,将默认配置一个8080端口。当然,你可以在命令行使用系统参数jetty.port 改变默认端口。例如”mvn -Djetty.port=9999 jetty:run”。另外,您也可以指定许多您想要的连接。

jettyConfig 可选
除插件配置参数外,你也可以指定一个jetty.xml文件的路径。当你有其他的web应用和操作需要部署时,或者一些你无法在插件中配置的jetty对象,你就可以使用到它,。

scanIntervalSeconds 可选[秒]
在很短的时间间隔内在扫描web应用检查是否有改变,如果发觉有任何改变则自动热部署。默认为0,表示禁用热部署检查。任何一个大于0的数字都将表示启用。

systemPropertie 可选
它们允许你在设置一个插件的执行操作时配置系统属性.更多的信息请查阅Setting System Properties.

userRealms 可选
一组org.mortbay.jetty.security.UserRealm实现。请注意,它没有一个默认的Realm。如果你在你的web.xml应用了一个Realm,你需要在这里指定一个对应的Rleam。

requestLog 可选
一个org.mortbay.jetty.RequestLog请求日志接口的实现。比如org.mortbay.jetty.NCSARequestLog就是一个作为NCSA格式的实现。

五、Web应用级配置

contextPath 可选
这个contex地址指向你的webapp.默认情况下,它被设置成该项目的pom.xml的<artifactId>。当然你也可以设置一个你喜欢的从而覆盖它。

tmpDir 可选
它作为web应用的临时目录。它默认设置在{${basedir}/target}下,但是你也可在这里改变它的路径。

overrideWebXml 可选
它是一个应用于web应用的web.xml的备用web.xml文件.这个文件可以存放在任何地方.你可以根据不同的环境中(如测试、开发等等)利用它增加或修改一个web.xml配置.

webDefaultXml 可选
webdefault.xml文件用来代替webapp默认提供给jetty的文件.

六、jetty:run的配置

run目标允许你把你未打包的web应用部署到Jetty.它包含在你的pom.xml文件的一部分元素里。下面额外的配置参数都是可用到的:
classesDirectory
这是你的web应用编译的classes存放的路径。你很少需要设置这个参数,其实可以在你的pom.xml用<build><outputDirectory>替代它。

webAppSourceDirectory
默认设置在${basedir}/src/main/webapp下。如果你的源文件夹结构跟左边不同,就可以设置这个参数。

webXml
默认设置在${maven.war.webxml}或者${basedir}/src/main/webapp/WEB-INF/web.xml,无论哪个文件都不是空的。如果觉得前两者都不合适,就设置它。

jettyEnvXml
可选。它指向一个jetty-env.xml文件的路径。允许你创建JNDI绑定并满足web.xml中<env-entry>、<resource-env-ref>和<resource-ref>元素中的条件。当然这个文件的使用范围仅仅在你的当前应用和其他应用同时部署时它并没有共享的情况下。(例如使用一个jettyConfig文件)

scanTargets 可选
周期性的扫描除了插件自动扫描外的文件和文件夹列表。

scanTargetPatterns 可选
如果你想扫描有一长串的额外文件,通过使用模式匹配表达式制定它们更加方便,它可以用来替代<scanTargets>参数的枚举展示。这个参数包含一组<scanTargetPattern>。每一个都是由一个<directory>和<includes>[或者<excludes>]参数来指定文件的匹配模式。