ラベル App Engine の投稿を表示しています。 すべての投稿を表示
ラベル App Engine の投稿を表示しています。 すべての投稿を表示

2012年9月23日日曜日

Slim3 の設定

こんにちは, Google App Engine で本格的にアプリを作ろうと思い, 以前から買って放置していたSlim3 の開発環境を設定してみました。

環境
OS:  Windows 7 64bit
Java 64bit
Eclipse 4.2
Slim3 1.0.15

※ Slim3 本家はこちら
日本語非公式は こちら

手順
1.   Google App Engine のインストール
(※ 1は割愛します)

2.   Slim3 Plugin for Eclipse のインストール

3.   Slim3 プロジェクトの作成

4.   Controller と view の作成

5.   テスト


1は 筆者の他のブログ でお願いします(ちょと古いです)

2.  Slim3 Plugin for Eclipse のインストール

Eclipse 用のプラグインを入手します。
Eclipse で "Help" -> "Install New Software" で

http://slim3.googlecode.com/svn/updates/ を入力します



Slim3が登場するので, チェックしてインストールします

3.   Slim3 プロジェクトの作成

通常のJava プロジェクトを作成するのと同様に, Eclipse 上でプロジェクトを作成ます。

Slim3 の下に, "Slim3 Project" というのがあるので, それを選択します。

Project name:   RootPackage:  などは, 適当に入れてください。 これをもとに自動的に web.xml を作成してくれるようです。

さて, その下に 3つの選択があります。

"Use MVC of Slim3"
"Use MVC of Slim3 with Scenic3"
"Use Google Web Toolkit"

です。とりあえず一番上の(デフォルト)で充分です。


4.   Controller と view の作成

さてプロジェクトを作成しましたが, この状態ではまったく動作しません。

コントローラとビューを追加しましょう。

便利なことに, Ant がこれをやってくれるそうです。 プロジェクト作成時に自動生成される build.xml

を見てみましょう。

ここに, <target name="gen-controller">

というのがあります。このタスクを実行して, コントローラを作成します。
このターゲットの部分を 選択して, "右クリック" -> "Run As" -> "Ant"

を実行すると, プロンプトが出現します。



コントローラ名を入れます。 /test/ のように, ルートからの位置をきっちり書きます。

ルートコントローラを作成する場合は, /  を入力すればO.K.です。

これで自動的に

IndexController.java
IndexControllerTest.java

そして, /war/WEB-INF/index.jsp が作成されました。

5.   テスト

早速実行してみましょう。

"Run" -> "Debug As" -> "Web Application"(gマーク) で実行です。

今回は, root で作成したので,  http://localhost:8888 でアクセスできます。
 Hello Index !!!  というのが, 見えれば成功です。


2012年1月21日土曜日

Google App Engine(Struts2 との連携)

Google App Engine で, Struts2を利用する方法についてです。
調べましたところ, 以下の2つの記事が秀逸です。参考にさせていただきました。


http://knowledge.sorich.jp/?Google%20App%20Engine%2FStruts2%E3%81%AE%E9%80%A3%E6%90%BA

http://whyjava.wordpress.com/2009/08/30/creating-struts2-application-on-google-app-engine-gae/

●環境
-  Windows 7
-  Eclipse 3.7
-  Google App Engine
-  Struts2(2.3.1.1)

●手順
1.  Struts2のlib の準備
2.  web.xml の記述
3.  実際のプログラムを書く
4.  struts.xml の設定

今回のフォルダ構成です(一部省略)
Struts2AppEngine (プロジェクト名)
| - war
      | - WEB-INF
                | -  lib  :  ここにstruts2の必要な.jar を入れる
                | - classes   :   ここにclassや, struts.xml を入れる
ソースファイル
HelloAction.java
OgnlListener.java

※重要なのは, struts.xml を classes のところにいれることくらいです

1.  Struts2のlib の準備
以下のlib を /war/WEB-INF/lib 以下に加え,
Build Pathに追加する

commons-fileupload-1.2.2.jar
commons-io-2.0.1.jar
commons-lang-2.5.jar
commons-logging-1.1.1.jar
freemarker-2.3.18.jar
javassist-3.11.0.GA.jar
ognl-3.0.3.jar
struts2-core-2.3.1.1.jar
struts2-dojo-plugin-2.3.1.1.jar
xwork-core-2.3.1.1jar

