忍者ブログ

軽Lab

 Javaを中心とした、プログラミング関係のナレッジベース

Home > > Google App Engine Javaプロジェクトの基本構造

Google App Engine Javaプロジェクトの基本構造

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

Home > > Google App Engine Javaプロジェクトの基本構造

- ランダム記事 -
- PR -

コメント

ただいまコメントを受けつけておりません。

Home > Google App Engine (Java) 入門 > Google App Engine Javaプロジェクトの基本構造

Google App Engine Javaプロジェクトの基本構造

前回はGoogle App Engine(GAE)のJavaプロジェクトの作成・公開をEclipse上で行うための環境構築方法について確認した。今回はEclipse上でGAEプロジェクトの基本構造を確認する。


■ GAE SDKバージョンと仕様書

 まずはGAEで利用する仕様書を確認する。GAE SDKのバージョンは新規プロジェクトを作成した際のJARライブラリのファイル名称(WEB-INF/lib/appengine-api-○○.jar(○○はバージョン番号))で確認できる。現時点(2015年11月)においる最新バージョンは1.9.25である。GAE SDK1.9.25では、Java・Servlet・JSPの対応バージョンと仕様書は以下のとおりである。

要素技術 SDKバージョン 仕様書
Google App Engine API  1.9 JavaDoc
Java 1.7 JavaDoc
Java Servlet 2.5 仕様書(英語)
JSP 2.0 / 2.1(*1) 2.1仕様書(英語)

■ GAEのJava環境について

 Google App Engineを動作させるJava環境には以下の二つがある。本講座では無料で利用可能なSandbox環境を利用する。

◇ Sandbox

 無料で利用できるJava環境。以下の制限がある。

  • ファイル書込はできない(読込は可)
  • リクエストへの返答は数秒以内に終わる必要がある
  • スレッド生成に制限あり
  • その他、いくつかの関数利用に制限がある。使える関数(ホワイトリスト)は*2参照

◇ Managed VM

 sandboxの制限をなくしたJava環境。現在(2015年11月)はベータ版として稼動中。利用するためには課金を有効にする必要がある(つまり有料)。


■ GAEアプリケーションの動作イメージ

  上記でも記述しているが、GAEではHTMLとServletとJSPを組み合わせてプロジェクトを作成できる。プロジェクトの動作イメージは以下のとおりである。GAEは基本的にTomcat等と同じwebコンテナであるが、DBがBig Tableに限定される(有料のGoogle Cloud Platformを利用すればRDBも利用可能)こと、Google認証等が含まれるGAE APIが利用可能であることが異なる。

  

  1. webブラウザはURLを指定して、ハイパーリンクによるページ遷移要求やボタン押下イベントの発生をGoogle App Engineに知らせる
  2. Google App Engineでは、web.xmlを見てURLに対応して呼び出すプログラム(ファイル)を発見する。呼び出されたプログラムはGoogle App Engine上でJavaコードを処理した後、webブラウザに結果画面を返す。このとき、Google App Engine上のプログラムはweb.xmlを見て、他のプログラムを起動すること(リダイレクト)も可能である
  3. ServletやJSP内のJava記述からはDBの利用が可能である

 GAEにおいてもStrutsやSpring、Slim3といったMVCフレームワークを利用することもできるが、本講座ではフレームワークを導入しない(本講座ではどのフレームワークでも利用可能なGAE APIの利用方法を確認する)。フレームワークの導入・利用については別記事で確認することとする。


■ GAEプロジェクトの基本構造(フォルダ構造)

 GAEプロジェクトの基本的なフォルダ構造を以下に示す。なおEclipse上で新規GAEプロジェクトを作成する方法については、前回の記事を参照のこと。HTML・JSPファイルはwarフォルダ以下に配置し、Servletクラスはsrc以下に配置する形になる。また、URLに対応する呼出HTML,JSP,Servletクラス名はweb.xmlに記述する。

 
フォルダ名 内容
src Servletで利用するJavaファイルを格納する
war web上に公開するファイルを格納する。
直下がルート・ディレクトリに相当する
war/WEB-INF ライブラリや設定ファイルを格納する。
web上からアクセスはできない

