1. 程式人生 > >嵌入式伺服器jetty,讓你更快開發web

嵌入式伺服器jetty,讓你更快開發web

概述

jetty是什麼?

jetty是輕量級的web伺服器和servlet引擎。

它的最大特點是:可以很方便的作為嵌入式伺服器

它是eclipse的一個開源專案。不用懷疑,就是你常用的那個eclipse。

它是使用Java開發的,所以天然對Java支援良好。

官方網址

什麼是嵌入式伺服器?

以jetty來說明,就是隻要引入jetty的jar包,可以通過直接呼叫其API的方式來啟動web服務。

用過Tomcat、Resin等伺服器的朋友想必不會陌生那一套安裝、配置、部署的流程吧,還是挺繁瑣的。使用jetty,就不需要這些過程了。

jetty非常適用於專案的開發、測試,因為非常快捷。如果想用於生產環境,則需要謹慎考慮,它不一定能像成熟的Tomcat、Resin等伺服器一樣支援企業級Java EE的需要。

jetty的嵌入式啟動

我覺得嵌入式啟動方式的一個好處在於:可以直接執行專案,無需每次部署都得再配置伺服器。

jetty的嵌入式啟動使用有兩種方式:

API方式

maven外掛方式

API方式

新增maven依賴

<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>

官方的啟動程式碼

public class SplitFileServer
{
    public static void main( String[] args ) throws Exception
    {
        // 建立Server物件,並繫結埠
        Server server = new Server();
        ServerConnector connector = new ServerConnector(server);
        connector.setPort(8090);
        server.setConnectors(new Connector[] { connector });

        // 建立上下文控制代碼,繫結上下文路徑。這樣啟動後的url就會是:http://host:port/context
        ResourceHandler rh0 = new ResourceHandler();
        ContextHandler context0 = new ContextHandler();
        context0.setContextPath("/");
      
        // 繫結測試資源目錄(在本例的配置目錄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);

        // 繫結兩個資源控制代碼
        ContextHandlerCollection contexts = new ContextHandlerCollection();
        contexts.setHandlers(new Handler[] { context0, context1 });
        server.setHandler(contexts);

        // 啟動
        server.start();

        // 列印dump時的資訊
        System.out.println(server.dump());

        // join當前執行緒
        server.join();
    }
}

直接執行Main方法,就可以啟動web服務。

注:以上程式碼在eclipse中執行沒有問題,如果想在Intellij中執行還需要為它指定配置檔案。

如果想了解在Eclipse和Intellij都能執行的通用方法可以參考我的github程式碼示例。

我的實現也是參考springside的方式。

程式碼行數有點多,不在這裡貼程式碼了。

Maven外掛方式

如果你熟悉maven,那麼實在太簡單了

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

(1) 新增maven外掛

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

(2) 執行maven命令:

mvn jetty:run

講真,就是這麼簡單。jetty預設會為你建立一個web服務,地址為127.0.0.1:8080。

當然,你也可以在外掛中配置你的webapp環境

<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開發web

概述 jetty是什麼? jetty是輕量級的web伺服器和servlet引擎。 它的最大特點是:可以很方便的作為嵌入式伺服器。 它是eclipse的一個開源專案。不用懷疑,就是你常用的那個eclipse。 它是使用Java開發的,所以天然對Java支援良好。 官方網址 什

學習C語言前知道這些事情入門

C語言基本常識 計算機語言:把人與計算機之間交流的語言叫做計算機語言 計算機語言分為高階語言和低階語言 高階語言:遠離硬體 低階語言:貼近硬體 指令:是指計算機執行某種操作的命令。它由一串二進位制數碼組成。 一條指令通常由兩個部分組成:操作碼 地址碼。 操作碼:指

理解五個基本概念像機器學習專家

大多數人可能對機器學習有點恐懼或困惑。 腦子中會有它到底是什麼,它有什麼發展方向,我現在可以通過它掙錢嗎等等這樣的問題。 這些問題的提出都是有依據的。事實上,你可能沒有意識到自己其實多年來一直在訓練機器學習模型。你看過蘋果手機或者是Facebook上的照片吧? 你知道它如何向你展示一組面孔並要求你識別它

26個英文字母的另一種讀法容易聽懂

近期看了不少關於戰爭的電影和電視劇,不過都是英文為主的,就當學英語了。裡面經常會說一些軍用的詞彙,簡潔明瞭,感覺碉堡了,就像國內的黑話和切口一樣。例如那款FPS單機遊戲《三角洲部隊》,英文名是《Delta force》,其實Delta是D的另一種讀法。所以查了查這些次的意思,原來是一些縮寫或者特定用詞防止混淆

最新Java程式效能優化的Java程式穩定

Eureka  Eureka(原來以為是縮寫,原來就是一個單詞,翻譯為:我發現了,我找到了!0.0)是Netflix開源的一款提供服務註冊和發現的產品,它提供了完整的Service Registry和Service Discovery實現。也是springcloud體系中最重要最核心的

【MySQL】10條SQL優化語句的MySQL資料庫跑得

1. 慢SQL消耗了70%~90%的資料庫CPU資源; 2. SQL語句獨立於程式設計邏輯,相對於對程式原始碼的優化,對SQL語句的優化在時間成本和風險上的代價都很低; 3. SQL語句可以有不同的寫法; 1 不使用子查詢 例:SELECT * FROM t1 WH

夏日葵電商:了解這些的微信分銷系統強大

尋找 傳統 影響力 今天 營銷 其他 方式 成本 全部 夏日葵電商:了解這些,讓你的微信分銷系統更強大 隨著網購的不斷普及,很多傳統企業都開始轉向互聯網銷售,其中微信分銷系統是經常被選擇的對象。但是你真的知道微信分銷系統的可以做什麽不可以做什麽?今天就讓夏日葵電商為你總結一