2. 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">

   <filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
   </filter>
   
   <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
   </filter-mapping>


   <listener>
<listener-class>com.appspot.struts2.listener.OgnlListener</listener-class>
   </listener>
</web-app>


上の方に書いてあるのが, struts2用の設定です。
さて重要なので, 下のやつ, OgnlListner という  リスナを追加しています。リスナの説明は後程

3.  実際のプログラム


ex) Action クラス
package com.appspot.struts2.action;

import com.opensymphony.xwork2.ActionSupport;

public class HelloAction extends ActionSupport
{
private static String HELLO = "hello";

public String execute()
{
return HELLO;
}
}


Struts2のAction です。  ActionSupport を拡張して, ただ単に, hello というresult に返すだけです。

ex)  リスナ

package com.appspot.struts2.listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import ognl.OgnlRuntime;

public class OgnlListener implements ServletContextListener
{

@Override
public void contextDestroyed(ServletContextEvent arg0)
{

}

@Override
public void contextInitialized(ServletContextEvent arg0)
{
OgnlRuntime.setSecurityManager(null);
}

}

このリスナは, セキュリティマネジャーをOFFにする設定を書いています。
サーブレットが立ち上がる時に, このセキュリティマネジャーをOFFにする必要が
あります。App Engine ではこれが必要になります。

ex)  結果表示用

<%@ page contentType="text/html; charset=UTF-8" %>
<html>
<head><title>Hello</title></head>
<body>
<h1>Hello!</h1>
</body>
</html>

4.  struts.xml  の


<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<!-- START SNIPPET: xworkSample -->
<struts>

<package name="default" extends="struts-default">
<action name="hello"
           class="com.appspot.struts2.action.HelloAction">
            <result name="hello">/WEB-INF/success.jsp</result>
        </action>
</package>
</struts>

とくに普通のstrurts2の設定と変わりません。


これで設定は終了です。
このアプリケーションを立ち上げて

http://localhost:8888/hello   にアクセスすると, Hello! というタイトルが出ます。

特殊な部分は, リスナを使って, セキュリティマネジャーをOFFにするという操作が必要なだけですね。

2012年1月15日日曜日

Google App Engine(画像 その2 Blobstore)

・BlobStoreの利用
・admin ツールで動作チェック
・Blobデータのupload(JSPサイド)
・Blobデータの保存(Servlet)
・Blobデータの表示(Servlet)
・Blobデータの加工(Servlet)
・Blobの削除

※プログラムは動作チェックはしていますが, 細かい設定などは載せていません。

●BlobStoreの利用
- 1MBを超えるバイナリデータは, 通常の データストア Blob 型に保存しようとすると, エラーが出る
com.google.apphosting.api.ApiProxy$RequestTooLargeException
- 2GBまでの, データなら BlobStoreを利用する
- BlobStoreには, key, value のみになる
- BlobStore保存データの表示は, BlobstoreService.serve() を利用する

●admin ツールで動作チェック
BlobStoreに保存したデータは, 以下のようにチェックします
http://localhost/_ah/admin にアクセス
DataStoreViewer の __BlobInfo__ で参照, 削除ができます。



●Blobデータのupload(JSPサイド)
このプログラムは, 公式サイトでも載っています。
ex) JSP
<%@page language="java" contentType="text/html charset=UTF-8" pageEncoding="UTF-8"%>
<%@page import="com.google.apengine.api.blobstore.*" %>
<% BlobstoreService blobStoreService = BlobstoreServiceFactory.getBlobstoreService(); %>
<html>
<head>
</head>
<body>
    <form action="<%= blobstoreService.createUploadUrl("/upload") %>" method="post" enctype="multipart/form-data">
        <input type="file" name="myFile">
        <input type="submit" value="Submit">
    </form>
</body>
</html>

※ BlobstoreService を利用します   /upload のところは action の mapping です
type = "file"  name="myFile"    name属性は必要です, サーブレット側で利用します

●Blobデータの保存(Servlet)

public class Upload extends HttpServlet
{
private BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();

public void doPost(HttpServletRequest req, HttpServletResponse resp )
{
Map<String, BlobKey>  blobs = blobstoreService.getUploadedBlobs(req);
BlobKey blobKey = blobs.get("myFile");   // type="file"の name
if ( blobKey == null )
{
// 失敗
resp.sendRedirect("/");
}
else
{
// 表示には, 別のサーブレットが必要
res.sendRedirect("/serve?blob-key=" + blobKey.getkeyString());
}
}
}

