Jetty 是一個開源的servlet容器,它為基於Java的web容器,例如JSP和servlet提供運行環境。Jetty是使用Java語言編寫的,它的API以一組JAR包的形式發布。開發人員可以將Jetty容器實例化成一個對象,可以迅速為一些獨立運行(stand-alone)的Java套用提供網路和web連線。
基本介紹
- 軟體名稱:Jetty
- 軟體版本:Jetty 9.4.14
- 更新時間:2014年6月6日
- 軟體語言:Java語言
特性,易用性,可擴展性,易嵌入性,和Tomcat比較,代碼實例,版本發布,
特性
易用性
易用性是 Jetty 設計的基本原則,易用性主要體現在以下幾個方面:
通過 XML 或者 API 來對Jetty進行配置;默認配置可以滿足大部分的需求;將 Jetty 嵌入到應用程式當中只需要非常少的代碼;
可擴展性
在使用了 Ajax 的 Web 2.0 的應用程式中,每個連線需要保持更長的時間,這樣執行緒和記憶體的消耗量會急劇的增加。這就使得我們擔心整個程式會因為單個組件陷入瓶頸而影響整個程式的性能。但是有了 Jetty:
即使在有大量服務請求的情況下,系統的性能也能保持在一個可以接受的狀態。利用 Continuation 機制來處理大量的用戶請求以及時間比較長的連線。 另外 Jetty 設計了非常良好的接口,因此在 Jetty 的某種實現無法滿足用戶的需要時,用戶可以非常方便地對 Jetty 的某些實現進行修改,使得 Jetty 適用於特殊的應用程式的需求。
易嵌入性
Jetty 設計之初就是作為一個優秀的組件來設計的,這也就意味著 Jetty 可以非常容易的嵌入到應用程式當中而不需要程式為了使用 Jetty 做修改。從某種程度上,你也可以把 Jetty 理解為一個嵌入式的Web伺服器。
Jetty 可以作為嵌入式伺服器使用,Jetty的運行速度較快,而且是輕量級的,可以在Java中可以從test case中控制其運行。從而可以使自動化測試不再依賴外部環境,順利實現自動化測試。
和Tomcat比較
原文地址: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便是更優的。
總結:Jetty更滿足公有雲的分散式環境的需求,而Tomcat更符合企業級環境。
代碼實例
作為嵌入式伺服器使用代碼實例
Java代碼
//代碼:以嵌入模式啟動Jettyimport org.mortbay.http.HttpContext;import org.mortbay.http.HttpServer;import org.mortbay.http.SocketListener;import org.mortbay.http.handler.ResourceHandler;public class JettySample{public static void main(String[]args)throws Exception{//創建JettyHttpServer對象 HttpServer server=new HttpServer();//在連線埠8080上給HttpServer對象綁上一個listener,使之能夠接收HTTP請求SocketListener listener=new SocketListener();listener.setPort(8080);server.addListener(listener);//創建一個HttpContext,處理HTTP請求。HttpContext context=new HttpContext();//用setContextPath把Context映射到(/web)URL上。context.setContextPath("/web");//setResourceBase方法設定文檔目錄以提供資源context.setResourceBase("C:\\j2sdk1.4.1_05");//添加資源處理器到HttpContext,使之能夠提供檔案系統中的檔案context.addHandler(new ResourceHandler());server.addContext(context);//啟動伺服器server.start();}}
需要的jar包:
commons-logging.jar
javax.servlet.jar
org.mortbay.jetty.jar
org.mortbay.jmx.jar
jetty還有對應maven外掛程式
maven pom檔案的設定:
<?xmlversion="1.0"encoding="utf-8"?><plugin><groupId>org.mortbay.jetty</groupId><artifactId>maven-jetty-plugin</artifactId><version>6.1.10</version><configuration><scanIntervalSeconds>10</scanIntervalSeconds><stopKey>foo</stopKey><stopPort>9999</stopPort></configuration><executions><execution><id>start-jetty</id><phase>pre-integration-test</phase><goals><goal>run</goal></goals><configuration><scanIntervalSeconds>0</scanIntervalSeconds><daemon>true</daemon></configuration></execution><execution><id>stop-jetty</id><phase>post-integration-test</phase><goals><goal>stop</goal></goals></execution></executions></plugin>
然後直接通過mvn jetty:run命令就能直接啟動
-----------------------------------------------------------------------------------------
註:
在maven中,用plugin的方式使用jetty,需要改動maven的setting.xml檔案,才可以使用命令mvn jetty:run.
setting.xml中找到標籤<pluginGroups>,增加:
<pluginGroup>org.mortbay.jetty</pluginGroup>
即可。
版本發布
2014年02月13日,Jetty 9.1.2 發布
2014年05月6日,Jetty 9.1.5 發布
2014年6月6日,Jetty 9.2.0發布
2018年8月6日,Jetty 9.2.26發布
2018年8月30 ,Jetty 9.4.12發布