四種設計風格的網站設計有逼格

企業網站 網站設計 網站建設 自助建站 企業網站設計首先要了解客戶群體的瀏覽習慣,還有他們的喜好,企業網站建設之前需對消費者的行為進行分析,了解消費者在不同的年齡群、性別、職業等因素,分析這些消費者的需求,在設計網站的時候考慮這些因素,通過分析來提升公司的訂單量。你知道企業網站一般有哪些風格嗎

智能公交電子站牌為報告實時交通信息出行方便

智能交通 智慧城市 智能公交站牌 電子公交站牌 近幾年,城市公交大力推進信息化、電子化建設,如構建無人售票系統,實行IC卡收費。隨著經濟的發展,人民生活水平的提高,人民對公共交通出行的要求也越來越高,乘客關註的不僅僅是能否順利出行,而是更多地關心公交車對於到站時間、車輛運行狀況等信息的實時發布

掌握這7個點的移動端交互體驗優秀

移動端設計 原型設計 產品經理 以下內容由Mockplus團隊翻譯整理,僅供學習交流,Mockplus是更快更簡單的原型設計工具。 移動端設計的質量好壞,其實並不難度量。當用戶可以流暢輕松地使用,不用耗費精力便可以完成各種任務,這就說明此款APP或者網站的設計足夠優

CSS 黑魔法小技巧少寫不必要的JS代碼優雅

3D splay conf fill page under 隔離 popover 運行 首頁 登錄註冊 CSS 黑魔法小技巧,讓你少寫不必要的JS,代碼更優雅 閱讀 8113 收藏 927 2017-09-26 原文鏈接:git

值錢的方法:培養稀缺(追逐新技術淬煉已有技能、做到出類拔萃尋找自己所在的行業痛點App開發者是市場動態平衡的典型)

問題 全面 bin o2o 策略 軟件公司 前瞻 籃球場 rdquo 一個開發者,如何才能更值錢? 答案非常簡單:掌握稀缺資源。 那麽,怎樣才能持續不斷地掌握稀缺資源,讓自己更值錢呢? 請看接下來介紹的 2 種識別稀缺的方法和 2 種培養稀缺的策略。 稀缺資

Android P的APP適配總結人一步

信息 最新 webview 包名 圖片 bmp illegal 名單 block 歡迎大家前往騰訊雲+社區,獲取更多騰訊海量技術實踐幹貨哦~ 本文由QQ音樂技術團隊發表於雲+社區專欄 上篇:Android P 行為變更適配 Android P 這次有很多行為變更,其中不

簡化的Java代碼工作高效|語言

案例 生物信息 否則 規模 平臺 使用 values apt map 計算機專家在問題求解時非常重視表達式簡潔性的價值。Unix的先驅者Ken Thompson曾經說過非常著名的一句話:“丟棄1000行代碼的那一天是我最有成效的一天之一。”這對於任何一個需要持續支持和維護的

這7大神器 的Python 代碼易於維護

read 文檔 喜歡 結構 最大 公眾號 縮進 rep 代碼風格 當軟件項目進 入“維護模式”時,對代碼的可讀性和編碼標準經常就忽略了(甚至從一開始就沒有建立起這些標準。)但是,在代碼庫中保持一致的風格和測試標準是減少維護負擔的重要因素,它能確保未來的開發人員能夠快速了解新

印客人工智能名片小程序裂變系統0成本獲客

sha 圖文 很難 智能 推薦 解答 -o 裏的 內容 快印客人工智能名片小程序裂變系統,讓你0成本獲客   從最開始的被外界懷疑和非議,到如今諸多成為眾多資本追逐的對象,小程序經歷了"過山車"式的發展之路。小程序更接近微信裏的APP,體驗優於H5要好很

用 Python 給程序加個進度條的看起來炫酷?

image 進度條 hub 一行 ref 當前 標準輸出 alt 操作 對於開發或者運維來說,使用 Python 去完成一些跑批任務,或者做一些監控事件是非常正常的情況。那麽如何有效地監控任務的進度?除了在任務中加上 Log 外,還能不能有另一種方式來了解任務進展到哪一步了

掌握這款PDF編輯器的職場輕鬆

Word是我們日常經常要使用的辦公軟體,它能增加我們的工作效率。但是僅會使用Word這種大眾的工具,並不能使我們在職場上高人一籌。 PDF作為一種跨系統的檔案格式,被普遍應用於辦公中。但是PDF不可編輯的特性讓非常多職場小白非常頭痛。 下面就來給大家介紹一款好用的PDF編輯軟體——福昕PDF編輯器個人版。

Java介面自動化測試之「Mock介面平臺」的自動化提前

前言:目前Mock技術已經比較成熟,在日常的工作中Mock也可以給我們帶來很大的遍歷,本篇文章將會使用Moco框架,一步一步搭建一套Mock Server,使得介面的自動化測試更加的提前,也能夠使得前後端分離。 共識與痛點 目前,在軟體行業內,大家已經達成的共識就是,測試

阿里巴巴重磅推出的電腦變成雲伺服器只要 5 分鐘! 5 分鐘! 5 分鐘!

驚奇的發現阿里雲竟然悄悄上線了一個小功能,遠端控制檯和遠端檔案管理。一句話介紹就是: 一鍵安裝後,只要你的裝置有網路環境,就可以在阿里雲物聯網平臺上遠端SSH 登入到裝置上並支援遠端的檔案上傳/下載。很實用有木有,有木有啊!而且是免費,免費,免費! 以後再也不用搭建什麼VPN,再也不要搞啥子SSH反向代理