IntelliJ IDEA 2025.3 Help

教程:您的第一个 RESTful web service

本教程讲述如何在 IntelliJ IDEA 中创建一个简单的 RESTful 网络服务并将其部署到 Tomcat GlassFish 应用服务器上。 当您通过网络浏览器访问特定 URL 或以其他方式向该 URL 发送 GET 请求时,该服务将输出 您好,世界!。 请使用本页面顶部的切换器查看其他应用服务器的说明。

您将创建一个新的 Java Enterprise 项目,添加必要的 Java 代码,告诉 IntelliJ IDEA 您的 GlassFish Tomcat 服务器的位置,然后使用运行配置来构建构件,启动服务器,并将构件部署到服务器上。

您将需要以下内容:

相关插件

默认情况下, IntelliJ IDEA Ultimate 会捆绑并启用以下必需插件。 如果某些功能无法正常运行,请确保以下插件已启用:

  • Jakarta EE 平台

  • Jakarta EE:应用服务器

  • Jakarta EE:Web/Servlets

  • Jakarta EE:RESTful Web 服务 (JAX-RS)

  • Tomcat 和 TomEE

按照 安装插件 中的说明安装并启用 GlassFish 插件。

Java SE Development Kit (JDK) 版本 1.8 或更高版本

您可以按照 Java Development Kit (JDK) 中的说明直接从 IntelliJ IDEA 获取 JDK,或手动下载并安装,例如: Oracle JDKOpenJDK

Tomcat

Tomcat 应用服务器版本 7 或更高版本。

GlassFish

GlassFish 应用服务器版本 4.0 或更高版本。 您可以从 官方存储库 获取最新版本。 对于本教程而言, Web Profile 子集已足够。

Web 浏览器

您将需要一个 Web 浏览器来查看您的 Web 应用程序。

创建一个新的 Java Enterprise 项目

IntelliJ IDEA 包含一个专用向导,用于基于各种 Java EE 和 Jakarta EE 实现创建 Java 企业项目。 在本教程中,我们将创建一个简单的 Web 应用程序。

  1. 在主菜单中,前往 文件(F) | 新建(N) | 项目

  2. 新建项目 对话框中,选择 Jakarta EE

    新建 Java 企业项目向导
    新建 Java 企业项目向导

    请输入您的项目名称: RestGlassfishHelloWorldRestTomcatHelloWorld。 在本教程中,请使用 Oracle OpenJDK 21 作为项目 SDK ,并选择 REST 服务 模板。 暂时不要选择或添加应用服务器,我们稍后再进行。 选择 JavaMaven。 点击 下一步(N) 继续。

  3. 版本(V) 字段中,选择 Jakarta EE 10 ,因为本教程使用的 Tomcat 10.1 与其兼容。

    版本(V) 字段中,选择 Jakarta EE 9.1 ,因为本教程使用的 GlassFish 6.2.5 与其兼容。

    依赖项 列表中,选择以下内容:

    • 上下文与依赖注入( CDI )

    • RESTful Web 服务 (JAX-RS)

    • Servlet

    • Eclipse Jersey 服务器

    • Weld SE

    新建 Java 企业项目向导
    新建 Java 企业项目向导

    点击 创建(C)

探索默认项目结构

