1. appengine-web.xml
appengine-web.xmlを編集して、セッションを利用可能にします。appengine-web.xmlに以下の内容を追記します。
- <sessions-enabled>true</sessions-enabled>
2. web.xml
web.xmlの内容は以下の通りです。
- <!--xml version="1.0" encoding="utf-8"?-->
- <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <brbr=""> 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>wicket.yonko</filter-name>
- <filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
- <init-param>
- <param-name>applicationClassName</param-name>
- <param-value>net.masa.wicket.YonkoWicketApplication</param-value>
- </init-param>
- </filter>
- <filter-mapping>
- <filter-name>wicket.yonko</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- </web-app>
3. WicketApplication
次にWicketApplicationクラスを作成します。GAEでWicketを動作させる場合、以下のポイントがあります。
- WicketApplication#newSessionStore()でHttpSessionStoreを返すようにさせる
- WicketをDEPLOYMENTモードで動作させる
- リソースの更新チェックを停止させる
Wicketのデフォルト設定では、セッションオブジェクトをファイルに保存します。が、GAEではファイルの作成は制限されていますので、HttpSessionに保存するように設定します。
次にWicketのdevelopmentモードではThreadを生成してリソースの更新チェックを行いますが、GAEではThreadの生成を制限しているため、deploymentモードで動作させる必要があります。これにより、Threadの生成を停止できます。
上記のポイントを踏まえ、実際のソースは以下の通りとなります。
- /**
- * GAE/j用WicketApplicationクラスです。
- *
- * @author namiki
- *
- */
- public class YonkoWicketApplication extends WebApplication {
- /** リクエスト・レスポンスおよびHTMLのエンコードです。 */
- private static final String ENCODE = "UTF-8";
- /** HTMLテンプレートファイルのベースフォルダです。 */
- private static final String RESOURCE_FOLDER = "WEB-INF";
- /** HTMLテンプレートファイルの本来の階層から除去するパスです。 */
- private static final String PAGES_PATH = "net/masa/wicket";
- /**
- * コンストラクタです。
- */
- public YonkoWicketApplication() {
- }
- /*
- * (non-Javadoc)
- *
- * @see org.apache.wicket.Application#getHomePage()
- */
- @Override
- public Class<!-- extends Page--> getHomePage() {
- return HelloWicketPage.class;
- }
- /**
- * Wicketの動作モードを設定します。
- * WicketをGAE/jで動作させる場合、{@link org.apache.wicket.Application.DEPLOYMENT}
- * モードで動作する必要があります。
- *
- * @see org.apache.wicket.protocol.http.WebApplication#getConfigurationType()
- */
- @Override
- public String getConfigurationType() {
- return Application.DEPLOYMENT;
- }
- /**
- * 初期化処理です。
- *
- * @see org.apache.wicket.protocol.http.WebApplication#init()
- */
- @Override
- protected void init() {
- super.init();
- // リクエスト・レスポンスの文字コード設定
- getRequestCycleSettings().setResponseRequestEncoding(ENCODE);
- // HTMLテンプレートの文字コード設定
- getMarkupSettings().setDefaultMarkupEncoding(ENCODE);
- // リソースの更新チェックを停止
- getResourceSettings().setResourcePollFrequency(null);
- // テンプレートファイルの場所を指定
- getResourceSettings().addResourceFolder(RESOURCE_FOLDER);
- getResourceSettings().setResourceStreamLocator(
- new ResourceStreamLocator() {
- @SuppressWarnings("unchecked")
- @Override
- public IResourceStream locate(Class clazz, String path) {
- if (path.indexOf(PAGES_PATH, 0) != -1) {
- IResourceStream located = super.locate(clazz, path
- .substring(PAGES_PATH.length() + 1));
- if (located != null) {
- return located;
- }
- }
- return super.locate(clazz, path);
- }
- });
- }
- /**
- * セッションストアを生成します。
- * WicketをGAE/jで動作させる場合、セッション情報を{@link javax.servlet.http.HttpSession}
- * に格納する必要があります。
- */
- @Override
- protected ISessionStore newSessionStore() {
- return new HttpSessionStore(this);
- }
- }
上記init()内でHTMLテンプレートファイルの場所を指定しています。Wicketは通常の場合クラスファイルと同じ階層からHTMLテンプレートファイルを探しますが、RESOURCE_FOLDER(=WEB-INF)から探すように指定しています。また、PAGES_PATH(=net/masa/wicket/)は、パッケージ名から除去すべきパスを定義しています。よって、これらの設定からWicketはHTMLテンプレートファイルをWEB-INF/pagesから探すようになっています。
4. HelloWicketPage
次にWicketApplicationクラスが最初に呼び出すページを作成します。最初に呼び出すページはApplication#getHomePage()で定義しますが、上記の例ではHelloWicketPage.classを呼び出していますのでそのクラスを作成します。パッケージはnet.masa.wicket.pagesです。
- /**
- * 初回表示用画面クラスです。
- *
- * @author namiki
- *
- */
- public class HelloWicketPage extends WebPage {
- public HelloWicketPage(final PageParameters params) {
- add(new Label("messages", "Hello, wicket world!!"));
- }
- }
ここではHTMLに表示するメッセージを定義しています。
次にこのメッセージを表示するためのHTMLテンプレートファイルを作成します。
${project}\war\WEB-INF\pagesというディレクトリを作成し、その直下にHelloWicketPage.htmlを作成します。
- <span wicket:id="messages"></span>
これで準備が整いましたのでEclipseから起動して、http://localhost:8888にアクセスしてみると、画面にはHelloWicketPage.javaで定義したメッセージが表示されます。
これでGAE上でWicketを動作させることができました。今後はこれをベースにして色々な機能を追加していこうと思います。
0 件のコメント:
コメントを投稿