嵌入式伺服器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反向代理