教程:您的第一个 Jakarta EE 应用程序
本教程介绍了如何在 IntelliJ IDEA 中创建一个简单的 Jakarta Enterprise Edition (EE) Web 应用程序。 该应用程序将包括一个显示 Hello, World!
的JSP页面和一个链接到显示 Hello, World!
的Java servlet。
您将使用 Web 应用程序模板创建一个新的 Jakarta EE 项目,告诉 IntelliJ IDEA 您的应用服务器位于何处,然后使用运行配置来构建构件,启动服务器,并将构件部署到服务器上。
您将需要以下内容:
IntelliJ IDEA Ultimate | 免费 IntelliJ IDEA 社区版不支持 Java Enterprise / Jakarta Enterprise 开发。 如需更多信息,请参阅 IntelliJ IDEA Ultimate 与 IntelliJ IDEA Community Edition |
相关插件 | 默认情况下,以下必要插件已捆绑并在 IntelliJ IDEA Ultimate 中启用。 如果某些功能无法正常运行,请确保以下插件已启用:
安装并启用 GlassFish插件,如 安装插件 所述。 |
Java SE Development Kit (JDK) 版本 1.8 或更高版本 | 您可以按照 Java Development Kit (JDK) 中的描述直接从 IntelliJ IDEA 获取 JDK,也可以手动下载并安装,例如: Oracle JDK 或 OpenJDK。 |
Tomcat | Tomcat 应用程序服务器版本 7 或更高版本。 |
Glassfish | GlassFish 应用服务器版本 4.0 或更高版本。 您可以从 官方仓库获取最新版本。 此教程的目的应该仅需要 Web Profile子集。 |
网页浏览器 | 您将需要一个 Web 浏览器来查看您的 Web 应用程序。 |
创建一个新的 Jakarta EE 项目
IntelliJ IDEA 包含一个专门的向导,用于基于各种 Jakarta EE 实现创建 Jakarta Enterprise 项目。 在本教程中,我们将创建一个简单的 Web 应用程序。
在主菜单中,前往
。在 新建项目 对话框中,选择 Jakarta EE。
为您的项目输入一个名称:
JakartaEEHelloWorld
。请选择 Web 应用程序 模板, Maven 作为构建工具,并使用 Oracle OpenJDK 17 作为项目 SDK. 请勿选择或添加应用服务器,我们稍后会处理。
点击 下一步(N) 继续。
在 版本(V) 字段中,选择 Jakarta EE 11 ,因为这个教程中使用的 Tomcat 11 与其兼容。
在 版本(V) 字段中,选择 Jakarta EE 9.1 ,因为这是本教程中使用的 GlassFish 6.2.5 所兼容的。
在 依赖项 列表中,您可以看到该web应用程序模板仅包含 Servlet 框架下的 规范。
点击 创建。
探索默认项目结构
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>JakartaEEHelloWorld</artifactId> <version>1.0-SNAPSHOT</version> <name>JakartaEEHelloWorld</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.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>org.example</groupId> <artifactId>JakartaEEHelloWorld</artifactId> <version>1.0-SNAPSHOT</version> <name>JakartaEEHelloWorld</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.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>index.jsp 是当您访问根目录 URL 时打开的应用程序起始页面。 它渲染了
Hello World!
并链接到/hello-servlet
。<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <!DOCTYPE html> <html> <head> <title>JSP - Hello World</title> </head> <body> <h1><%= "Hello World!" %> </h1> <p/> <a href="hello-servlet">Hello Servlet</a> </body> </html>HelloServlet
类扩展了HttpServlet
并注解了@WebServlet
。 它处理对/hello-servlet
的请求:GET 请求返回呈现Hello World!
的 HTML 代码。package com.example.demo; import java.io.*; import javax.servlet.http.*; import javax.servlet.annotation.*; @WebServlet(value = "/hello-servlet") public class HelloServlet extends HttpServlet { private String message; public void init() { message = "Hello World!"; } public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { response.setContentType("text/html"); // Hello PrintWriter out = response.getWriter(); out.println("<html><body>"); out.println("<h1>" + message + "</h1>"); out.println("</body></html>"); } public void destroy() { } }
使用 项目 工具窗口来浏览和打开项目中的文件,或者按 Ctrl+Shift+N 并输入文件名。
配置应用服务器
让 IntelliJ IDEA 知道 GlassFish Tomcat 应用服务器的位置。
按 Ctrl+Alt+S 打开设置,然后选择
。点击
并选择 Glassfish 服务器Tomcat。
请指定 GlassFish Tomcat 服务器的安装位置。 IntelliJ IDEA 会适当地检测并设置名称和版本。
创建运行配置
IntelliJ IDEA 需要一个运行配置来构建工件并将其部署到您的应用服务器。
在主菜单中,前往
。在 运行/调试配置 对话框中,点击
,展开 Glassfish 服务器Tomcat 服务器 节点,并选择 本地。
修复出现在运行配置设置对话框底部的任何警告。
您很可能需要修复以下问题:
在 服务器 选项卡上,将 服务器域名 设置为
domain1
。在 部署 选项卡上,添加您想要部署的 artifact:
JakartaEEHelloWorld:war exploded
在 服务器 选项卡上,将 URL 设置为指向 根资源:
http://localhost:8080/JakartaEEHelloWorld_war_exploded/http://localhost:8080/JakartaEEHelloWorld-1.0-SNAPSHOT/点击 确定(O) 以保存运行配置。
要运行配置,请按 Alt+Shift+F10 并选择创建的应用服务器配置。
或者,如果您在顶部主工具栏中选择了运行配置,您可以点击主工具栏中的
或按 Shift+F10 运行它。
此运行配置会构建构件,然后启动 GlassFish Tomcat服务器,并将构件部署到服务器。 您应当在 服务 工具窗口中看到相应的输出。


一旦完成此操作,IntelliJ IDEA 会在您的网页浏览器中打开指定的 URL。

如果没有,请尝试自行打开 URL: http://localhost:8080/JakartaEEHelloWorld_war_exploded/ http://localhost:8080/JavaEEHelloWorld-1.0-SNAPSHOT/
修改应用程序
每当您更改应用程序的源代码时,您可以重新启动运行配置以查看更改。 但这并不是总是必要的,特别是当您无法重新启动服务器时。 大多数更改都是细微的,不需要重建 工件、重新启动服务器等。 让我们更改应用程序的 JSP 页面。
打开 index.jsp 并将问候语从
Hello World
更改为A better greeting
。在 服务 工具窗口中,点击
或按 Ctrl+F10。
在 更新(U) 对话框中,选择 更新资源(U) ,因为 JSP 页是静态资源。 点击 确定。
请在您的网络浏览器中刷新应用程序 URL 以查看新字符串:
A better greeting.
您可以在运行配置设置中配置默认更新操作:在主菜单中转到 服务器 选项卡下更改 执行“更新”操作时(U) 选项的 GlassfishTomcat 运行配置设置。
。 在

使用 切换出IDE 时(F) 选项,当您从 IntelliJ IDEA 切换焦点时,您可以配置更新资源和类,而无需重新部署和重新启动服务器。 在这种情况下,您甚至不需要使用 更新应用程序 动作,只需切换到您的网页浏览器并刷新页面。
将应用程序打包成 WAR 并部署在运行中的服务器上
在先前的步骤中,我们使用解压缩的构件部署了应用程序,所有文件都是未压缩的。 这在开发的初始阶段非常有用,因为它允许您在不重新部署的情况下更新各个资源和类。 当您对自己的应用程序满意并准备通过部署到远程服务器与他人共享时,最好使用压缩的 web archive (WAR) 格式。
让我们添加一个 远程 GlassFish远程 Tomcat 运行配置,以将 WAR artifact 部署到正在运行的服务器。 这假设您没有终止之前步骤中正在运行的服务器。
在主菜单中,前往
。在 运行/调试配置 对话框中,点击
,展开 Glassfish 服务器Tomcat 节点,并选择 远程。
将此运行配置的名称更改为区别开来,例如:
远程 GlassFish 6.2.5
远程 Tomcat 10.1.5
。打开 部署 选项卡,点击表格上方的
以部署,并选择 工件。 选择
JakartaEEHelloWorld:war
工件并点击 确定。点击 确定 保存远程运行配置。
打开 index.jsp 并将问候语更改为
Hello from WAR!
。在主工具栏中选择新的运行配置,然后点击
或按 Shift+F10。
新的配置构建 WAR 工件并将其部署到运行中的服务器。 刷新 URL 查看新的问候语: Hello from WAR!
故障排除
与 Jakarta EE 的兼容性
如果您收到 404
错误,请确保在 创建项目时选择了与您的 GlassFish 版本兼容的 Jakarta EE 规范版本。
如需更多信息,请参阅 GlassFish 版本兼容性。
无法连接到 Tomcat
如果您在尝试将应用程序部署到远程 Tomcat 服务器时看到类似 Unable to connect to the localhost:1099
的错误消息,请尝试以下步骤:
请确保 Tomcat 服务器正在运行。 例如,启动 上面描述的本地 Tomcat 运行配置。
在配置 JMX 身份验证或(如果不是生产环境)禁用它之前,运行服务器时,请传递
-Dcom.sun.management.jmxremote.authenticate=false
VM 选项,然后部署应用程序。
较旧版本 IntelliJ IDEA
如果您使用 IntelliJ IDEA 版本 2020.2.2 或更早版本, 新建项目 向导将不会添加 Tomcat 所需的所有必要依赖项。 在这种情况下,打开 pom.xml 并添加以下依赖项:
例如,在 2020.2.3 版本中,生成的 pom.xml 看起来像这样:
接下来做什么?
在本教程中,您将创建并部署一个简单的 Jakarta EE 应用程序。 为了扩展这些知识,您可以按照 教程:您的第一个 RESTful web service 所述创建一个 RESTful web service。