嵌入式 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
,您应该会在浏览器上看到结果。
希望你喜欢这个教程。 需要分享任何评论吗?
我是来听的。 谢谢。