Google App Engine Struts 2の例
このチュートリアルでは、
Google App Engine
(GAE)環境で
Struts 2
Webアプリケーションを開発する方法を説明します。
使用されるツールと技術:
-
JDK 1.6
-
Eclipse用Eclipse 3.7 Google Plugin
-
Google App Engine Java SDK 1.6.3.1
-
Struts 2.3.1.2
1.新しいWebアプリケーションプロジェクト
Eclipseで、 “Struts2GoogleAppEngine”という名前の新しいWebアプリケーションプロジェクトを作成します。
Google Plugin for Eclipseは、GAEプロジェクト構造のサンプルを生成します。後で、この生成されたGAEプロジェクトにStruts2を統合する方法を説明します。
2. Struts 2ライブラリを統合する
以下のStruts 2依存ライブラリ、http://struts.apache.org/download.cgi[ここでStruts2をダウンロード]を入手してください。
-
asm-3.3.jar
-
asm-commons-3.3.jar
-
asm-tree-3.3.jar
-
commons-fileupload-1.2.2.jar
-
commons-io-2.0.1.jar
-
commons-lang-2.5.jar
-
freemarker-2.3.18.jar
-
javassist-3.11.0.GA.jar
-
ognl-3.0.4.jar
-
struts2-core-2.3.1.2.jar
-
xwork-core-2.3.1.2.jar
”
war/WEB-INF/lib
“フォルダにすべて入れてください。
「gae-struts2-example3-library」、width = 521、height = 645]
プロジェクトフォルダを右クリックし、 ”
Properties
” – > ”
Java Build Path
” – > ”
Libraries
“タブを選択し、 ”
Add Jars
“ボタンをクリックし、 ”
war/WEBビルドパスに「-INF/lib
」フォルダを作成します。
3. Struts 2コードの統合
3.1生成された `Struts2GoogleAppEngineServlet.java`を削除します。これは必要ありません。
3.2新しいStruts 2 Actionクラスを作成します。
File:src/com/mkyong/user/action/WelcomeUserAction.java
package com.mkyong.user.action; public class WelcomeUserAction { private String username; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String execute() { return "SUCCESS"; } }
3.3リスナー・クラスを作成し、ognl securityをnullに設定します。
-
Note ** + Struts 2は、このリスナーがGAE環境で動作するために必要です。これを読んでください –
GAEにStruts 2をデプロイする際の問題
とリンク://google-app-engine/strurts- 2-on-gae-error-result-null-not-found/[エラー:
結果 ‘null’が見つかりません]
File:src/com/mkyong/listener/Struts2ListenerOnGAE.java
package com.mkyong.listener; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.http.HttpSessionAttributeListener; import javax.servlet.http.HttpSessionBindingEvent; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; import ognl.OgnlRuntime; public class Struts2ListenerOnGAE implements ServletContextListener, HttpSessionListener, HttpSessionAttributeListener { public void contextInitialized(ServletContextEvent sce) { OgnlRuntime.setSecurityManager(null); } @Override public void contextDestroyed(ServletContextEvent arg0) { //TODO Auto-generated method stub } @Override public void sessionCreated(HttpSessionEvent arg0) { //TODO Auto-generated method stub } @Override public void sessionDestroyed(HttpSessionEvent arg0) { //TODO Auto-generated method stub } @Override public void attributeAdded(HttpSessionBindingEvent arg0) { //TODO Auto-generated method stub } @Override public void attributeRemoved(HttpSessionBindingEvent arg0) { //TODO Auto-generated method stub } @Override public void attributeReplaced(HttpSessionBindingEvent arg0) { //TODO Auto-generated method stub } }
3.4ローカルGAE環境でStruts2プロジェクトを実行するには、
TextBlock`クラスを作成して元の
TextBlok`クラスをオーバーロードする必要があります。そうしないと、 “ javax.swing.tree.TreeNodeは制限されたクラスです。 Struts2チームが今後これを修正できることを期待しています。
-
TextBlockソースコード** リンク://google-app-engine/javax-swing-tree-treenode-is-a-restricted-class/[ダウンロードTextBlockソースコード]
3.5プロジェクトのディレクトリ構造を見直します。
4. Struts 2ページの統合
4.1ユーザ入力を受け入れる `login.jsp`ページを作成します。
File:war/User/pages/login.jsp
<%@ page contentType="text/html; charset=UTF-8" %> <%@ taglib prefix="s" uri="/struts-tags" %> <html> <head></head> <body> <h1>GAE + Struts 2 Example</h1> <s:form action="Welcome"> <s:textfield name="username" label="Username"/> <s:password name="password" label="Password"/> <s:submit/> </s:form> </body> </html>
4.2 `welcome__user.jsp`ページを作成します。
File:war/User/pages/welcome
user.jsp__
<%@ page contentType="text/html; charset=UTF-8" %> <%@ taglib prefix="s" uri="/struts-tags" %> <html> <head></head> <body> <h1>GAE + Struts 2 Example</h1> <h2>Hello <s:property value="username"/></h2> </body> </html>
4.3プロジェクトのディレクトリ構造を再度確認します。
5. Struts XML設定
`struts.xml`ファイルを作成し、「
src/struts.xml
」に入れてください。
ファイル: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"> <struts> <package name="user" namespace="/User" extends="struts-default"> <action name="Login"> <result>pages/login.jsp</result> </action> <action name="Welcome" class="com.mkyong.user.action.WelcomeUserAction"> <result name="SUCCESS">pages/welcome__user.jsp</result> </action> </package> </struts>
6. web.xml
`web.xml`を更新し、Struts2を統合し、ognlセキュリティリスナを設定します。
File: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.mkyong.listener.Struts2ListenerOnGAE </listener-class> </listener> <welcome-file-list> <welcome-file>index.html</welcome-file> </welcome-file-list> </web-app>
7.ディレクトリ構造
最終的なディレクトリ構造を確認してください。
8.ローカルで実行する
完了、テストを実行する時間。プロジェクトを右クリックし、「
Web Application
」として実行します。
URL:http://localhost:8888/User/Login.action
「gae-struts2-example8-run-local」、width = 577 、高さ= 349]
9. GAEに展開する
`appengine-web.xml`を更新し、あなたのApp EngineアプリケーションIDを入れてください。
<?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <application>mkyong-struts2gae</application> <version>1</version> <!-- Configure java.util.logging --> <system-properties> <property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/> </system-properties> </appengine-web-app>
プロジェクトを選択し、Googleのアイコン「
App Engineへのデプロイ
」をクリックします。 Google Plugin for Eclipseは、すべての必要なファイルをGAEのプロダクションに自動的に配備します。
デプロイ時に、Eclipseコンソールビューに同様のメッセージが表示されます。
------------ Deploying frontend ------------ 展開の準備: ステージングディレクトリを 'C:¥Users¥mkyong¥AppData¥Local¥Temp¥appcfg7432687551.tmp'に作成しました.JSPファイルをスキャンしています。 jspファイルのコンパイル。 ローカルディスク上のファイルのスキャン。 更新の開始。 2つの静的ファイルのクローン作成。 46個のアプリケーションファイルのクローン作成。 展開: 12のファイルをアップロードしています。 3つのファイルをアップロードしました。 6件のファイルをアップロードしました。 9個のファイルをアップロードしました。 12のファイルをアップロードしました。 プリコンパイルの初期化中... 合計44KBの11個のファイルを含むバッチを送信しています。 合計1KBの1つのBLOBを含むバッチを送信しています。 新しいバージョンを導入する。 可用性の確認: 1秒後にもう一度チェックします。 2秒後にもう一度チェックします。 4秒後にもう一度チェックします。 更新の終了:新しいバージョンのサービスを開始する準備が整いました。 データストアの更新: インデックス定義のアップロード。 展開が正常に完了しました
注
最後に、この長い記事を完成させました。総合的な統合はあまりありません
Struts2 ognlセキュリティとTextBlockの問題を修正するだけで、
Struts2のチームが将来この問題を解決できることを願っています。
===ソースコードをダウンロードする
ファイルサイズが大きいため、Struts2のすべてのjarファイルは除外されています。
手動でダウンロードしてください。
ダウンロード –
Struts2GoogleAppEngine.zip
(23 KB)
===参考文献
。リンク://struts2/struts-2-hello-world-example/[Struts2 hello world
例]。
Google
App Engine + JavaのHello worldの例、Eclipseを使用
。
Apache Struts
。
Struts
2 on GAE
gae
struts2