※ Map データですね。 これで, 保存完了です。 実際には, BlobKey の キーを, datastoreに保存
しておくと, 後で これをもとに, BlobKeyを取得できます。

●Blobデータの表示(Servlet)
ここが問題, どうやら, 加工して好き放題表示を作ることができない模様(まだ試していませんが)
先ほどのキーをもとに,  BlobKey クラスのインスタンスを取り出し, BlobstoreService .serve() を使って表示をつくります。

public class Serve extends HttpServlet
{
private BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();

public void doGet( HttpServletRequest req, HttpServletResponse resp )
{
BlobKey blobKey = new BlobKey(req.getParameter("blob-key"));
blobstoreService.serve(blobKey, resp);
}
}
※これでサーブレットの出力となります。画像であれば, ただのシンプルな表示, 動画であれば動画再生用の表示になるはずです。

●Blobデータの加工(Servlet)
BlobKey bKey = new BlobKey("キー");
ImagesService service = ImagesServiceFactory.getImagesService();
Transform trans = ImagesServiceFactory.makeResize(100,150);
Image newImage = service.applyTransform(trans, ImagesServiceFactory.makeImageFromBlob(bKey));

※リサイズは, 縦横比を維持するので幅高さどちらかに合うことになります
※たとえ, BlobStoreのデータが, 1MBをこえていてもこれならImage を取り出せます

●Blob データの削除
キーを使って, BlobKeyのインスタンスをつくり, それをもとに, serviceのdeleteで削除
BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
BlobKey blobKey = blobs.get("file1");   // file1 とは, blobキーのこと(こんな単純なデータではない)
blobstoreService.delete(blobKey);



2012年1月14日土曜日

Google App Engine(画像 その1)

Google App Engine の画像に関するメモ

・ImagesService API で加工できる
API
・入力フォーマット, JPEG, PNG, GIF, BMP, TIFF, ICO

・出力フォーマット, JPEG, PNG

・静的リソースの画像をロードして, 加工して, 出力できる

・Image Service API の出力は, 1MB以内

・1MB以上の画像を,  永続化 もしくは 加工すると

com.google.apphosting.api.ApiProxy$RequestTooLargeException: The request to API call datastore_v3.Put() was too large.
Exception になる

・1MB以内であれば, Blob データ
@Persistent private Blob imageblob;   
というようなBlob にデータを保存できる

・画像のupload には, commons-fileupload を使うと便利(1.2.2)
(※Ajax なら, dwr がいいのでは)

・1MBをこえる画像は, BlobStoreという, 2BGまで保存できる機能を利用するとよい

・BlobStoreへの保存は, BlobstoreService を使います。プログラムは特殊です。
サンプルを有効活用すべし。

・BlobStoreのデータは, 文字列のキーを使って取り出せる
(※このキーも永続化して別で保存しておけば, 自在に取り出せる)

・BlobStoreに保存したデータをキーを使ってロードして, ImageServiceに渡すことができる
この場合, 1MBの制限をこえられる? 加工して, 縮小することができました。
警告: No image reader found for format "ico". An ImageIO plugin must be installed to use this format with the DevAppServer.

※Warning がでました。


・BlobStoreのデータをそのまま表示するにも特殊な書き方が必要



具体的なプログラムは次回以降のblogでメモしておこうと思います。
Google App Engineの概要説明
"Google App Engine for Java 実践クラウド・プログラミング"
などを参考とさせていただきました。

2012年1月8日日曜日

Google App Engine(JSONIC活用)

JSONIC  :   Java 用のJSONエンコーダー/デコーダーライブラリ

POJOをjson形式にしてくれたり逆に, jsonをPOJOにしてくれるライブラリです。
またJSPを使って, JavaScript 出力用に, XSS を防いでくれる出力を作ったりしてくれます。 

WebサービスAPIなんかもあるみたいです。詳しくは JSONIC  です。ダウンロードもここからできます。( 2012/01/08 現在 1.2.8 )

JSONを何で使うかと言いますと, Ajax 通信などで, サーバーのレスポンスをJSONデータで返して,  それをJavaScript で処理するということをやったりします。
今回は, サーバサイド側をやります。

App Engine で外部ライブラリを使用するには,  /war/WEB-INF/lib に .jar を入れます。



