Struts 1のチュートリアル 1
前述のように、本稿ではStruts 1とStruts 2の違いを示すために、Struts 1フレームワークとStruts 2フレームワークで同じアプリケーションを作成する場合に使用されるコードを比較します。したがって、Struts 1を一通り理解していることが前提です。作成するアプリケーションの名前は「defect-tracker」です。このアプリケーションでは、ユーザーがアプリケーションの不具合(defect)を記録し、開発者がその不具合の解決策を記録します。アプリケーション自体は、最も基本的な要件から成る単純なものですが、ほぼすべてのWebアプリケーションに共通する基本的な機能を十分に扱うことができます。
Struts 1アプリケーションを開始するにあたって、最初に必要なファイルは「web.xml」構成ファイルです。Struts 1用に「web.xml」ファイルを変更して、アプリケーションURI要求をStrutsコントローラにルーティングできるようにする必要があります。
<servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet </servlet-class> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param> <load-on-startup>2</load-on-startup> </servlet> <!--Map Struts-related request to action--> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>
Struts ActionServletは、パターン「*.do」に一致するURI要求を受け取ります。ActionServletは「struts-config.xml」構成ファイルの定義に従い、この要求にマップされているStruts Actionを検索します。ActionServletオブジェクトとActionオブジェクトは、StrutsアプリケーションのMVCアーキテクチャの「コントローラ」の部分に相当します。Struts Actionと「ビュー」(通常はJSPとして実装)との間でデータをやり取りするには、StrutsではActionFormオブジェクトを使用します。ActionFormオブジェクトは「モデル」に相当します。
ユーザーがフォームを送信すると、ActionFormとそのデータがActionのexecuteメソッドに渡されます。Actionはデータを検証し、必要なビジネスロジックを起動します(ビジネスロジックは、Strutsをまったく意識しない別の層にカプセル化しておくことが理想です)。ビジネスロジックが実行されると、Actionは、1つまたは複数のActionForwardオブジェクトで指定されているビューに制御を移します(これらのActionForwardオブジェクトも「struts-config.xml」で構成されています)。ActionForwardのエントリは、Actionの予想される結果を表します。これらは、Actionごとに定義することも、すべてのActionに適用されるように全体で定義することもできます。
「struts-config.xml」ファイルの一部を以下に示します。defect-trackerアプリケーションには、ActionとActionFormのセットが2つあります。1つ目は既存の不具合エントリのリストを扱うもので、2つ目は不具合データの操作(いわゆる「CRUD(Create-Update-Delete)」)を扱うものです。
struts-config.xml
<global-forwards> <forward name="list" path="/list.do"/> </global-forwards> <form-beans> <form-bean name="listForm" type="web.DefectsListForm" /> <form-bean name="actionForm" type="web.DefectsActionForm" /> </form-beans> <action-mappings> <action path="/list" name="listForm" scope="request" type="web.DefectsList" validate="false"> <forward name="list" path="/pages/defects.jsp" /> </action> <action path="/action" name="actionForm" scope="request" type="web.DefectsAction" parameter="method" validate="false"> <forward name="edit" path="/pages/editDefect.jsp" /> <forward name="add" path="/pages/addDefect.jsp" /> <forward name="list" path="/list.do" redirect="true" /> </action> </action-mappings>
「struts-config.xml」内の最後の2つのエントリでは、アプリケーションのメッセージとラベルを表示するプロパティファイルに加えて、アプリケーション内のActionFormオブジェクトの検証ルールを追加するために使用する別の構成ファイルを宣言しています。
defect-trackerアプリケーションには、Defectという1つのドメインオブジェクトがあり、これがシステムの不具合エントリを表します。起動時に、ユーザーは「list.do」にリダイレクトされます。このファイルは、不具合エントリのリストを取得するDefectsList Actionオブジェクトのexecuteメソッドにマップされています。
DefectsListのexecuteメソッド
public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { DefectsListForm defectsListForm = (DefectsListForm) form; //Get data from business layer and assign it to the form //object... //... return mapping.findForward("list"); }
executeメソッドはアプリケーションデータを取得し、ActionForm DefectsListingActionFormクラスのsetDefects()メソッドを使用して、そのデータをDefectインスタンスのコレクションに割り当てます。
DefectsListFormのDefectsプロパティ
private List defects; public List getDefects() { return defects; } public void setDefects(List defects) { this.defects = defects; }
「defects.jsp」ファイルは、Struts 1タグライブラリを使用してこれらの不具合エントリを表示し、「struts-config.xml」で宣言した「.properties」ファイルからラベルとメッセージを表示します。
