嵌入式 Web 服務器教程:如何在 Java 應用程序啟動期間啟動嵌入式 HTTP Jersey 服務器
已發表: 2014-07-01 前一段時間,我寫了一篇關於如何使用 JAX-RS 和 Jersey 使用 Java 構建 RESTful 服務的教程。 完成所有詳細步驟後,您必須將項目部署到Tomcat Web Server
,您應該一切順利。 通過該教程,您應該能夠在大約 20 分鐘內簡單地創建 RESTFul 服務。
但是在
~5 mins
完成呢? 有時也很難為您的 Web 應用程序設置 Tomcat。
原因有很多:
- 您可能需要將 Tomcat 二進製文件複製到開發環境。
- 如果您沒有正確配置所有設置,那麼您的 Tomcat 應用程序可能無法運行。
- 您必須將項目導出為
.war
項目 - 如果您不想在 Tomcat 上部署應用程序並運行簡單的 .jar,該怎麼辦?
- 使用 .jar 項目——你將如何啟動 http 服務器? 您的應用程序會接受傳入的 REST 調用嗎?
額外:如何將 CORS 過濾器添加到您的 Jersey Web 應用程序?
您必須將Cross-origin resource sharing
添加到您的 Web Jersey 應用程序。 請按照本教程進行相同的操作:
什麼是跨域資源共享 (CORS) – 如何將其添加到您的 Java Jersey Web 服務器?
好吧,有一個簡單的解決方案。 有一種方法可以僅使用 Java SE API 在 Java 中創建一個非常基本的 HTTP 服務器(僅支持 GET/POST),而無需編寫代碼來手動解析 HTTP 請求和手動格式化 HTTP 響應。
使用com.sun.net.httpserver.HttpServer
,我們應該可以實現以上所有。
讓我們開始吧:
第1步:
創建新的 Java 項目“ CrunchifyJerseyEmbeddedHTTPServer
”。
第2步:
將其轉換為 Maven 項目。 這將簡化我們添加依賴項的工作。 請按照本教程將現有的 Java 項目轉換為 Maven 項目。
第 3 步:
在這個項目中,我們只需要一個jersey-server
依賴項。
第四步:
在com.crunchify.tutorial
包下創建JerseyEmbeddedHTTPServerCrunchify.java
。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
package com . crunchify . tutorial ; import java . io . IOException ; import java . net . InetAddress ; import java . net . URI ; import java . net . UnknownHostException ; import javax . ws . rs . core . UriBuilder ; import com . sun . jersey . api . container . httpserver . HttpServerFactory ; import com . sun . jersey . api . core . PackagesResourceConfig ; import com . sun . jersey . api . core . ResourceConfig ; import com . sun . net . httpserver . HttpServer ; /** * @author Crunchify.com * */ @SuppressWarnings ( "restriction" ) public class JerseyEmbeddedHTTPServerCrunchify { public static void main ( String [ ] args ) throws IOException { System . out . println ( "Starting Crunchify's Embedded Jersey HTTPServer...\n" ) ; HttpServer crunchifyHTTPServer = createHttpServer ( ) ; crunchifyHTTPServer . start ( ) ; System . out . println ( String . format ( "\nJersey Application Server started with WADL available at " + "%sapplication.wadl\n" , getCrunchifyURI ( ) ) ) ; System . out . println ( "Started Crunchify's Embedded Jersey HTTPServer Successfully !!!" ) ; } private static HttpServer createHttpServer ( ) throws IOException { ResourceConfig crunchifyResourceConfig = new PackagesResourceConfig ( "com.crunchify.tutorial" ) ; // This tutorial required and then enable below line: https://crunchify.com/?p=6360 //crunchifyResourceConfig.getContainerResponseFilters().add(CrunchifyCORSFilter.class); return HttpServerFactory . create ( getCrunchifyURI ( ) , crunchifyResourceConfig ) ; } private static URI getCrunchifyURI ( ) { return UriBuilder . fromUri ( "http://" + crunchifyGetHostName ( ) + "/" ) . port ( 8085 ) . build ( ) ; } private static String crunchifyGetHostName ( ) { String hostName = "localhost" ; try { hostName = InetAddress . getLocalHost ( ) . getCanonicalHostName ( ) ; } catch ( UnknownHostException e ) { e . printStackTrace ( ) ; } return hostName ; } } |

第 5 步:
創建您的 REST API。 在同一個包“ com.crunchify.tutorial
”下創建java類CrunchifyAPI.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
package com . crunchify . tutorial ; import javax . ws . rs . GET ; import javax . ws . rs . Path ; import javax . ws . rs . Produces ; import javax . ws . rs . core . MediaType ; @Path ( "api" ) public class CrunchifyAPI { @GET @Produces ( MediaType . TEXT_PLAIN ) public String get ( ) { return "\n This is Crunchify REST API via HTTPServer" ; } } |
第 6 步:
就是這樣。 現在右鍵單擊JerseyEmbeddedHTTPServerCrunchify.java
並“ Run it as Java Application
”。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Starting Crunchify 's Embedded Jersey HTTPServer... Jun 30, 2014 3:45:26 PM com.sun.jersey.api.core.PackagesResourceConfig init INFO: Scanning for root resource and provider classes in the packages: com.crunchify.tutorial Jun 30, 2014 3:45:26 PM com.sun.jersey.api.core.ScanningResourceConfig logClasses INFO: Root resource classes found: class com.crunchify.tutorial.CrunchifyAPI Jun 30, 2014 3:45:26 PM com.sun.jersey.api.core.ScanningResourceConfig init INFO: No provider classes found. Jun 30, 2014 3:45:27 PM com.sun.jersey.server.impl.application.WebApplicationImpl _initiate INFO: Initiating Jersey application, version ' Jersey : 1.18.1 02 / 19 / 2014 03 : 28 AM ' Jersey Application Server started with WADL available at http://localhost:8085/application.wadl Started Crunchify' s Embedded Jersey HTTPServer Successfully ! ! ! |
第 7 步:
驗證結果。 訪問此 URL: http://localhost:8085/api
,您應該會在瀏覽器上看到結果。
希望你喜歡這個教程。 需要分享任何評論嗎?
我是來聽的。 謝謝。