在本文中,我们将设置一个运行 Java EE 应用程序的工作环境。让我提醒您:在前面的材料中,我们介绍了Java EE的基础知识。 我们所说的环境是指一组不同的软件组件:
- Java EE SDK;
- Java EE 应用服务器 GlassFish;
- 设置 IntelliJ IDEA。
- 展示如何准备使用 Java EE 应用程序的工作环境。
- 展示如何在 GlassFish 服务器上从 IntelliJ IDEA 部署和运行 Java EE 应用程序。
- 下载并安装 Java EE 7 SDK。
- 让我们提出 Java EE 应用服务器 GlassFish。
- 让我们学习如何通过命令行启动和停止服务器。
- 让我们配置 IntelliJ IDEA 以将应用程序部署到该服务器。
- 让我们部署并运行演示应用程序,该应用程序与 GlassFish 应用程序服务器一起包含在 Java EE 7 SDK 中。
- 玻璃鱼4.0;
- IntelliJ IDEA 2019.3.1(旗舰版);
- Java EE SDK 7。
安装 Java EE SDK
重要条件。在安装Java EE SDK之前,您需要确保已预安装Java SE SDK。-
首先,我们需要下载SDK。为此,您可以在搜索引擎中输入:“Java EE SDK 7”,或者直接从 Oracle 网站转到sdk 下载页面。
-
您需要从提供的 SDK 列表中选择适合您平台的 SDK。本文介绍了安装发行版:“java_ee_sdk-7-jdk7-windows-x64-ml.exe”
-
运行安装文件。启动过程中,可能会出现以下错误(如果没有出现,则可以继续安装):
这意味着安装程序无法找到预安装的 Java 运行时环境的路径。可以通过使用命令行手动将路径传递到 JRE 来更正该错误。为此,您需要通过 PowerShell 运行安装文件,并通过 -j 参数传递预安装 JRE 的路径。
例如,像这样:
-
对于大多数程序来说,进一步的安装过程是非常典型的。您所需要做的就是单击“下一步”和“安装”按钮。
该程序将安装 Java EE SDK 以及 GlassFish 服务器,安装完成后,服务器将启动并可供使用。 -
为了确保 GlassFish 服务器正常工作,安装完成后,您可以打开服务器管理面板,该面板位于: http://localhost:4848/
截图如下:
通过命令行启动和停止 GlassFish
因此,服务器已启动并正在运行,但服务器启动是由安装程序启动的。下面我们将尝试弄清楚如何自己启动和停止服务器。首先,让我们揭示一个域这样的实体。 域是由一个管理服务器管理的一组一个或多个 GlassFish 服务器实例。安装 GlassFish 服务器时,会创建一个默认域 - domain1。以下组件与其关联:- 服务器端口(默认8080);
- 管理服务器端口(默认4848);
- 管理员用户名和密码(默认为admin,默认不需要密码)。
asadmin start-domain domain_name
asadmin stop-domain domain_name
让我们尝试通过从子目录C:\glassfish4\glassfish\bin运行 PowerShell 来停止服务器(因为它在安装后已经在运行) : 服务器已停止。现在让我们运行它:
我们分析第一个 Java EE 应用程序 dukes-age
接下来我们将看一个演示 Java EE 应用程序:dukes-age。该应用程序与第一个 cup 应用程序一起包含在 Java EE SDK 中。这些应用程序的描述位于 Oracle 官方文档网站上面向Java EE 初学者的 Java EE 入门课程的第 3 节和第 4 节中。在本文中,我们将简要介绍 dukes-age 应用程序,并更详细地研究从 IntelliJ IDEA 开发环境在 GlassFish 服务器上启动该应用程序的过程。该应用程序位于 glassfish 服务器目录内。如果您在安装 Java EE SDK 时没有更改 glassfish 服务器的默认路径,则可以在文件夹中找到此应用程序:C:\glassfish4\docs\firstcup\example\dukes-age。可能每个Java开发人员,无论是初学者还是经验丰富的人,都至少见过一次Java编程语言的吉祥物——Duke: 很少有人知道Duke有生日。他出生于 1995 年 5 月 23 日,当时 Java 技术的第一个演示版本发布。公爵年龄应用程序,顾名思义,提供有关杜克年龄的信息。让我们在 IntelliJ IDEA 中打开此应用程序:File -> New -> Project From Existing Sources... 然后转到包含 dukes-age 应用程序的文件夹,默认位于C:\glassfish4\docs\firstcup\example\dukes- Age,选择文件 pom.xml 并单击“确定”: 将打开具有以下结构的应用程序: 让我们看一下类代码DukesAgeResource
:
package firstcup.dukesage.resource;
import java.util.Calendar;
import java.util.GregorianCalendar;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
/**
* REST Web Service
*
*/
@Path("dukesAge")
public class DukesAgeResource {
/** Creates a new instance of DukesAgeResource */
public DukesAgeResource() {
}
/**
* Retrieves representation of an instance of DukesAgeResource
* @return an instance of java.lang.String
*/
@GET
@Produces("text/plain")
public String getText() {
// Create a new Calendar for Duke's birthday
Calendar dukesBirthday = new GregorianCalendar(1995, Calendar.MAY, 23);
// Create a new Calendar for today
Calendar now = GregorianCalendar.getInstance();
// Subtract today's year from Duke's birth year, 1995
int dukesAge = now.get(Calendar.YEAR) - dukesBirthday.get(Calendar.YEAR);
dukesBirthday.add(Calendar.YEAR, dukesAge);
// If today's date is before May 23, subtract a year from Duke's age
if (now.before(dukesBirthday)) {
dukesAge--;
}
// Return a String representation of Duke's age
return "" + dukesAge;
}
}
这是一个 JAX-RS RESTful Web 服务,具有一种方法 - getText()
。如果您检查此方法的代码,就会发现该方法返回自 Duke 出生以来已经过去的年数。也就是说,该方法返回 Duke 的年龄。类是 REST 上下文中的资源。
- 类上方的注释
@Path("dukesAge")
定义了此类将处理的调用的 URI 路径。 - 该方法上方的注释
@GET
告诉我们该方法处理 GET 请求。 - 该注释
@Produces("text/plain")
指定对请求的响应的媒体类型。不难猜测该方法getText()
将生成媒体类型为text/plain 的响应。
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<servlet>
<servlet-name>javax.ws.rs.core.Application</servlet-name>
</servlet>
<servlet-mapping>
<servlet-name>javax.ws.rs.core.Application</servlet-name>
<url-pattern>/webapi/*</url-pattern>
</servlet-mapping>
</web-app>
在此文件中,在 tag 内部,定义了具有值的servlet-mapping
标记。这里定义了某个根点,服务将进一步处理对该根点的调用。如果结合注解来看,原来要获取Duke的年龄信息,需要联系地址/webapi/dukesAge。 url-pattern
/webapi/*
@Path("dukesAge")
设置 IntelliJ IDEA 以在 GlassFish 服务器上运行 Java EE 应用程序
现在我们对 dukes-age 应用程序有了一个非常全面的了解(在Oracle 网站上了解更多相关信息),让我们配置 IntelliJ IDEA,以便可以从我们的 IDE 运行该应用程序。设置 IntelliJ IDEA- 为此,请转到菜单“运行”->“编辑配置”。
- 运行/调试配置面板将打开:
- 我们需要添加一个新的配置。为此,请单击加号,或使用 Alt+Insert 热键。在打开的列表中,选择 GlassFish Server -> Local:
- 在打开的窗口中,让我们开始设置配置:
- 下一步是指示需要部署到服务器的工件。这可以通过“部署”选项卡完成,方法是单击加号 -> Artifact...
- 选择 dukes-age:war 并单击“确定”:
- 接下来,单击“应用”,然后单击“确定”保存我们的配置。
启动应用程序
现在让我们尝试运行该应用程序。-
为此,您可以使用热键 Alt+Shift+F10,或通过菜单“运行”->“运行...”
并选择我们创建的 dukes-age 配置:
-
之后我们在“服务”面板中看到启动日志:
-
然后,如果一切都按照说明完成,浏览器将打开,并且很明显没有任何效果:
-
为此,我们返回 IntelliJ IDEA,然后转到菜单:Run -> Edit Configurations...
-
我们选择之前保存的配置并按照下面的截图更新URL:
-
让我们保存配置并使用 Ctrl+Shift+F10 热键或使用“服务”面板上的特殊按钮重新启动应用程序:
-
重启后,如果一切正确,我们将看到 Duke 的年龄:
结论
在本文中,我们以 GlassFish 4.0 服务器、IntelliJ IDEA 2019.3.1(旗舰版)开发环境和 Java EE SDK 版本 7 为例,了解了如何配置本地环境以使用 Java EE 应用程序。您可以如何:- 下载并安装 Java EE SDK 以及 GlassFish 服务器;
- 通过 PowerShell 停止和启动 GlassFish 服务器;
- 配置 IntelliJ IDEA,以便您可以将 Java EE 应用程序从 IDE 部署到 GlassFish 服务器并立即启动它们。
奖励任务
- 自己重复所有描述的步骤。
- 参加Oracle 为 Java EE 初学者开发人员提供的 Java EE 入门课程。
- 带星号的项目。尝试自己部署第二个first-cup 演示应用程序。该应用程序的交互性更强,并且还可以与 dukes-age 应用程序进行交互。要完成此步骤,您需要独立理解以下问题:
- 如何启用 glassFish 服务器内的数据库;
- 如何将两个应用程序相互集成(first-cup 内部指示我们在本文中讨论的 dukes-age 端点的路径);
- 如何在 Intellij IDEA 中创建新配置以进行首次杯部署(类似于本文中所示的内容);
- 可能还有很多其他问题)
GO TO FULL VERSION