首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

基於 Maven 的 Jersey REST 服務快速構建:Grizzly2 獨立模式與 Servlet 容器部署全流程

     編輯:Java 相關知識

方案一:Java SE 獨立模式

項目創建

mvn archetype:generate \
  -DarchetypeGroupId=org.glassfish.jersey.archetypes \
  -DarchetypeArtifactId=jersey-quickstart-grizzly2 \
  -DarchetypeVersion=2.27

啟動服務

cd project-root
mvn clean package exec:java

輸出確認:

Jun 19, 2017 11:12:23 PM org.glassfish.grizzly.http.server.NetworkListener start
INFO: Started listener bound to [localhost:8080]
Jersey app started with WADL available at https://localhost:8080/myapp/application.wadl

驗證接口

  • WADL 文檔:GET https://localhost:8080/myapp/application.wadl
  • 業務端點:GET https://localhost:8080/myapp/myresource → 返回 Got it!

核心組件解析

// 啟動類 Main.java
public class Main {
    public static final String BASE_URI = "https://localhost:8080/myapp/";
    public static HttpServer startServer() {
        ResourceConfig rc = new ResourceConfig().packages("org.drsoft.rest");
        return GrizzlyHttpServerFactory.createHttpServer(URI.create(BASE_URI), rc);
    }
    public static void main(String[] args) throws IOException {
        HttpServer server = startServer();
        System.in.read(); // 阻塞等待回車停止
        server.shutdownNow();
    }
}

// 資源類 MyResource.java
@Path("myresource")
public class MyResource {
    @GET @Produces(MediaType.TEXT_PLAIN)
    public String getIt() { return "Got it!"; }
}

Maven 插件配置關鍵點

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <version>1.6.0</version>
  <configuration>
    <mainClass>org.drsoft.rest.Main</mainClass>
  </configuration>
</plugin>

方案二:Servlet 容器部署

項目創建

mvn archetype:generate \
  -DarchetypeGroupId=org.glassfish.jersey.archetypes \
  -DarchetypeArtifactId=jersey-quickstart-webapp

web.xml 配置

<web-app version="3.1" xmlns="https://xmlns.jcp.org/xml/ns/javaee">
  <servlet>
    <servlet-name>Jersey Web Application</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
      <param-name>jersey.config.server.provider.packages</param-name>
      <param-value>org.drsoft.rest</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>Jersey Web Application</servlet-name>
    <url-pattern>/webapi/*</url-pattern>
  </servlet-mapping>
</web-app>

IDEA Tomcat 配置步驟

  1. Run → Edit Configurations → + → Tomcat Server → Local
  2. 配置 Application context 為 /RESTWebAPP
  3. Deployment 標籤添加 Artifact: 项目名:war exploded

訪問驗證

GET https://localhost:8080/RESTWebAPP/webapi/myresource → Got it!

單元測試最佳實踐

public class MyResourceTest {
    private HttpServer server;
    private WebTarget target;

    @Before
    public void setUp() {
        server = Main.startServer();
        Client client = ClientBuilder.newClient();
        target = client.target(Main.BASE_URI);
    }

    @After
    public void tearDown() { server.stop(); }

    @Test
    public void testGetIt() {
        String resp = target.path("myresource").request().get(String.class);
        assertEquals("Got it!", resp);
    }
}

避坑指南

  • Grizzly2 模式適合微服務/測試;生產建議 Servlet 容器(Tomcat/Jetty/Undertow)
  • Jersey 2.x 需 JDK 8+,依賴 jersey-container-servlet 而非 jersey-server
  • JSON 支持需額外添加 jersey-media-json-jackson 並註冊 JacksonFeature
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved