使用 Java™ 开发人员已经熟悉的语言和工具,开始在云中工作。在本教程中,学习如何使用 Java 语言和 IBM Bluemix™ Tools for Eclipse 来运行、修改、测试一个简单 Web 应用程序,并将其部署到云中。在将应用程序部署到 IBM 云开发平台 Bluemix 后,任何人都可以通过网络访问它。
本教程是 developerWorks 上的 “Bluemix 基础” 教程系列中的一篇文章。
第 5 步. 使用 Eclipse on Liberty 配置文件运行应用程序
IBM Bluemix 是企业开发人员构建、运行、扩展和管理应用程序的地方。准备好开始在 Bluemix 上创建自己的应用程序了吗?本教程将介绍托管一个 Java Web 应用程序的步骤。您首先要提供一个示例 Java Web 应用程序,在本地系统上运行它,修改它的代码,然后将该应用程序部署到 Bluemix,以便任何在线的人都可以使用它。
如果不确定您可能看到的 Bluemix 术语和状态消息的含义,请阅读本教程的 术语表和状态消息 部分。
这里快速概述一下本教程中将如何使用 Bluemix:
在云中运行您自己的 Liberty 配置文件 服务器实例。在成功部署 Liberty 配置文件后,它会持续运行,但不会与任何人共享。
您在计算机上运行 Eclipse IDE,并通过 Eclipse 项目归档文件加载应用程序的源代码。Liberty 配置文件的一个本地实例在 Eclipse 中运行。使用此设置,可以快速测试和调试应用程序,无需连接网络并在每次执行更改后上传代码。
当您的代码能够在本地服务器上正常运行,而且您觉得已准备好与大家分享它后,将您的服务器打包并发送到云中(图中的实线箭头表示的流程)。然后,您的应用程序可以通过 Bluemix 部署,任何人都可以使用浏览器通过网络访问它。
图中的虚线箭头表示一种将 Web 应用程序部署到 Bluemix 的替代方式。如果拥有包含该应用程序的兼容 Java Enterprise Edition (JEE) 的 WAR 文件,您可以在几分钟内将它直接部署到 Bluemix — 甚至不需要在您计算机上安装 Java(或 Eclipse)。本教程首先将展示这种替代方法。
设置 Eclipse 时,必须创建一个工作区— 计算机上供 Eclipse
存储您的所有工作的目录。不要将工作区 与项目
混淆。您可以在同一个工作区中创建和管理多个项目(它们甚至无需都是 Java 项目)。您可以将多个工作区存储在磁盘上,但
Eclipse 每次只处理一个工作区。
可以将 lauren.war 文件直接部署到在您自己的计算机或 Bluemix 云中运行的兼容 JEE 的服务器,比如 Liberty 配置文件服务器。现在将它部署到 Bluemix:
cf api https://api.ng.bluemix.net/
cf login
cf push 您的应用程序名称 -p lauren.war
您为应用程序选择的名称必须在 Bluemix 上是唯一的 — 未被其他任何 Bluemix 用户使用。如果该名称(称为一个路由)已被使用,您会获得一个错误。
您刚才运行的命令:
cf
命令行工具和一个
Bluemix 帐户。在本教程后面的 术语表和状态消息 中,将进一步了解该 buildpack 如何与 Bluemix 一起载入和部署您的应用程序。
从下一步开始,将检查和修改应用程序的代码。Eclipse IDE 使您在开发 Java Web 应用程序时可以轻松地处理代码和导航大型项目目录树。
LaurenLandscapesJava
项目现在已导入到您的工作区中。您可以在左边的 Enterprise
Explorer 窗格中看到它的结构。下一步是熟悉该项目和代码。
在 Eclipse 中打开您的项目,查看左边的 Enterprise Explorer 窗格:
展开 Java Resources 查看 Java 源代码文件。展开 WebContent 可以看到组成该网站的 4 个 JSP 文件:
下图显示了该应用程序的工作原理:
针对 Lauren's Lovely Landscapes 商店的某个页面的 Web 请求首先会经过
DispatchServlet
,然后转发到一个 JSP 页面。DispatchServlet
将
WebsiteTitle
POJO(Plain Old Java Object,普通 Java
对象)的一个实例附加到该请求上。该请求被传递到 JSP 页面。JSP 页面使用 WebsiteTitle
将标题设置为
Lauren's Lovely Landscapes
。
如果检查 DispatchServlet
的源代码,可以看到使用 @WebServlet
注释指定的 servlet 路径映射:
@WebServlet({ "/home", "/antarctica", "/alaska", "/arctic", "/australia"}) public class DispatchServlet extends HttpServlet { ...
在本例中,所有 4
个路径(/home
、/antarctica
、/alaska
和
/australia
)都映射到 DispatchServlet
。Liberty
配置文件将针对这些路径的请求首先传递给 DispatchServlet
。
在 DispatchServlet
中,还可以看到附加一个 WebsiteTitle
实例作为请求的属性的代码:
request.setAttribute("myapp", myapp);
如果检查一个 JSP 文件(例如 alaska.jsp),可以看到抓取标题的 Expression Language (EL) 代码:
<head> <title> ${myapp.title} </title> ...
现在,已经准备好在由 Eclipse 托管的一个 Liberty 配置文件实例上本地运行该应用程序:
为您的类编写单元测试是一种不错的 Java 编码实践。
WebsiteTitle
类包含两个单元测试。要运行这些测试,请按照以下顺序进行操作:
您可以看到两个测试都在运行。绿色的状态表示所有单元测试都成功通过:
在这一步中,您将修改印刷品的价格,查看它是否会立即在本地运行的网站上获得更新。
100.00
更改为 99.99
并保存该文件。更改的代码应类似于:
<div id="price">99.99</div>
要确保您的代码更改没有造成任何破坏,请养成每次修改应用程序后运行单元测试的习惯。
要重新运行单元测试:
您会再次看到绿色状态,这表明所有单元测试都已成功通过。
在团队环境中开发 Java 代码时,您可能希望每次将代码提交(修改并贡献)到团队的存储库时都运行所有单元测试。Bluemix 提供了 DevOps Services,可以通过配置它们在构建项目的工作流中自动运行单元测试。本系列的 下一篇教程 将会更详细地介绍 DevOps Services。
如果您喜欢的话,可以通过 WAR 文件将更改后的应用程序部署到 Bluemix。在 Enterprise Explorer 中选择该项目。从菜单中选择 File > Export。选择 Web > WAR File。找到您想要放置 WAR 文件的目标文件夹,并将该文件命名为 lauren.war。单击 Finish 生成 WAR 文件,然后像 第 2 步 中一样部署它。
要让网络上的每个人都知道 Antarctica 印刷品的新价格,需要将更改后的应用程序部署到 Bluemix。在这一步中,您会看到将项目部署到 Bluemix 的另一种方式,它比使用 WAR 文件还要简单 — 也就是说,使用 IBM Eclipse Tools for Bluemix 打包您的 Liberty 配置文件服务器实例并将它部署到 Bluemix 上:
IBM Eclipse Tools for Bluemix(构建于来自 Pivotal 的通用 Cloud Foundry Integration for Eclipse 之上)经过了大量自定义和调优,以简化在 Eclipse 中部署和管理 Bluemix 上的应用程序的过程。如果出于某种原因,您更喜欢直接使用 Cloud Foundry Integration for Eclipse,那么您可以在 Eclipse Marketplace 上找到它。
成功部署后,在 Web 浏览器中访问以下链接来试用该应用程序:
https://您的应用程序名称.mybluemix.net/
让我们来看看在使用 Bluemix 时可能遇到的一些术语和状态消息。
请熟悉以下重要术语,在使用 Bluemix 时,常常会在文档和状态消息中看到它们。
在发出 cf push
CLI 命令或通过 IBM Tools for Eclipse
部署时,会看到一系列的状态消息。如果仔细查看,就会看到以下相继短语:
同时,Liberty 专家 Tom Banks 介绍了如何首先在笔记本电脑上的 Liberty 配置文件中开发一个应用程序,然后使用针对 Eclipse 的 WebSphere 开发人员工具在云中进行开发:
测试您在本教程中学到的知识。答案 在下方。
cf
1. b,2. e,3. e,4. c
在本教程中,您:
现在,通过下一篇教程在 developerWorks 上继续学习 “Bluemix 基础”。您将学习如何为 Java 应用程序设置团队协作和自动化部署:
要获取源源不断的教程和技术资源流来帮助您使用 Bluemix 进行学习、开发和连接,请参阅 developerWorks 上的 Bluemix 页面。