そしてJava Build Path に追加します。

テスト用に簡単なサーブレットとデータクラスを用意します。
ex)  JSON を返すサーブレット

package com.atmarkplant.test;



@SuppressWarnings("serial")
public class JsonTestServlet extends HttpServlet 
{

     @Override
     protected void doGet(HttpServletRequest req, HttpServletResponse resp)
     throws ServletException, IOException 
     { 
           resp.setContentType("application/json; charset=UTF-8");
           BookShelf shelf = new BookShelf( 1, "First");
           JSON.encode(shelf, resp.getOutputStream());
     }
}



package com.atmarkplant.test.bean;

public class BookShelf 
{
     long id;
     String name;
     Date lastmodified;
     
     public BookShelf( long id, String name )
     {
          this.id = id;
          this.name = name;
          this.lastmodified  = new Date();
     }

     public long getId() 
     {
          return id;
     }

     public void setId(long id) 
     {
          this.id = id;
     }

     public String getName() 
     {
          return name;
     }

     public void setName(String name) 
     {
          this.name = name;
     }

     public Date getLastmodified() 
     {
          return lastmodified;
     }

     public void setLastmodified(Date lastmodified) 
     {
          this.lastmodified = lastmodified;
     }
}


Bean クラスには, 少なくとも getterを用意しましょう。

JSONICライブラリの使い方は簡単です。
JSON →  POJO    JSON.decode("文字列", クラス.class); 
POJO  → JSON    JSON.encode(クラスインスタンス);

Format JSONに変更するには
JSON.encode(クラスインスタンス, true);

とします  例外を受け取るときは  JSONException で受け取ります

これを web.xml で追加してテストしてみましょう。
ex) web.xml  にサーブレットを追加


<servlet>
<servlet-name>JSON</servlet-name>
<servlet-class>com.atmarkplant.test.JsonTestServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>JSON</servlet-name>
<url-pattern>/jsontest</url-pattern>
</servlet-mapping>

webブラウザでテスト  http://localhost:8888/jsontest  にアクセスしましょう。
Chromeでテストした結果が以下になります。


とブラウザ上にJSON形式になったBookShelf クラスのデータがでてきました。
Date型はlong値になったみたいです
次に, もう少し複雑なクラスをテストしてみます。

ex) サーブレット
package com.atmarkplant.test;


@SuppressWarnings("serial")
public class JsonTestServlet extends HttpServlet 
{
     @Override
     protected void doGet(HttpServletRequest req, HttpServletResponse resp)
     throws ServletException, IOException 
     {
          resp.setContentType("application/json; charset=UTF-8");
          Book book1 = new Book("App Engine 入門", "1");
          Book book2 = new Book("App Engine 応用", "2");
          List<Book> booklist = new ArrayList<Book>();
          booklist.add(book1);
          booklist.add(book2);
          BookShelf shelf = new BookShelf( 1, "First", booklist );
          JSON.encode(shelf, resp.getOutputStream());
     }
}

ex)  Bean

package com.atmarkplant.test.bean;


public class Book  
{
     String name;
     String isbn;
     public Book( String name, String isbn )
     {
          this.name = name;
          this.isbn = isbn;
     }

     public String getName() 
     {
           return name;
     }

     public void setName(String name) 
     {
          this.name = name;
     }

     public String getIsbn() 
     {
          return isbn;
     }

     public void setIsbn(String isbn) 
     {
          this.isbn = isbn;
     }
}


public class BookShelf 
{
     long id;
     String name;
     Date lastmodified;
     List<Book> books =new ArrayList<Book>();

     public BookShelf( long id, String name, List<Book> booklist )
     {
           this.id = id;
           this.name = name;
           this.books = booklist;
           this.lastmodified  = new Date();
     }

     public long getId() 
     {
           return id;
     }

     public void setId(long id) 
     {
           this.id = id;
     }

     public String getName() 
     {
          return name;
     }

     public void setName(String name) 
     {
          this.name = name;
     }

     public Date getLastmodified() 
     {
          return lastmodified;
     }

     public void setLastmodified(Date lastmodified) 
     {
          this.lastmodified = lastmodified;
     }

     public List<Book> getBooks() 
     {
          return books;
     }

     public void setBooks(List<Book> books) 
     {  
          this.books = books;
     }
}



今度はListを内包したものです。これで確認してみましょう。
こちらも表示されました。[]   をネストして入っているようです。

