-
jetty
(開源的servlet容器)
鎖定
jetty特性
jetty易用性
易用性是 Jetty 設計的基本原則,易用性主要體現在以下幾個方面:
jetty可擴展性
在使用了 Ajax 的 Web 2.0 的應用程序中,每個連接需要保持更長的時間,這樣線程和內存的消耗量會急劇的增加。這就使得我們擔心整個程序會因為單個組件陷入瓶頸而影響整個程序的性能。但是有了 Jetty:
即使在有大量服務請求的情況下,系統的性能也能保持在一個可以接受的狀態。利用 Continuation 機制來處理大量的用户請求以及時間比較長的連接。 另外 Jetty 設計了非常良好的接口,因此在 Jetty 的某種實現無法滿足用户的需要時,用户可以非常方便地對 Jetty 的某些實現進行修改,使得 Jetty 適用於特殊的應用程序的需求。
jetty易嵌入性
Jetty 設計之初就是作為一個優秀的組件來設計的,這也就意味着 Jetty 可以非常容易的嵌入到應用程序當中而不需要程序為了使用 Jetty 做修改。從某種程度上,你也可以把 Jetty 理解為一個嵌入式的Web服務器。
jetty和Tomcat比較
1)Jetty更輕量級。這是相對Tomcat而言的。
由於Tomcat除了遵循Java Servlet規範之外,自身還擴展了大量J2EE特性以滿足企業級應用的需求,所以Tomcat是較重量級的,而且配置較Jetty亦複雜許多。但對於大量普通互聯網應用而言,並不需要用到Tomcat其他高級特性,所以在這種情況下,使用Tomcat是很浪費資源的。這種劣勢放在分佈式環境下,更是明顯。換成Jetty,每個應用服務器省下那幾兆內存,對於大的分佈式環境則是節省大量資源。而且,Jetty的輕量級也使其在處理高併發細粒度請求的場景下顯得更快速高效。
相比之下,重量級的Tomcat原本便支持過多特性,要對其瘦身的成本遠大於豐富Jetty的成本。用自己的理解,即增肥容易減肥難。
3)然而,當支持大規模企業級應用時,Jetty也許便需要擴展,在這場景下Tomcat便是更優的。
總結:Jetty更滿足公有云的分佈式環境的需求,而Tomcat更符合企業級環境。
jetty代碼實例
作為嵌入式服務器使用代碼實例
Java代碼
//代碼:以嵌入模式啓動Jetty import 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>
jetty版本發佈
- 參考資料
-
- 1. Jetty和Tomcat的選擇:按場景而定 .Java開源大全[引用日期2016-04-21]
- 2. .《Maven實戰》
- 3. Jetty 9.1.2 發佈 .中國開源社區.2014-02-13[引用日期2014-06-06]
- 4. Jetty 9.1.5 發佈 .中國開源社區.2014-05-06[引用日期2014-06-06]
- 5. Jetty 9.2.0 發佈,支持 Java 8 .中國開源社區.2014-06-06[引用日期2014-06-06]
- 6. Eclipse Jetty API Documentation .eclipse[引用日期2018-10-31]