Google App Engine を使ってみる(その 2)

Google App Engine のアプリケーション用 ID の取得

https://appengine.google.com/ にアクセスしてアプリケーション用の ID を取得します(要 Google アカウント)。ID は GAE に設置される全てのアプリケーションに対して重複しないものを取る必要があります。ID が重複していないかどうかは入力フォームから確認できます。今回は私専用のテスト環境ということで redcat-gae-test という ID で取得しました。この段階ではまだアプリケーションはできていません。これから Eclipse でアプリケーションを作り、それをデプロイして初めて完成です。

Eclipse でプロジェクトを作る

プロジェクトエクスプローラで [New] → [Web Application Project] (Google のアイコンの付いたもの)でプロジェクトを作成します。作成したらソースコード群を修正していきます。

Servlet の作成

フレームワークを使わずに普通に ServletJSP でアプリケーションを作ってみましょう

package jp.mydns.akanekodou.gae;

import java.io.IOException;
import java.util.Calendar;
import java.util.TimeZone;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@SuppressWarnings("serial")
public class HelloServlet extends HttpServlet {
    @Override
    public void init() {
        TimeZone.setDefault(TimeZone.getTimeZone("JST"));
    }

    @Override
    public void doGet(
        HttpServletRequest request,
        HttpServletResponse response
    ) throws IOException, ServletException {
        request.setAttribute("now", Calendar.getInstance().getTime());
        getServletContext()
            .getRequestDispatcher("/hello.jsp")
            .forward(request, response);
    }
}

GAE は Servlet 3.0 には対応していないので WebServlet アノテーションは使えません。GAE のデフォルトのタイムゾーンUTC なので、init メソッドでデフォルトのタイムゾーンJST に切り替えています。後は現在時刻を取得して JSP に dispatch → forward するだけの簡単なプログラムです。

JSP の作成

index.jsp (ダミーページ)

<!doctype html>
<html>
<head>
  <title>Insert title here</title>
</head>
<body>
  <% response.sendRedirect("hello"); %>
</body>
</html>

hello.jsp

<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
<%@ page import="java.util.Date" %>
<!doctype html>
<html>
<head>
  <title>Hello App Engine</title>
</head>
<body>
  <h1>Hello Page</h1>
  <p>これは Google App Engine のサンプルです。</p>
  <p><%= (Date)request.getAttribute("now") %></p>
</body>
</html>

設定ファイルの修正

web.xml

<?xml version="1.0"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
  version="2.5">

  <servlet>
    <servlet-name>Hello</servlet-name>
    <servlet-class>jp.mydns.akanekodou.gae.HelloServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>Hello</servlet-name>
    <url-pattern>/hello</url-pattern>
  </servlet-mapping>

  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>

</web-app>

appengine-web.xml

<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
  <application>redcat-gae-test</application>
  <version>1</version>

  <!-- 以下略。デフォルトのままで良い。 -->
</appengine-web-app>

application 要素に取得したアプリケーションの ID を設定します。

ローカルで動作確認する

作成したプロジェクトのフォルダを右クリック → [Run As] → [Web Application] でローカルで動作確認ができます。http://localhost:8888/ にアクセスして動作していることを確認してみてください。

デプロイする

デプロイはプロジェクトのフォルダを右クリック → [Google] → [Deploy to App Engine] で行います。Google のサインイン画面が出たら Google アカウント情報を入力します。後は画面の指示に従って操作すればデプロイが始まります。

動作確認

http://(アプリケーション ID).appspot.com/ にアクセスしてみてください。以下のような画面が出てくれば正しく動作しています。