トップ 一覧 ping 検索 ヘルプ RSS ログイン

Struts2 単純なアプリケーションの作成 Hello Worldの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!!!Struts2 単純なアプリケーションの作成 Hello World
[Struts2][XWork2]
{{include_html import_keyword_html, "!struts2"}}

http://struts.apache.org/2.x/docs/hello-world.html

HTMLをフレームワークから送信したとき、入力は他のサーバーページに送信されるのではなく、あなたが提供したJavaクラスに送られます。これらのクラスはActionと呼ばれます。Actionの実行後、Resultが、レスポンスに書き出すリソースを選び出します。リソースは、通常はサーバーページですが、PDFファイルや、Excel、Javaアプレットのウィンドウを選択することもできます。

単純なウェルカムメッセージを表示する"Hello World"を作成するならば、空の["tutorial"Webアプリケーション|http://struts.apache.org/2.x/docs/ready-set-go.html]を"Hello World"として作成し、以下の作業を行います。
+メッセージを表示するサーバーページを作成
+メッセージを生成するActionクラスを作成
+アクションとページをマッピングする

 これらの作成されたコンポーネント、ワークフローを良く知られた3つの関係、
 View、Model、Controllerに分割します。関係を分割することにより、
 アプリケーションが複雑になった場合でも、管理が容易になります。

!コード

::最初に、メッセージを表示するサーバーページ HelloWorld.jsp が必要です。

'''HelloWorld.jsp'''
 <%@ taglib prefix="s" uri="/struts-tags" %>
 
 <html>
     <head>
         <title>Hello World!</title>
     </head>
     <body>
         <h2><s:property value="message" /></h2>
     </body>
 </html>

::次に、メッセージを生成するActionクラスが必要です。

'''HelloWorld.java'''
 package tutorial;
 import com.opensymphony.xwork2.ActionSupport;
 public class HelloWorld extends ActionSupport {
 
     public static final String MESSAGE = "Struts is up and running ...";
 
     public String execute() throws Exception {
         setMessage(MESSAGE);
         return SUCCESS;
     }
 
     private String message;
 
     public void setMessage(String message){
         this.message = message;
     }
 
     public String getMessage() {
         return message;
     }
 }

::3番目に、それぞれを結びつけるマッピングを行います。

struts.xmlを編集し、HelloWorldマッピングを追加します。

'''struts.xml'''
 <!DOCTYPE struts PUBLIC
     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
     "http://struts.apache.org/dtds/struts-2.0.dtd">
 <struts>
     <package name="tutorial" extends="struts-default">
         <action name="HelloWorld" class="tutorial.HelloWorld">
             <result>/HelloWorld.jsp</result>
         </action>
         <!-- Add your actions here -->
     </package>
 </struts>

実行してみましょう。アプリケーションをデプロイし、http://localhost:8080/tutorial/HelloWorld.action を開いて何が起こるか確かめてください。ページタイトルが、"Hello World!"となり、メッセージ "Struts is up and runnnig!"となることを確認できるでしょう。

!どのようにコードが動くのか

ブラウザはウェブサーバに URL http://localhost:8080/tutorial/HelloWorld.action. リクエストを送信します。

+コンテナは、ウェブサーバからHelloWorld.actionへのリクエストを受け取ります。web.xml から読込まれた設定に従い、コンテナは*.actionを含む全てのリクエストは、org.apache.struts2.dispatcher.FilterDispatcherにルーティングすることを知ります。FilterDispatcherは、フレームワークのエントリポイントです。
+フレームワークは、"HelloWorld"という名前のアクションマッピングを探し、一致するクラス"HelloWorld"を見つけます。フレームワークは、このActionをインスタンス化し、execute()メソッドを呼び出します。
+execute()メソッドはメッセージをセットし、SUCCESSを返します。フレームワークは、アクションマッピングをチェックし、SUCCESSが返されたときどのページをロードするのか理解します。フレームワークは、コンテナに、リクエストのレスポンスとして、HelloWorkd.jspを返すように伝えます。
+HelloWorld.jspが、ページとして処理されると、<s:property value="message" />タグは、HelloWorld アクションの getMessage ゲッターを呼び出し、メッセージの値をレスポンスにマージします。
+純粋なHTMLレスポンスがブラウザに返されます。

[詳細な情報|http://struts.apache.org/2.x/docs/big-picture.html]

!Actionのテスト
アクションをテストするのは簡単です。

'''HelloWorldTest.java'''

 package tutorial;
 import junit.framework.TestCase;
 import com.opensymphony.xwork2.Action;
 import com.opensymphony.xwork2.ActionSupport;
 
 public class HelloWorldTest extends TestCase {
   public void testHelloWorld() throws Exception {
 
     HelloWorld hello_world = new HelloWorld();
     String result = hello_world.execute();
 
     assertTrue("Expected a success result!",
       ActionSupport.SUCCESS.equals(result));
 
     assertTrue("Expected the default message!",
       HelloWorld.MESSAGE.equals(hello_world.getMessage()));
 
     }
 }
 

!覚えておくこと

フレームワークはHTMLフォームや他のリクエスト処理に、Actionクラスを使用する。アクションクラスは SUCCESS、ERROR、INPUT等、struts.xml から読込まれるマッピングされた結果名を返し、結果名は多くの場合上記例のように他ページや、他のアクションや、他のリソース(画像、PDF)を選択する。

サーバーページが描画されるとき、多くの場合、アクションから提供された動的データも取り込まれる。動的データの表示を簡単にするために、フレームワークは、HTMLのように利用できるタグのセットを提供する。

{{include_html banner_html, "!Struts"}}
{{include_html import_keyword_html, "!javascript"}}