ファイル名 内容
WEB-INF/appengine-web.xml デプロイメント記述子。
アプリケーション全体の設定を記述する
WEB-INF/web.xml デプロイメント記述子。
URLに対応する呼出HTML,JSP,Servletクラス名を記述する


■ GAEサンプル・プログラム

 上記フォルダ構成でHTML,JSP,Servletを利用するサンプル・プログラムを以下に示す。

◇サンプル・コードと解説

appengine-web.xml
<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
  <application>karu-lab</application>
  <version>1</version>
  <threadsafe>true</threadsafe>
</appengine-web-app>
 アプリケーションの全体設定を記述している。applicationタグでGAEプロジェクトIDを、versionタグでアプリケーションのバージョンIDを指定する。threadsafeタグにtrueを指定するとマルチ・スレッド環境での動作モードに切り替え、サーバ応答速度の高速化が可能。ただし、作成したプロジェクトがスレッド・セーフである場合にのみtrueに設定できる。

web.xml
<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
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>TestGAE</servlet-name>
		<servlet-class>com.appspot.karu_lab.TestGAEServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>TestGAE</servlet-name>
		<url-pattern>/testgae</url-pattern>
	</servlet-mapping>
	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
	</welcome-file-list>
</web-app>
 URLと呼出ファイルの対応関係を記述している。servletタグとservlet-mappingタグは対になっており、あるservlet-nameに対してクラス・ファイルのパス(servlet-classタグ)と、対応するURL(url-patternタグ)を設定している。servletタグとservlet-mappingタグはサーブレットの数だけ記述する。welcome-fileタグではホーム・ページとして表示するHTMLもしくはJSPファイルを指定する。

index.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <title>Hello App Engine</title>
  </head>

  <body>
    hello world!(HTML)<br />
    <a href="./testgae">Servlet呼出</a><br />
    <a href="./test.jsp">JSP呼出</a>
  </body>
</html>
 ホーム・ページとなるHTMLファイル。ServletとJSPへのリンクを張っている。

TestGAEServlet
package com.appspot.karu_lab;

import java.io.IOException;

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

@SuppressWarnings("serial")
public class TestGAEServlet extends HttpServlet {
	public void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws IOException {
		resp.setContentType("text/plain");
		resp.getWriter().println("hello world!(Servlet)");
	}
}
 URL「/testdae」を呼び出した場合に起動するServletを記述したクラス・ファイル。HttpServlet::doGetGET関数には、GETリクエストで呼び出した場合のレスポンスを記述する。今回は単純なテキスト「hello world!(Servlet)」を返している。

Test.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
hello world!(JSP)
</body>
</html>
 URL「/test.jsp」を呼び出した場合に起動するJSPファイル。今回は単純なHTML文書でテキスト「hello world!(JSP)」を出力している。

◇ 実行結果

 Eclipse上(ローカル)でサンプル・プログラムを実行し、ブラウザから以下URLにアクセスした場合の実行結果を以下に示す。

http://localhost:8888


http://localhost:8888/testgae
 

http://localhost:8888/test.jsp
 

◇ その他

 Eclipseで新規GAEプロジェクトを作成した際に以下のファイルも自動生成される。それぞれのファイルの役割は以下のとおりであり、利用は任意である。

ファイル名 内容
src/logging.properties ロガー(org.apache.log4j.Loggerクラス)利用時の設定ファイル
src/META-INF/jdoconfig.xml Java Data Objects(JDO)利用時の設定ファイル
src/META-INF/persistence.xml Java Persistence API (JPA) 利用時の設定ファイル
war/WEB-INF/logging.properties ロガー(java.util.loggingクラス)利用時の設定ファイル

■ 参照

  1. Issue 1506: JSP spec. App Engine SDK supports is different between API JAR and implementation JAR
  2. GAE ドキュメント:The JRE Class White List

改訂履歴
・2016年4月11日 一部改訂。『GAEアプリケーションの動作イメージ』が分かりにくかったので記述修正
Home > Google App Engine (Java) 入門 > Google App Engine Javaプロジェクトの基本構造

- ランダム記事 -
- PR -

コメント

プロフィール

管理者:
 連絡はContactよりお願いします。

PR