嵌入式服務(wù)器jetty的使用方法

概述

jetty是什么防泵?

jetty是輕量級(jí)的web服務(wù)器和servlet引擎窟勃。

它的最大特點(diǎn)是:可以很方便的作為嵌入式服務(wù)器春霍。

它是eclipse的一個(gè)開(kāi)源項(xiàng)目。不用懷疑指攒,就是你常用的那個(gè)eclipse慷妙。

它是使用Java開(kāi)發(fā)的,所以天然對(duì)Java支持良好允悦。

官方網(wǎng)址

github源碼地址

什么是嵌入式服務(wù)器膝擂?

以jetty來(lái)說(shuō)明,就是只要引入jetty的jar包,可以通過(guò)直接調(diào)用其API的方式來(lái)啟動(dòng)web服務(wù)架馋。

用過(guò)Tomcat狞山、Resin等服務(wù)器的朋友想必不會(huì)陌生那一套安裝、配置叉寂、部署的流程吧萍启,還是挺繁瑣的。使用jetty屏鳍,就不需要這些過(guò)程了勘纯。

jetty非常適用于項(xiàng)目的開(kāi)發(fā)、測(cè)試钓瞭,因?yàn)榉浅驳遵?旖荨H绻胗糜谏a(chǎn)環(huán)境山涡,則需要謹(jǐn)慎考慮堤结,它不一定能像成熟的Tomcat、Resin等服務(wù)器一樣支持企業(yè)級(jí)Java EE的需要佳鳖。

jetty的嵌入式啟動(dòng)

我覺(jué)得嵌入式啟動(dòng)方式的一個(gè)好處在于:可以直接運(yùn)行項(xiàng)目,無(wú)需每次部署都得再配置服務(wù)器媒惕。

jetty的嵌入式啟動(dòng)使用有兩種方式:

API方式

maven插件方式

API方式

添加maven依賴(lài)

<dependency>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-webapp</artifactId>
  <version>9.3.2.v20150730</version>
  <scope>test</scope>
</dependency>
<dependency>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-annotations</artifactId>
  <version>9.3.2.v20150730</version>
  <scope>test</scope>
</dependency>
<dependency>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>apache-jsp</artifactId>
  <version>9.3.2.v20150730</version>
  <scope>test</scope>
</dependency>
<dependency>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>apache-jstl</artifactId>
  <version>9.3.2.v20150730</version>
  <scope>test</scope>
</dependency>

官方的啟動(dòng)代碼

public class SplitFileServer
{
    public static void main( String[] args ) throws Exception
    {
        // 創(chuàng)建Server對(duì)象系吩,并綁定端口
        Server server = new Server();
        ServerConnector connector = new ServerConnector(server);
        connector.setPort(8090);
        server.setConnectors(new Connector[] { connector });

        // 創(chuàng)建上下文句柄,綁定上下文路徑妒蔚。這樣啟動(dòng)后的url就會(huì)是:http://host:port/context
        ResourceHandler rh0 = new ResourceHandler();
        ContextHandler context0 = new ContextHandler();
        context0.setContextPath("/");
      
        // 綁定測(cè)試資源目錄(在本例的配置目錄dir0的路徑是src/test/resources/dir0)
        File dir0 = MavenTestingUtils.getTestResourceDir("dir0");
        context0.setBaseResource(Resource.newResource(dir0));
        context0.setHandler(rh0);

        // 和上面的例子一樣
        ResourceHandler rh1 = new ResourceHandler();
        ContextHandler context1 = new ContextHandler();
        context1.setContextPath("/");
        File dir1 = MavenTestingUtils.getTestResourceDir("dir1");
        context1.setBaseResource(Resource.newResource(dir1));
        context1.setHandler(rh1);

        // 綁定兩個(gè)資源句柄
        ContextHandlerCollection contexts = new ContextHandlerCollection();
        contexts.setHandlers(new Handler[] { context0, context1 });
        server.setHandler(contexts);

        // 啟動(dòng)
        server.start();

        // 打印dump時(shí)的信息
        System.out.println(server.dump());

        // join當(dāng)前線程
        server.join();
    }
}

直接運(yùn)行Main方法穿挨,就可以啟動(dòng)web服務(wù)。

注:以上代碼在eclipse中運(yùn)行沒(méi)有問(wèn)題肴盏,如果想在Intellij中運(yùn)行還需要為它指定配置文件科盛。

如果想了解在Eclipse和Intellij都能運(yùn)行的通用方法可以參考我的github代碼示例。

我的實(shí)現(xiàn)也是參考springside的方式菜皂。

代碼行數(shù)有點(diǎn)多贞绵,不在這里貼代碼了。

完整參考代碼

Maven插件方式

如果你熟悉maven恍飘,那么實(shí)在太簡(jiǎn)單了

注: Maven版本必須在3.3及以上版本榨崩。

(1) 添加maven插件

<plugin>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-maven-plugin</artifactId>
  <version>9.3.12.v20160915</version>
</plugin>

(2) 執(zhí)行maven命令:

mvn jetty:run

講真,就是這么簡(jiǎn)單章母。jetty默認(rèn)會(huì)為你創(chuàng)建一個(gè)web服務(wù)母蛛,地址為127.0.0.1:8080。

當(dāng)然乳怎,你也可以在插件中配置你的webapp環(huán)境

