2013年05月09日

Python と Java それぞれの Hello World

Google App Engine 比較シリーズ 2 回目は Hello World を実現するのに何を書けばいいか、というのを比較してみましょう。

フレームワークを特に導入せず、一番簡単な記述をするためには、 Python では SDK に同梱されている webapp2 を、 Java では単純に Servlet を使うことになります。 (注: Python ランタイムには細かく言うと Python 2.5 と Python 2.7 の二種類がありますが、ここでは Python 2.7 についてだけ述べます)

Python ではこうなります: Hello, World!

Java ではこうなります: Creating a Project

Python では Python スクリプトファイル一つと、設定ファイルとして app.yaml 一つでできあがります。 一方 Java はまず正しいディレクトリ構成を作った上で、java ソース一つと、設定ファイル二つ web.xml と appengine-web.xml とが必要になります。

プログラム

プログラムコードを見てみます。

Python では webapp2.RequestHandler を継承したクラスで、 get メソッドをオーバーライドします。 引き渡される情報は特にないので引数 self のみです。 self.response.headers 辞書にヘッダを設定し、 self.response.write メソッドでボディを書き出します。

Java では javax.servlet.http.HttpServlet を継承したクラスで doGet メソッドをオーバーライドします。 引数は常に必要で、HttpServletRequest reqHttpServletResponse resp です。 リクエストの情報は今回一切関知しません。 resp.setContentType メソッドでヘッダに Content-Type を設定します。 resp.getWriter().println メソッドでボディを書き出します。

このように、どちらも流れはほぼ同じです。

Python のファイルにはさらに WSGI の設定が含まれています。 これはスレッドセーフに実行させるためにハンドラーを WSGI アプリとして登録するものです。 定形処理とは言えちょっと面倒ですね。

設定ファイル

設定ファイルも見ておきましょう。

Python 側の app.yaml にある

application: your-app-id
version: 1

と Java 側の appengine-web.xml にある

<application></application>
<version>1</version>

が対応します(application には本当はアプリケーションIDを入れる必要があります)。

app.yaml には他に runtime や threadsafe などといった項目がありますが、 appengine-web.xml には対応する項目はありません。

app.yaml ではさらに URL とハンドラーの対応付けも記述しますが、これは Java では(Servlet 標準の) web.xml に記述します。

(実は Java でも yaml 設定ファイルを使うことができるようです。 Java App Configuration Using app.yaml)

ついでに書いてしまいますが、特定のバージョンを参照する URL が Python と Java ではなぜか異なっていることに注意が必要です。 Python の場合、バージョン 1 の URL は http://1.your-app-id.appspot.com/ ですが、 Java の場合、バージョン 1 の URL は http://1.latest.your-app-id.appspot.com/ です。

次回予告

次回は Datastore について比較します。

ラベル:GAE
posted by mft at 19:00| Comment(0) | TrackBack(0) | 技術文書 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。