Google App Engine 提供基于 Google 基础架构的多种有用服务,可由使用 SDK 随附的库的应用程序访问。其中一种服务是用户服务,可使应用程序与 Google 用户帐户集成。使用用户服务,用户可以使用已有的 Google 帐户登录到您的应用程序。
我们来使用用户服务个性化此应用程序的问候语。
按照指示将 src/guestbook/GuestbookServlet.java 编辑如下:
package guestbook;
import java.io.IOException;
import javax.servlet.http.*;
import com.google.appengine.api.users.User;
import com.google.appengine.api.users.UserService;
import com.google.appengine.api.users.UserServiceFactory;
public class GuestbookServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
UserService userService = UserServiceFactory.getUserService();
User user = userService.getCurrentUser();
if (user != null) {
resp.setContentType("text/plain");
resp.getWriter().println("Hello, " + user.getNickname());
} else {
resp.sendRedirect(userService.createLoginURL(req.getRequestURI()));
}
}
}
如果使用的是 Eclipse 并且您的开发服务器正在调试器中运行,当您将更改保存到此文件时,Eclipse 将自动编译新代码,然后尝试将新代码插入已经运行的服务器中。无需重新启动,对类、JSP、静态文件和 appengine-web.xml 做出的更改将立即反映在运行的服务器上。如果您更改 web.xml 或其他配置文件,您必须停止并启动服务器来查看更改。
如果使用的是 Ant,您必须停止服务器并重新构建项目来查看对源代码做出的更改。对 JSP 和静态文件所做的更改无需重新启动服务器。
必要时,重新构建项目和重新启动服务器。通过在浏览器中访问 servlet 网址测试应用程序:
服务器没有显示消息,而是提示您输入电子邮件地址。输入任何电子邮件地址(例如 alfred@example.com),然后点击“登录”。应用程序将显示消息,此时包含您输入的电子邮件地址。
GuestbookServlet 类的新代码使用用户 API 来检查用户是否使用 Google 帐户登录。如果不是,将用户重定向至 Google 帐户登录屏幕。userService.createLoginURL(...) 返回登录屏幕的网址。登录功能可通过传递到 createLoginURL(...) 的网址(在这种情况下是当前页面的网址)将用户重定向回应用程序。
开发服务器了解如何模拟 Google 帐户登录设施。当在您的本地计算机上运行时,重定向转至您可以输入任何电子邮件地址的页面来模拟一个帐户登录。当在 App Engine 上运行时,重定向转至实际 Google 帐户屏幕。
现在,您登录到您的测试应用程序。如果重新载入该页面,将再次显示该消息。
为允许用户退出,提供了一个由 createLogoutURL() 方法生成的指向退出屏幕的链接。请注意,退出服务将使用户退出所有 Google 服务。
既然已知如何识别用户,我们可以邀请用户发布消息到留言簿。让我们使用 JavaServer 页面 (JSP) 为此应用程序设计一个用户界面。
继续转至使用 JSP。