IntelliJ IDEA 会创建一个包含一些样板代码的项目,您可以成功构建并部署。

  • pom.xml 是包含 Maven 配置信息的 项目对象模型 ,其中包括构建项目所需的依赖项和插件。

    <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>RestTomcatHelloWorld</artifactId> <version>1.0-SNAPSHOT</version> <name>RestTomcatHelloWorld</name> <packaging>war</packaging> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.target>21</maven.compiler.target> <maven.compiler.source>21</maven.compiler.source> <junit.version>5.11.0-M2</junit.version> </properties> <dependencies> <dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> <version>6.1.0</version> <scope>provided</scope> </dependency><dependency> <groupId>org.glassfish.jersey.containers</groupId> <artifactId>jersey-container-servlet</artifactId> <version>4.0.0-M1</version> </dependency> <dependency> <groupId>org.glassfish.jersey.media</groupId> <artifactId>jersey-media-json-jackson</artifactId> <version>4.0.0-M1</version> </dependency> <dependency> <groupId>org.glassfish.jersey.inject</groupId> <artifactId>jersey-cdi2-se</artifactId> <version>4.0.0-M1</version> </dependency><dependency> <groupId>org.jboss.weld.se</groupId> <artifactId>weld-se-core</artifactId> <version>6.0.0.Beta1</version> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>3.4.0</version> </plugin> </plugins> </build> </project>
    <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>RestTomcatHelloWorld</artifactId> <version>1.0-SNAPSHOT</version> <name>RestTomcatHelloWorld</name> <packaging>war</packaging> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.target>11</maven.compiler.target> <maven.compiler.source>11</maven.compiler.source> <junit.version>5.9.2</junit.version> </properties> <dependencies> <dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> <version>5.0.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.glassfish.jersey.containers</groupId> <artifactId>jersey-container-servlet</artifactId> <version>3.0.4</version> </dependency> <dependency> <groupId>org.glassfish.jersey.media</groupId> <artifactId>jersey-media-json-jackson</artifactId> <version>3.0.4</version> </dependency> <dependency> <groupId>org.glassfish.jersey.inject</groupId> <artifactId>jersey-cdi2-se</artifactId> <version>3.0.4</version> </dependency> <dependency> <groupId>org.jboss.weld.se</groupId> <artifactId>weld-se-core</artifactId> <version>4.0.3.Final</version> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>3.3.2</version> </plugin> </plugins> </build> </project>
  • HelloResource.java 是一个实现 RESTful 网络服务的 根资源类 ,它使用以下 JAX-RS 注解:

    • @Path 注解识别用于访问此资源的 URI,相对于应用程序根目录。

    • @GET 注解表明 hello() 方法将处理发送到指定 URI 的 HTTP GET 请求。

    • @Produces 注解指定了方法生成和返回的 MIME 媒体类型。

    package com.example.restglassfishhelloworld; import jakarta.ws.rs.GET; import jakarta.ws.rs.Path; import jakarta.ws.rs.Produces; @Path("/hello-world") public class HelloResource { @GET @Produces("text/plain") public String hello() { return "Hello, World!"; } }
    package com.example.resttomcathelloworld; import jakarta.ws.rs.GET; import jakarta.ws.rs.Path; import jakarta.ws.rs.Produces; @Path("/hello-world") public class HelloResource { @GET @Produces("text/plain") public String hello() { return "Hello, World!"; } }
  • HelloApplication.java javax.ws.rs.core.Application 的子类,用于配置应用程序运行资源类中定义的 REST 资源的环境。 @ApplicationPath 注释标识了应用根的 URL 映射(默认情况下,它被设置为 /api)。

    package com.example.restglassfishhelloworld; import jakarta.ws.rs.ApplicationPath; import jakarta.ws.rs.core.Application; @ApplicationPath("/api") public class HelloApplication extends Application { }
    package com.example.resttomcathelloworld; import jakarta.ws.rs.ApplicationPath; import jakarta.ws.rs.core.Application; @ApplicationPath("/api") public class HelloApplication extends Application { }

配置应用服务器

让 IntelliJ IDEA 知道 GlassFish Tomcat 应用服务器的位置。

  1. Ctrl+Alt+S 打开设置,然后选择 构建、执行、部署 | 应用服务器

  2. 单击 "添加"按钮 并选择 GlassFish 服务器Tomcat

  3. 指定 GlassFish Tomcat 服务器安装位置的路径。 IntelliJ IDEA 会适当地检测并设置名称和版本。

    GlassFish 应用服务器配置
    Tomcat 应用服务器配置

创建运行配置