<plugin>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-maven-plugin</artifactId>
  <version>9.3.12.v20160915</version>
  
  <configuration>
 <webAppSourceDirectory>${project.basedir}/src/staticfiles</webAppSourceDirectory>
    
    <!-- 配置webapp -->
 <webApp>
   <contextPath>/</contextPath>
   <descriptor>${project.basedir}/src/over/here/web.xml</descriptor>
   <jettyEnvXml>${project.basedir}/src/over/here/jetty-env.xml</jettyEnvXml>
 </webApp>
    
    <!-- 配置classes -->
 <classesDirectory>${project.basedir}/somewhere/else</classesDirectory>
 <scanClassesPattern>
   <excludes>
  <exclude>**/Foo.class</exclude>
   </excludes>
 </scanClassesPattern>
 <scanTargets>
   <scanTarget>src/mydir</scanTarget>
   <scanTarget>src/myfile.txt</scanTarget>
 </scanTargets>
    
    <!-- 掃描target目錄下的資源文件 -->
 <scanTargetPatterns>
   <scanTargetPattern>
 <directory>src/other-resources</directory>
 <includes>
   <include>**/*.xml</include>
   <include>**/*.properties</include>
 </includes>
 <excludes>
   <exclude>**/myspecial.xml</exclude>
   <exclude>**/myspecial.properties</exclude>
 </excludes>
   </scanTargetPattern>
 </scanTargetPatterns>
  </configuration>
</plugin>

官方給的jetty-env.xml范例

 <?xml version="1.0"?>
 <!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">
 
 <Configure class="org.eclipse.jetty.webapp.WebAppContext">
 
   <!-- Add an EnvEntry only valid for this webapp               -->
   <New id="gargle"  class="org.eclipse.jetty.plus.jndi.EnvEntry">
     <Arg>gargle</Arg>
     <Arg type="java.lang.Double">100</Arg>
     <Arg type="boolean">true</Arg>
   </New>
 
  <!-- Add an override for a global EnvEntry                           -->
   <New id="wiggle"  class="org.eclipse.jetty.plus.jndi.EnvEntry">
     <Arg>wiggle</Arg>
     <Arg type="java.lang.Double">55.0</Arg>
     <Arg type="boolean">true</Arg>
   </New>
 
   <!-- an XADataSource                                                -->
   <New id="mydatasource99" class="org.eclipse.jetty.plus.jndi.Resource">
     <Arg>jdbc/mydatasource99</Arg>
     <Arg>
       <New class="com.atomikos.jdbc.SimpleDataSourceBean">
         <Set name="xaDataSourceClassName">org.apache.derby.jdbc.EmbeddedXADataSource</Set>
         <Set name="xaDataSourceProperties">databaseName=testdb99;createDatabase=create</Set>
         <Set name="UniqueResourceName">mydatasource99</Set>
       </New>
     </Arg>
   </New>
 
 </Configure>

參考

jetty wiki

jetty官方文檔

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末彩郊,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌秫逝,老刑警劉巖恕出,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異筷登,居然都是意外死亡剃根,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)前方,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)狈醉,“玉大人,你說(shuō)我怎么就攤上這事惠险∶绺担” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵班巩,是天一觀的道長(zhǎng)渣慕。 經(jīng)常有香客問(wèn)我,道長(zhǎng)抱慌,這世上最難降的妖魔是什么逊桦? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮抑进,結(jié)果婚禮上强经,老公的妹妹穿的比我還像新娘。我一直安慰自己寺渗,他們只是感情好匿情,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著信殊,像睡著了一般炬称。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上涡拘,一...
    開(kāi)封第一講書(shū)人閱讀 51,370評(píng)論 1 302
  • 那天玲躯,我揣著相機(jī)與錄音,去河邊找鬼鳄乏。 笑死府蔗,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的汞窗。 我是一名探鬼主播姓赤,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼仲吏!你這毒婦竟也來(lái)了不铆?” 一聲冷哼從身側(cè)響起蝌焚,我...
    開(kāi)封第一講書(shū)人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎誓斥,沒(méi)想到半個(gè)月后只洒,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡劳坑,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年毕谴,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片距芬。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡涝开,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出框仔,到底是詐尸還是另有隱情舀武,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布离斩,位于F島的核電站银舱,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏跛梗。R本人自食惡果不足惜寻馏,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望核偿。 院中可真熱鬧诚欠,春花似錦、人聲如沸宪祥。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蝗羊。三九已至,卻和暖如春仁锯,著一層夾襖步出監(jiān)牢的瞬間耀找,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工业崖, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留野芒,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓双炕,卻偏偏與公主長(zhǎng)得像狞悲,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子妇斤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理摇锋,服務(wù)發(fā)現(xiàn)丹拯,斷路器,智...
    卡卡羅2017閱讀 134,656評(píng)論 18 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,810評(píng)論 6 342
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,116評(píng)論 25 707
  • ▼10.肯鄭(老周)-智商 130 韓裔美國(guó)演員咬像,搞笑背后的他可是一名內(nèi)科醫(yī)生 ▼9.湯米李瓊斯-智商 135 M...
    電影深扒客閱讀 2,404評(píng)論 0 0
  • 現(xiàn)實(shí)是嚴(yán)酷的,很多事情不是以個(gè)人意志為轉(zhuǎn)移的生宛,同時(shí)县昂,也不是我們?nèi)萘坑邢薜拇竽X能想的到的。大抵說(shuō)茅糜,就是目光短淺七芭,見(jiàn)識(shí)...
    競(jìng)走的蝸牛閱讀 714評(píng)論 0 0