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 の作成
フレームワークを使わずに普通に Servlet と JSP でアプリケーションを作ってみましょう
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/ にアクセスして動作していることを確認してみてください。