IntelliJ IDEA 需要一个运行配置来构建工件并将其部署到您的应用服务器。

  1. 在主菜单中,转到 运行 | 编辑配置(E)

  2. 运行/调试配置 对话框中,点击 "添加"按钮 ,展开 GlassFish 服务器Tomcat 服务器 节点,并选择 本地

  3. 修复出现在运行配置设置对话框底部的任何警告。

    运行配置警告

    很可能,您需要修复以下问题:

    • 服务器 选项卡上,将 服务器域名 设置为 domain1

    • 部署 选项卡上,添加您想要部署的工件: RestGlassfishHelloWorld:war explodedRestTomcatHelloWorld:war exploded

  4. 服务器 选项卡上,将 URL 设置为指向 根资源

    http://localhost:8080/RestGlassfishHelloWorld-1.0-SNAPSHOT/api/hello-world
    http://localhost:8080/RestTomcatHelloWorld_war_exploded/api/hello-world
    GlassFish 运行配置已完成
    Tomcat 运行配置已完成
  5. 点击 确定(O) 以保存运行配置。

  6. 要运行配置,请按 Alt+Shift+F10 并选择创建的应用服务器配置。

    或者,如果您已在顶部的主工具栏中选择了运行配置,您可以在主工具栏中点击 运行图标 ,或按 Shift+F10 来运行它。

此运行配置会构建构件,然后启动 GlassFish Tomcat服务器,并将构件部署到服务器。 您应该会在 服务 工具窗口中看到相应的输出。

在 服務 工具窗口中启动 Tomcat 服务器并部署应用程序
已在“服务”工具窗口中启动 GlassFish 服务器并部署应用程序

完成后,IntelliJ IDEA 会在您的 Web 浏览器中打开指定的 URL。

在 Web 浏览器中显示的已部署应用程序输出

如果没有,请尝试自行打开 URL: http://localhost:8080/RestGlassfishHelloWorld-1.0-SNAPSHOT/api/hello-world http://localhost:8080/RestTomcatHelloWorld_war_exploded/api/hello-world

故障排除

与 Jakarta EE 的兼容性

如果您得到一个 404 错误,请确保在 创建项目 时,选择了与您的 GlassFish 版本兼容的 Jakarta EE 规范版本。

有关详细信息,请参阅 GlassFish 版本兼容性

较早的 IntelliJ IDEA 版本

如果您使用的是 IntelliJ IDEA 版本 2020.2.2 或更早版本, 新建项目 向导将不会添加 Tomcat 所需的所有必要依赖项。 在这种情况下,打开 pom.xml 并添加以下依赖项:

<dependency> <groupId>org.glassfish.jersey.media</groupId> <artifactId>jersey-media-json-jackson</artifactId> <version>2.31</version> </dependency> <dependency> <groupId>org.glassfish.jersey.inject</groupId> <artifactId>jersey-hk2</artifactId> <version>2.31</version> </dependency>

例如,在 2020.2.3 版本中,生成的 pom.xml 如下所示:

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>RestTomcatHelloWorld</artifactId> <version>1.0-SNAPSHOT</version> <name>RestTomcatHelloWorld</name> <packaging>war</packaging> <properties> <maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.source>1.8</maven.compiler.source> <junit.version>5.6.2</junit.version> </properties> <dependencies> <dependency> <groupId>javax.ws.rs</groupId> <artifactId>javax.ws.rs-api</artifactId> <version>2.1.1</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.glassfish.jersey.containers</groupId> <artifactId>jersey-container-servlet</artifactId> <version>2.31</version> </dependency> <dependency> <groupId>org.glassfish.jersey.media</groupId> <artifactId>jersey-media-json-jackson</artifactId> <version>2.31</version> </dependency> <dependency> <groupId>org.glassfish.jersey.inject</groupId> <artifactId>jersey-hk2</artifactId> <version>2.31</version> </dependency> <dependency> <groupId>org.glassfish.jersey.core</groupId> <artifactId>jersey-client</artifactId> <version>2.31</version> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>3.3.0</version> </plugin> </plugins> </build> </project>
最后修改日期: 2025年 12月 2日