Upload page content

You can upload content for the page named below. If you change the page name, you can also upload content for another page. If the page name is empty, we derive the page name from the file name.

File to load page content from
Page name
Comment

Locked History Actions

GWT/Outline

GWTの概要

※以下は現在の私の理解を元にしているものであり、正当性は保証できません。

GWT(Google Web Toolkit)はその名の通り、Googleがリリースするウェブアプリケーション作成のためのツールである。 特にEclipseに限定しているわけではなく、コマンドラインツールとしても使用できるのだが、ここではEclipseを前提とした開発環境を見てみる。

目的と特徴

主には、クライアントとしてAjaxウェブアプリケーションと、そのサーバサイドの両方を開発することを目的とする。 クライアントサイドのAjaxアプリは当然、htmlとjavascriptによるものである。特徴的な事柄としては以下。

Javaからjavascriptへの変換

  • (ライブラリの中身に立ち入らない限り)javascriptは一切記述する必要が無い、すべてをJavaで記述することができ、Javaコードはjavascriptコードに変換される。つまり、Java+htmlで記述したクライアントコードがデプロイ時にはjavascript+htmlとなる。
  • 開発環境においては、Javaとしてデバッグを行うことができる。ステップ実行さえも可能。

GWT Deisgner

  • Javaのウィジェットとして標準的なのものが用意されており(当然これらもjavascriptに変換される)、それらのレイアウトを行うためのGUIビルダが付属している。
  • 上記のウィジェットが不足であれば、サードパーティ製のウィジェット(SmartGWT,GXT等)を使うことができる。

RPC

  • クライアントサイドとサーバサイドのRPC(Ajax通信)は独自の方式がサポートされている。これもソース上はJavaからJavaへの呼び出しであるため、異言語間のインターフェース変換を考慮する必要がない。シリアライザーションはJava標準の形式で記述できる模様。
  • ただし、このRPCは必ず非同期で行われる。つまり、サーバサイドをコールしてその応答を待つことはできない(おそらくこれは単一スレッドしか使用できないjavascriptの制約によると思われる)。

サーバサイドとデプロイ

  • サーバサイドは通常のサーブレットコンテナ向けのものと、App Engineのものとに対応している。
  • App Engine用のデプロイはEclipseから簡単にできる模様。
  • サーブレットコンテナのデプロイ用のwarファイルの作成も(Eclipseからは若干面倒だが)可能。

htmlの数

妙な表題だが、この環境では基本的にhtmlファイルはただ一つであることを前提にしており、htmlページ間を遷移することは想定していない(サードパーティ製のライブラリではそれができるものもある)。複数の「ページ」が必要であるなら、それらをJava製のウィジェットとして作成し、一つのhtml上で紙芝居のように切り替える必要がある。

表示上の制限

GWTは、Java上のウィジェットに例えると、Swingではなく、むしろSWTの概念に近い。

Swingでは、表示されるすべてについてOSの機能を使わずに、「描画」を行っていた。例えば、ボタンの浮き出し形状などもSwingによる「描画」でしかない。これに対してSWTは「OSが用意するウィジェット」のラッパであるので、例えばボタンの形状についてOSの提供する形状以外の独自の形状を「描画」することはできない。

GWTはこれに似ている。GWTによるウィジェットはjavascriptコードに変換され、最終的にはjavascriptによるブラウザへの命令となり、それによってHTML要素やCSSの操作を行うため、(基本的には)ブラウザの用意する機能以上のものを実現することはできない(できなくもないだろうが、遅くなると思われる)。

※javascript使いには普通のことらしいが、「ブラウザ上にロード済のHTMLやCSSを操作する」という概念になじみの無いものにはわかりにくいのだが、SWTのネイティブコンポーネントがHTML/CSSに置き換わったものと考えればよい。