SaaS:Facebook
NetBeans IDE 提供一个支持服务型软件 (Software as a Service, SaaS) 应用程序的 Web 服务管理器。SaaS 指的是一个软件应用程序交付模型,软件供应商通过它开发 Web 性质的软件应用程序,并承载和运行供其客户通过 Internet 使用的应用程序。SaaS 是一个越来越普及的软件功能提供模型,因为无论从成本角度,还是从客户硬件资源角度而言,它都很经济划算。现在,Java 开发者可以很轻松地在 IDE 中访问 Web 上所有流行的 SaaS 服务。
Facebook 平台是一个基于标准的 Web 服务,具有用于访问和发布 Facebook 数据的方法。Facebook 平台在 Facebook Developers Wiki(Facebook 开发者 Wiki)中进行介绍。
Facebook 通过用户登录机制保护 Web 服务通信。应用程序开发者需要向 Facebook 注册应用程序才能获得 API 密钥和私钥。对 Facebook 的每个方法调用都需要使用该私钥签名。登录过程中,应用程序首先使用 API 密钥调用 Facebook 以申请一个标记。接下来,将用户重定向到基于该 API 密钥和标记构建的登录 URL。通过此 URL,用户可以转至 Facebook 上的登录页。在用户登录到 Facebook 并授权应用程序代表他/她调用 Facebook 后,应用程序将发送回会话密钥和会话私钥。之后,所有的 API 调用都必须传递该会话密钥并使用该会话私钥签名。
在本教程中,您将使用插入到 JSP 文件中的简单 friends_get 操作返回一个用户的所有 Facebook 朋友的数字 ID 列表。本教程重点介绍如何设置复杂的 Facebook 用户登录验证。这有助于您通过类推的方法使用其他用户登录服务,如 Flickr 的用户登录服务。
目录

要学习本教程,您需要具备以下软件和资源。
创建项目
在 IDE 中可以向 Servlet、现有 REST 风格的服务、JSP 页或简单的传统 Java 对象 (POJO) 中插入 SaaS 操作。在本教程中,您将创建一个 Web 应用程序项目,并向该项目的缺省 JSP 页中添加服务。
要创建此项目,请执行以下操作:
- 选择“文件”>“新建项目”。在“类别”下,选择 "Java Web"。在“项目”下选择“Web 应用程序”,然后单击“下一步”。
- 在“项目名称”字段中,键入 FacebookSaas。
- 选择 "GlassFish" 或 "Tomcat" 服务器以及 "Java EE 5"。单击其余选项,然后单击“完成”。项目的 index.jsp 页将在 IDE 中打开。
- 右键单击 "FacebookSaas" 项目节点,然后从上下文窗口中选择“属性”。这将打开“项目属性”对话框。
- 打开“运行”类别,然后取消选中“在保存时部署”。单击“确定”。

- 在“服务”窗口中,展开“Web 服务”节点。展开 "Facebook" 节点和子节点,直到您找到 friends_get 操作。

- 单击 friends_get 操作。按住鼠标左键,将此操作拖到 index.jsp 的主体内。“定制 GET SaaS”对话框将打开,您可以在其中设置初始参数值。保留缺省值,然后单击“确定”。IDE 将 friends_get 操作插入 index.jsp 的主体内,后者现在如下所示:
<body>
<h1>JSP Page</h1>
<%@ page import="org.netbeans.saas.*, org.netbeans.saas.facebook.*" %>
<%
try {
String format = null;
String flid = null;
RestResponse result = FacebookSocialNetworkingService.friendsGet(request, response, format, flid);
facebook.socialnetworkingservice.facebookresponse.FriendsGetResponse resultObj = result.getDataAsObject(facebook.socialnetworkingservice.facebookresponse.FriendsGetResponse.class);
//TODO - Uncomment the print Statement below to print result.
//out.println("The SaasService returned: "+result.getDataAsString());
} catch (Exception ex) {
ex.printStackTrace();
}
%>
</body>
如果编译器无法识别 FriendsGetResponse 类,则需要在 NetBeans IDE 中安装最新的修补程序。此修补程序包括对 JAXB FriendsGetResponse 的支持。
可以使用 FriendsGetResponse JAXB 对象来访问基础 XML 文档。在 facebook.socialnetworkingservice... 行后添加一个空行,然后键入 resultObj。将显示一个弹出式窗口,其中包含所有扩展 resultObj 的方法以及可用来访问基础 XML 的方法。

