Jetty嵌入式Web容器攻略

KarCawthorn 8年前發布 | 41K 次閱讀 Jetty 嵌入式 應用服務器

來自: http://www.importnew.com/17936.html

Jetty是一個用 Java 實現、開源、基于標準的,并且具有豐富功能的 Http 服務器和 Web 容器。Jetty中應用最廣泛的一項功能就是可以作為嵌入式Web容器。

  • 在開發階段,可以使用Jetty在 Eclipse 里直接啟動應用,而不是像Tomcat那樣繁瑣,先把幾十兆應用打包,然后再復制到某個目錄后再啟動。
  • 在測試階段,可以直接在測試用例中啟動Jetty,而不是先將應用打包部署到容器。
  • 在運行階段,可以將war包配置成直接能夠運行的應用

本文將著重介紹如何配置使用Jetty的嵌入式Web容器功能,關于Jetty的基本配置和功能請參考http://www.ibm.com/developerworks/cn/web/wa-lo-jetty/

一、開發階段

1、使用maven啟動Jetty

我們修改了源碼的時候eclipse會自動編譯,Jetty Maven Plugin插件發現編譯文件有變化后會自動更新到jetty容器中,非常方便我們進行開發。

</div>

首先定義Jetty的版本屬性

<properties>
 <jetty.version>8.1.9.v20130131</jetty.version>
 </properties>

然后引入Jetty依賴

<!-- jetty -->
 <dependency>
 <groupId>org.eclipse.jetty.aggregate</groupId>
 <artifactId>jetty-webapp</artifactId>
 <version>${jetty.version}</version>
 <scope>test</scope>
 </dependency>
 <dependency>
 <groupId>org.eclipse.jetty</groupId>
 <artifactId>jetty-jsp</artifactId>
 <version>${jetty.version}</version>
 <scope>test</scope>
 </dependency>

配置Jetty Maven Plugin插件,示例如下

<plugin>
 <groupId>org.mortbay.jetty</groupId>
 <artifactId>jetty-maven-plugin</artifactId>
 <version>${jetty.version}</version>
 <configuration>
 <systemProperties>
 <systemProperty>
 <name>spring.profiles.active</name>
 <value>development</value>
 </systemProperty>
 </systemProperties>
 <useTestClasspath>true</useTestClasspath>

<webAppConfig> <contextPath>/${project.artifactId}</contextPath> </webAppConfig> </configuration> </plugin></pre>

該配置運行jetty并指定spring的profile為development,同時設定web應用的上下文地址與應用本身的artifactId一致。

執行如下命令啟動Jetty,即可通過http://localhost:8080/${project.artifactId}訪問Web應用。

mvn jetty:run

Jetty Maven Plugin插件支持多個maven goals,最常用的就是run,下面的參數支持大部分的goals

(1)配置Jetty容器(支持所有goals)

  • <connectors>:可選參數,配置org.eclipse.jetty.server.Connector(Jetty端口監聽器)列表,如果不指定該參數,將會連接默認的8080端口。
  • <jettyXml>:可選參數,指定Jetty配置文件的路徑
  • <scanIntervalSeconds>:可選參數,配置Web應用掃描的暫停時間,Web應用掃描如果發現修改了程序,會自動重新部署。該參數默認值為0,即不啟動熱部署
  • <systemProperties>:可選參數,設置插件執行時的系統參數,比如上面的配置示例中指定了spring的profile為development,如果不設置該參數,就需要配置maven與spring的profile一致,同時在mvn命令中增加-Pdevelopment選項,或者直接在spring配置文件中設置spring.profiles.active為development
  • <systemPropertiesFile>:可選參數,設置系統參數配置文件的位置,將會批量執行其中的系統參數配置
  • <loginServices>:可選參數,配置org.eclipse.jetty.security.LoginService實現類的列表。
  • <requestLog>:可選參數,配置請求日志接口:org.eclipse.jetty.server.RequestLog的實現類,配置請求日志的處理格式,

比如org.mortbay.jetty.NCSARequestLog就是一個NCSA格式((美國)國家超級計算技術應用中心 (NCSA) 公用格式,是常用的標準日志格式)的實現。