型の変換表は, JSONICのWebページで公開されています。



































Google App Engine(フォルダ構成)

こんにちは, Google App Engine の学習を順次進めているところです。
やはり, 通常のServlet をつくることとほぼかわらないですが, フォルダが少し違うので, どういう構成にすればよいのかメモを残しておきます。

・フォルダ構成の例

プロジェクトフォルダ
| - src         :  ソースファイル
|- war          :  プロジェクトのmainフォルダ
|   |- css      :  スタイルシート(自分でつくる)
|   |- img      :  image用(自分でつくる)
|   |- js       :  javascript用(自分でつくる)
|   |- index.jsp  :  最初のアクセス用
|   |- WEB-INF  :  サーブレットのWEB-INF
| |- lib  :  App Engine で利用するライブラリ(jar)
|       |- appengine-web.xml : App Engine の設定ファイル
|       |- logging.properties : ログレベルの設定ファイル
|       |- web.xml   :   サーブレットの設定ファイル
|       |- jspファイル  : View用のjspファイル(自分でつくる)
|
|- META-INF
|   | - jdconfig.xml   : JDOの設定ファイル
|
|- log4j.properties  : Logの設定

※ この構成が正しいわけではありません。

通常のTomcat プロジェクト(Servlet)と比べると,  war というフォルダが間に入っています。
これは, プロジェクト作成時にデフォルトです。

war 直下は, URLを入れると, たとえば, http://localhost:8888/css/test.css というように, アクセスできます。
ページは, 最初にアクセスしてきた場合のみ,  index.jsp にアクセス(web.xml の welcome で設定しておく) させておき, 残りは,  直接アクセスできない,

index.jsp は, /index という, servlet もしくは, Action へのリダイレクトを設定し, 何もできないようにしましょう。


ex) index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<% response.sendRedirect("/index"); %>

※/index という処理をおこなうためのリダイレクトをするだけ

web.xml のウェルカムファイルの設定とともに利用する
ex) web.xml
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>


/index では, 何かしらの処理をして, /WEB-INF/ 以下のjsp にforward するプログラムを書けばよいと思います。

CSSファイル, JavaScript ファイル, リソース周り(画像など) は, 特に直接アクセスされても問題ない場合は, /WEB-INF 以下でよいと思います。

App Engine 以外のライブラリ(.jar)を利用する場合は,  /WEB-INF/lib に入れて, Java の Build Path に追加します。







2012年1月4日水曜日

Google App Engine(エラーページの設定メモ)

Webページにアクセスする際, サーバー側に何かしらのエラーが発生した場合や, ページを作成しないところに, URLをブラウザにダイレクトでアクセスした場合, ユーザにエラーページが表示されてしまいます。

StackTraceや Not Found が表示されるのも困るので,  なんとかしましょう。

1. web.xml の変更(<error-page>の追記)
2. エラーページの作成

Google App Engine のプログラムで行う手順は, 2つです。通常のサーブレットのプログラムを作成するのと同様に, Project\war\WEB-INF\web.xml にerrorpage の設定を追記します。

1. web.xml の変更
以下を追加します。


<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/error.html</location>
</error-page>

<error-page>
<error-code>404</error-code>
<location>/error.html</location>
</error-page>

これで, Exception が発生した場合と, 404 Not Found が発生すると, /error.html のwebページに飛びます
RuntimeException (たとえば NullPointerExceptionなど)はふさいでいないです。 これをふさぐべきかはちょっと考えどころですね。

2.  エラーページの作成
ex) error.html


<html>
<head>
<title>Error</title>
</head>
<body>
<div>
<p>エラーが発生しました</p>
<p><a href="/index">トップに戻る</a></p>
</div>
</body>
</html>

※トップに帰るリンクを貼るとか, ログイン画面へのリンクを貼るくらいがよいかと。





Google App Engine(スタート)

こんにちは。最近Google App Engine でアプリを作って公開したいと思い立ちまして, 勉強しています。「作ればわかるGoogle App Engine プログラミング」を読んでいるところです。
このブログはメモ用です。

まだ半分くらいしか読んでいませんが, 本自体は非常に良くできていて, App Engine でのアプリの作り方がわかりやすく解説してあります。 Servlet の解説や, Webアプリの解説などもあって, Webアプリ制作で暗黙的に使っていたこともきっちり書いてあったりしました。

