出色的Servlet应用服务器 Jetty 介绍

fmms 12年前

  Jetty是Java领域另一个出色的Web服务器,它同样也是开源的。与tomcat不同的是它可作为一个嵌入式服务器。也就是说,如果我们在应用中加入jetty的核心jar文件,应用即可对外提供http服务。它同时也是平台无关的java web服务器,既可以在Windos平台上运行,也可以在Linux平台上运行。

  大家可以登录http://jetty.codehaus.org/jetty/站点下载Jetty的最新版本。下载的zip文件也是与平台无关的压缩包,不管是windows还是Linux都可使用。

  将下载的安装zip包,解压缩到任意的路径下。运行Jetty需要使用如下命令:

cd D:/jetty
D:
java -jar start.jar

  建议将上面的命令写成脚本,在windows下可写成批处理命令,在linux下可写成shell脚本。每次运行执行该文件就可以了。

  运行成功后,启动浏览器,然后输入http://localhost:8080/回车,看看是否成功。如果不成功首先要保证端口8080是否被占用,真的被占用那就配置一下Jetty的端口,下面会介绍的。

 

1.Jetty的基本配置

  主要介绍Jetty的端口设置,以及如何部署Web应用,Jetty是一个嵌入式的Http服务器,因此配置方式还是与tomcat有一些差异的:

  Jetty的配置文件都会在etc的目录下,熟悉linux的目录的人应该很眼熟,呵呵。该目录下有如下几类配置文件:

  1.jetty.xml:该文件是Jetty的默认配置文件,Jetty的端口号也是在这个文件里设置的。

  2.jetty-xxx.xml:该文件是为了给Jetty增加扩展应用所用的配置文件。

  3.webdefault.xml:该文件是Web应用的默认配置文件,用于控制Jetty容器里所有Web应用的通用属性,该文件不可以修改。

 

  Jetty服务器提供HTTP服务的主类是org.mortbay.jetty.Server,所以etc路径下的文件都需要为org.mortbay.jetty.Server配置属性。如下所示:

<Configure id="Server" class="org.eclipse.jetty.server.Server">     <!-- =========================================================== -->      <!-- Set connectors                                              -->      <!-- =========================================================== -->        <Call name="addConnector">        <Arg>            <New class="org.eclipse.jetty.server.nio.SelectChannelConnector">              <Set name="host"><Property name="jetty.host" /></Set>              <Set name="port"><Property name="jetty.port" default="8080"/></Set>              <Set name="maxIdleTime">300000</Set>              <Set name="Acceptors">2</Set>              <Set name="statsOn">false</Set>              <Set name="confidentialPort">8443</Set>       <Set name="lowResourcesConnections">20000</Set>       <Set name="lowResourcesMaxIdleTime">5000</Set>            </New>        </Arg>      </Call>

Jetty的配置文件非常巧妙,它通过配置文件来新建对象(New元素),调用对象的方法(Call元素),设置属性(Set元素控制)。实际上,Jetty底层将会根据配置文件中的信息,使用反射来创建对象,设置属性和调用方法。由此可见,如果我们需要在应用程序中嵌入Jetty服务器,只需要创建org.mortbay.jetty.Server对象,并调用一些列方法即可。

 

2.部署Web应用

  Jetty同样也有两种方式部署Web应用:

  1)自动部署:将Web应用复制到Jetty的webapps的路径下,Jetty就会吧该Web应用自动部署到Jetty服务器中。

  2)利用配置文件部署:新增配置文件来部署Web应用,这种方式无需将web应用放置到webapps路径下。

  自动部署就不多说了,利用配置文件部署,既是进入Contexts目录,该目录下的所有文件都会被系统自动加载,并且根据这些配置文件来部署应用。该路径下默认有两个文件:

  1)javadoc.xml:负责部署java的API应用;

  2)test.xml:负责部署jetty的实例应用。

  复制test.xml文件,将文件名改为项目名称。并对复制文件进行修改:

 

 <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
  <!-- Required minimal context configuration :                        -->
  <!--  + contextPath                                                  -->
  <!--  + war OR resourceBase                                          -->
  <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
  <Set name="contextPath">/</Set>
  <Set name="war"><SystemProperty name="jetty.home" default="."/>/new</Set>

 

  上面的两行分别制定了Web应用的虚拟路径和文档路径,增加了该配置文件以后,jetty启动时将会自动把new路径下的web应用部署在服务器中。如果要删除该web应用就直接删除该配置文件即可。

 

3.配置JNDI绑定

Jetty同样可以整合DBCP,C3P0等数据源的实现,想外界提供容器管理的数据源。实际上,对外界提供容器管理的数据源,只是Jetty的JNDI的绑定功能之一。