(2)配置Web應用程序(不支持run-forked、stop兩個goals)

  • <webApp>:從jetty6.1.6rc0起使用webAppConfig,web應用程序配置根節點
  • <contextPath>:設置web應用程序的context路徑,默認情況下,它被設置成該項目的pom.xml的<artifactId>
  • <descriptor>:設置web應用程序主配置文件web.xml的路徑,默認該配置文件位于WEB-INF目錄下
  • <defaultsDescriptor>:設置先于web.xml執行的webdefault.xml配置文件的路徑
  • <overrideDescriptor>:設置在web.xml讀取之后執行的配置文件,使用該參數可以覆蓋或增加web.xml中的配置
  • <tempDirectory>:Web應用的臨時目錄,Jetty可以在此目錄編譯jsp文件或者復制jar包,默認路徑為${project.build.outputDirectory}/tmp
  • <baseResource>:指定Web應用靜態資源所在的路徑,默認路徑為src/main/webapp
  • <resourceBases>:指定多個Web應用靜態資源所在的路徑,使用逗號分隔
  • <baseAppFirst>:可選參數,默認值為true,控制是否可以在Web應用的原始資源之前或之后疊加多個war包
  • <jettyEnvXml>:可選參數,指定jetty-env.xml配置文件的路徑
  • <containerIncludeJarPattern>:jetty-8.1.x之后的版本可以使用,可選參數,配置加載到Jetty容器 Classloader中的Jar包的路徑或匹配模式,符合條件的jar包將會被檢測META-INF、資源、tld和類的繼承關系
  • <webInfIncludeJarPattern>:jetty-8.1.x之后的版本可以使用,可選參數,配置加載到Web應用程序的Classloader(WEB-INF classpath)中的Jar包的路徑或匹配模式,符合條件的jar包將會被檢測META-INF、資源、tld和類的繼承關系
  • <contextXml>:可選參數,指定context xml配置文件的路徑

run goals將會啟動Jetty并運行應用程序,不需要應用程序編譯成war包。另外run還支持webapp節點的其它屬性:

  • <classesDirectory>:Web應用程序類編譯后的路徑
  • <testClassesDirectory>:Web應用程序單元測試類編譯后的路徑,默認值為${project.build.testOutputDirectory}.
  • <useTestScope>:Jetty-7之前的版本參數名稱為useTestClasspath,如果設置為true,開啟測試模式,<testClassesDirectory>中指定的類及其依賴將首先被加載到classpath中,默認值為false
  • <useProvidedScope>:如果設置為true,依賴范圍標示為“provided”的依賴將被加載到容器的classpath中,該參數很少使用。
  • <webAppSourceDirectory>:Web應用程序靜態資源路徑,默認值為${basedir}/src/main/webapp
  • <scanTargets>:配置除了插件自動掃描的位置外,其它需要掃描的目錄或文件列表
  • <scanTargetPatterns>:配置除了插件自動掃描的位置外,其它需要掃描的目錄或文件的匹配模式
  • <skip>:默認值為false,如果設置為true,將會停止執行插件

Jetty Maven Plugin插件支持的其它goals簡介如下(詳見http://wiki.eclipse.org/Jetty/Feature/Jetty_Maven_Plugin):

  • run-war:將Web應用程序打包成war包并部署到Jetty中。
  • run-exploded:使用war exploded模式(文件夾模式)將Web應用程序打包并部署到Jetty中
  • deploy-war:功能與run-war類似,區別就是maven生命周期中不包含package階段
  • run-forked:jetty-7.5.2之后的版本可用,強迫Jetty使用一個新的JVM啟動應用程序
  • start:jetty-7.6.0之后的版本可用,一般在配合插件中的execution節點使用,test-compile階段之后才執行構建,確保必要的類及文件都生成好了。一般用于集成測試時啟動Jetty,本文第二部分測試階段會有詳細介紹
  • stop:關閉運行中的Jetty容器

2、在java中啟動JettySpringSide4中封裝了Jetty的操作提供了工具類JettyFactory ,讓我們可以很簡單的啟動Jetty容器,JettyFactory代碼如下:

/**

 本文由用戶 KarCawthorn 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!