IDE 还将在 org.netbeans.saas 和 org.netbeans.saas.facebook 包中添加类以及安全密钥属性文件。“项目”窗口中将显示完整的项目结构。
最后,IDE 将在 Web Pages/WEB-INF 文件夹的 web.xml 中插入以下部分:
<servlet>
<servlet-name>FacebookSocialNetworkingServiceLogin</servlet-name>
<servlet-class>org.netbeans.saas.facebook.FacebookSocialNetworkingServiceLogin</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>FacebookSocialNetworkingServiceCallback</servlet-name>
<servlet-class>org.netbeans.saas.facebook.FacebookSocialNetworkingServiceCallback</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>FacebookSocialNetworkingServiceLogin</servlet-name>
<url-pattern>/FacebookSocialNetworkingServiceLogin</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>FacebookSocialNetworkingServiceCallback</servlet-name>
<url-pattern>/FacebookSocialNetworkingServiceCallback</url-pattern>
</servlet-mapping>
注册项目
向 Facebook 注册应用程序以获取 API 密钥和私钥。您需要有一个 Facebook 帐户。获得这些密钥后,将它们从浏览器中复制并粘贴到 org.netbeans.saas.facebook.facebooksocialnetworkingserviceauthenticator.properties 中。
要注册项目,请执行以下操作:
- 打开浏览器窗口并登录到 Facebook。
- 转至 http://www.facebook.com/developers/。开发者页面将打开。
- 单击 + Set Up New Application(+ 设置新应用程序)。"New Application"(新建应用程序)页将打开。
- 在 "Application Name"(应用程序名称)字段中,键入 FacebookSaas。应用程序名称必须始终与 Web 应用程序项目的名称匹配。
- 展开 "Optional Fields"(可选字段)。
- 键入开发者和用户支持电子邮件地址。
- 在 "Callback URL"(回调 URL)下,键入 http://localhost:8080/FacebookSaas/FacebookSocialNetworkingServiceCallback。此 URL 是从运行 GlassFish 的端口号、项目名称以及传递结果的类的名称派生的。(如果您在 8080 以外的端口上使用服务器,请键入该端口号。)可以在 index.jsp 文件的 RestResponse result = FacebookSocialNetworkingService.friendsGet(request, response, format, flid); 的代码行中看到该类的名称。所有用户登录验证服务的 URL 都是通过这种方式构造的。

- 保留其他所有字段中的缺省值。单击 Submit(提交)。浏览器使用 FacebookSaas 应用程序主页刷新。将显示新生成的 API 密钥和私钥。
- 在 IDE 中,转至“项目”窗口并打开 org.netbeans.saas.facebook 中的 facebooksocialnetworkingserviceauthenticator.properties。将浏览器中的 API 密钥和私钥复制到此文件中。保存该文件。

运行项目
从 Facebook 中检索到 API 密钥和私钥后,便可以运行项目。
运行项目,请执行以下操作:
- 打开 index.jsp 并取消注释 print 语句 out.println("The SaasService returned: "+result.getDataAsString());。还可以进行一些装饰性的更改:将标题和 h1 标题从 "JSP Page" 改为 "Facebook Get Friends Service",将 try 块中的文本从 "The SaasService returned:" 改为 "Your friendlist IDs are:",或者进行您希望尝试的其他任何此类更改。
- 在“项目”窗口中右键单击项目的节点。从上下文菜单中选择“运行”。IDE 将生成项目并将它部署到应用服务器。
- 浏览器窗口将打开,要求您登录到 Facebook。单击 "Log Into Facebook"(登录到 Facebook),将显示 FacebookSaas 项目的登录页。使用您的 Facebook 凭证登录。
- 可能会显示一条警告消息,指出 Web 页尝试访问您的 Intranet。允许该 Web 页访问您的 Intranet。
- 浏览器中将返回您的朋友列表的数字 ID 列表。
更多练习
下面是供您探讨的更多思路:
- 重新设计 index.jsp,以较之数字列表而言外观上更为引人入胜的方式来呈现数据。
- 向项目中添加其他 Facebook 操作。例如,设计 index.jsp,以显示用户的朋友信息表。
- 尝试从 Java 桌面应用程序(而不是 Web 应用程序)访问 Facebook 操作。出于测试的目的,可以将 Facebook 操作放入 main 类的 main 方法中。还可以创建一个 GUI,并将此操作拖放到该类中。向 Facebook 注册您的应用程序时,需要指定它是一个桌面应用程序,并且您不需要指定回调。此外,运行此应用程序时,将显示一个包含 URL 的对话框,用户需要将此 URL 复制并粘贴到浏览器中才能登录到 Facebook。
另请参见
有关使用 NetBeans IDE 开发 REST 风格的 Web 服务、SaaS 以及其他 Java EE 应用程序的详细信息,请参见以下资源:
要发送意见和建议、获得支持以及随时了解 NetBeans IDE Java EE 开发功能的最新进展,请加入 nbj2ee@netbeans.org 邮件列表。