Big Table  の詳しい解説はありませんが, とっかかりとしては良いと思います( 個人的な感想)

環境
Mac OS X Lion
Eclipse 3.7  (App Engine 1.6.1)

• まずは Hello World !  (   Java 環境設定 )
1.  Java のインストール
2.  Eclipse のインストール
3.  App Engine Accountの登録
4. Google Plugin for Eclipse の インストール
5.  App Engine プロジェクトの作成
6.  コードの変更など
7.  動作確認

1,2 は省略します。いろいろなところで解説されているはずです。

3.  App Engine Accountの登録
こちらもどこかのWebサイトで公開されていると思います。Google アカウントでGoogle App Engine の登録のところにアクセスすれば, その後の指示があるはずです。

※ここでGoogle App Engine SDKのインストールは必要ありません。必要なSDKは, Eclipse プラグインのインストール時に一緒に入ります。

4.  Google Plugin for Eclipse のインストール
Elipse の  "Help" → "Install New Software ..."

http://dl.google.com/eclipse/plugin/3.7
を登録します。( 3.7 は eclipse のバージョン )
※ Eclipse のバージョンでアクセスサイトが違うようです。3.6なら最後の部分が
3.6になります


すべてのチェックをいれます。 ただし, Google App Engine Tools for Android
は requires ADT とあるように, Android SDKが入っていないといけないようです。
(筆者は入っていなかったのでエラーが出たので, はずしました)

これで Next を押してインストールすると環境は完成です。(Eclipse  は再起動されます)

5.  App Engine プロジェクトの作成

App Engine 用のプロジェクトの作成は, Eclipse のメニュー上にある g ボタンからおこないます  一番上の  New Web Appliation Project ... をクリックして, 新規プロジェクトの作成になります。



Project name :  プロジェクト名
Package      :  パッケージ名(デフォルトサーブレットがここに作られます)

com.appspot.アプリケーション名   がよいかもしれません
※パッケージの名前は特に関係ないと思います。

Google SDKs
Web Toolkit  は,  チェック不要です。(どうやってGoogle Web Toolkitと連携させるかちょっとわかっていないので, はずしています)
App Engine の方はチェックが必要です。


Sample Code
特に必要ないです

これで作成完了です。  コードの作成に移りましょう。

6.  コードの変更など
プロジェクトを作成した時点でサンプルサーブレットが勝手にできているようです。

src の デフォルトパッケージ(さっき登録したところ)  に
プロジェクト名Servlet.java  
というのがあります(プロジェクト名の先頭が大文字なっています)


中身はこんな感じです。@SuppressWarnings("serial")
public class WwwwgameServlet extends HttpServlet {
   public void doGet(HttpServletRequest req, HttpServletResponse resp)
   throws IOException {
      resp.setContentType("text/plain");
      resp.getWriter().println("Hello, world");
   }
}


Hello World を出力するのみです。


web.xml を見てみましょう。
war\WEB-INF\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>プロジェクト名</servlet-name>
<servlet-class>パッケージ名.プロジェクト名Servlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>プロジェクト名</servlet-name>
<url-pattern>/プロジェクト名(先頭小文字)</url-pattern>
</servlet-mapping>

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


</web-app>


デフォルトではこんな感じになっています。
index.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!-- The HTML 4.01 Transitional DOCTYPE declaration-->
<!-- above set at the top of the file will set     -->
<!-- the browser's rendering engine into           -->
<!-- "Quirks Mode". Replacing this declaration     -->
<!-- with a "Standards Mode" doctype is supported, -->
<!-- but may lead to some differences in layout.   -->

<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <title>Hello App Engine</title>
  </head>

  <body>
    <h1>Hello App Engine!</h1>
    <table>
      <tr>
        <td colspan="2" style="font-weight:bold;">Available Servlets:</td>        
      </tr>
      <tr>
        <td><a href="プロジェクト名(先頭小文字)">プロジェクト名</a></td>
      </tr>
    </table>
  </body>
</html>



となっており, アクセスすると, Hello App Engine が表示され,  デフォルトサーブレットへの
アクセスのリンクがはってあります。


7.  動作確認
Eclipse 上で Debug を行います。
Run → Debug As → Web Application(googleマーク) でできます。
パラメータは設定してくれます

ブラウザを開いて  http://localhost:8888  にアクセスしましょう


こんな感じのページが表示されればO.K.です。