Java 中的 REST 风格的 Web 服务依靠 Java 持久性 API 与数据库进行通信。具体来说,REST 风格的 Web 服务依靠持久性 API 中定义的实体类和持久性单元。实体类是指映射到关系数据库中的对象的 Java 类。按照 Java EE5 教程中的说法,“实体是一个小型持久性域对象。通常,实体表示关系数据库中的表,每个实体实例与该表中的一行相对应”。持久性单元包含 persistence.xml 文件中定义的实体类、数据源、持久性提供器以及持久性单元自身的名称集合。
您可以使用 NetBeans IDE 在相同过程中创建实体类和 REST 风格的 Web 服务,也可以使用 IDE 通过现有实体类创建 REST 风格的 Web 服务。在本教程中,将使用数据库向导中的 REST 风格的服务在相同过程中生成实体类和 REST 风格的 Web 服务。该向导自动生成持久性单元。
使用 MySQL 数据库服务器
如果使用的是 MySQL 数据库服务器而不是 JavaDB (Derby),您需要在 IDE 中注册该数据库服务器,然后将 sample 数据库添加到该服务器上。
在本教程中使用 MySQL 数据库服务器:
如果未注册 MySQL 服务器,请在 IDE 中注册该服务器。要注册 MySQL 服务器,请转至 IDE 的“服务”窗口,右键单击“数据库”节点,然后选择“注册 MySQL 服务器”。
将打开一个对话框,您可以在其中键入 MySQL 服务器的配置详细信息,包括管理员用户名和口令。请参见连接到 MySQL 数据库中的“配置 MySQL 服务器属性”。
此部分使用 JavaDB (Derby) 数据库和 jdbc/sample 数据源。JavaDB 包含在 SDK 中。jdbc/sample 数据源是在将 IDE 与 GlassFish 一起安装时由 NetBeans IDE 自动生成的。
创建项目
要创建 REST 风格的 Web 服务,您需要创建 Java Web 应用程序项目。
要创建此项目,请执行以下操作:
选择“文件”>“新建项目 (Ctrl-Shift-N)”。在“类别”下,选择 "Java Web"。在“项目”下,选择“Web 应用程序”。单击“下一步”。将打开“新建 Web 应用程序”向导。
或者,也可以创建 Maven Web 应用程序。选择“文件”>“新建项目 (Ctrl-Shift-N)”。在“类别”下,选择 "Maven"。在“项目”下,选择“Maven Web 应用程序”,然后单击“下一步”。
在“项目名称”字段中,输入 CustomerDB。单击“下一步”。
选择 EE 6 或 EE 5。在“服务器”下,选择要使用的服务器,但要注意,EE 6 项目需要使用 GlassFish Server 3 或更高版本。单击其余选项,然后单击“完成”。
Maven 项目重要说明:在创建 Maven Web 应用程序时,无法设置服务器。不过,您必须在创建持久性单元之前设置服务器。因此,在创建 Maven Web 应用程序后,请打开项目的“属性”对话框并在“运行”属性中设置服务器。要打开项目的“属性”对话框,请右键单击项目节点,然后从上下文菜单中选择“属性”。
将为数据库中的所有客户显示 Menlo Park 地址的 Google 地图。要显示客户实际地址的 Google 地图,应当为数据库中的每个实体创建一个 Customer 实例,并将地址设置为等于包含每个 Customer 的地址变量的字串。如果您使用的是 6.5 之前的 IDE 版本,还需在 try 代码块的末尾添加一行代码以关闭 Customer 的实例。此方法现在如下所示(更改的内容以粗体显示):
@GET
@Produces("text/html")
public String getGoogleMap() {
try {
Customer c = getEntity();
String address = c.getAddressline1() + " " + c.getAddressline2() + " " +
c.getCity() + " " + c.getState() + " " + c.getZip();
java.lang.Integer zoom = 15;
String iframe = "false";
RestResponse result = GoogleMapService.getGoogleMap(address, zoom, iframe);
return result.getDataAsString();
} catch (Exception ex) {
ex.printStackTrace();
}
//The close() method is only necessary with versions of NetBeans IDE earlier than 6.5
finally {
PersistenceService.getInstance().close();
}
return "";
}
再次测试 REST 风格的 Web 服务。再次为一个客户选择 text/html MIME 类型。数据库中该客户地址的 Google 地图现在显示在“原始视图”中。对于 customer1,将显示下面的地图:
从 NetBeans IDE 6.5 和 Jersey 0.8 开始,Jersey 集成到了 Spring Framework 中。在使用 Spring Framework 创建 Java Web 应用程序时,会自动创建识别 REST 的 Servlet。不过,Spring 3 不包含 aopalliance.jar,REST 风格的 Web 服务需要使用该文件来注入 EntityManager 对象。
使用 Spring Framework 创建 REST 风格的 Web 服务
要使用 Spring Framework 创建 REST 风格的 Web 服务,只需重复本教程中介绍的操作过程,但有一个例外。按照通过数据库生成实体类中所述在“新建项目”向导中创建 Java Web 应用程序时,在选择服务器后,单击“下一步”,而不是单击“完成”。“框架”面板打开。选择 "Spring Web MVC",然后单击“完成”。
创建 REST 风格的服务后,请注意 Spring 项目与在没有 Spring 的情况下创建的项目之间的以下区别:
Spring 项目的 customerdb.service 包中没有名为 PersistenceService.java 的类。