2での開発を確認していきましょう。ログイン画面から一覧画面までを実装してみましょう。ログイン画面を表示します。成功した場合はsuccessに転送し、エラーが発生した場合はerrorに転送します。ログイン処理を実行します。成功した場合はsuccessに転送し、エラーが発生した場合はerrorに転送します。一覧画面を表示します。成功した場合はsuccessに転送し、エラーが発生した場合はerrorに転送します。/WEB-INF/jsp/error.jspプロジェクトの作成struts2todoアプリケーションを作成するため、Eclipseワークスペース上にプロジェクトを作成しましょう。2によって提供されるライブラリファイルをクラスパス上に配置する必要があります。以下の手順で作業をおこなってください。struts2todoプロジェクトを作成します。同じ要領でTomcatプロジェクトを作成してください。以下のファイルをダウンロードし、適当なディレクトリに展開してください。struts-2.1.6-all.zipStruts2に関連するJARファイルをWEB-INF/libにコピーします。zipファイルのstruts-2.1.6/libディレクトリから以下のファイルをWEB-INF/libにコピーしてください。DatabaseのJARをコピーします。(struts2todoプロジェクト)/WEB-INF/libにコピーしてください。WEB-INF/lib以下のJARファイルを設定してください。これで、JavaプログラムからJARファイル内にあるクラスを参照可能になります。以下のようなクラス構成で実装します。すべてのアクションに共通の処理(JDBC接続確立など)を定義した抽象クラスを実装します。ログイン処理を実装します。test.AbstractDBActionを継承します。一覧処理を実装します。test.AbstractDBActionを継承します。ユーザ情報保持オブジェクトを実装します。作業項目保持オブジェクトを実装します。Itemクラスを記述します。WEB-INF/src以下に「test」パッケージを作成し、以下のようなクラスを作成します。Item.java抽象Actionクラスを記述します。ここでは、全アクションに共通な、JDBC接続の確立処理とセッション情報の管理処理を実装します。SessionAware{インタフェースorg.apache.struts2.interceptor.SessionAwareを実装することの宣言。セッション情報を格納・取得するためにはこのインタフェースを実装する必要があります。}SessionAwareインタフェースのメソッドの実装。セッション情報を格納・取得するためのMapオブジェクトが設定されます。}現在ログインしているユーザ情報を取得する処理。セッション情報を格納したMapからUserオブジェクトを取得しています。}JDBC接続の確立処理。Actionクラスを記述します。さきほどの抽象Actionクラスを継承し、Action固有の処理を実装します。アクションとクラス・メソッドの対応関係は以下のようにします。パラメータに関してはServlet実装と同じにします。}リクエスト中のuser_idパラメータ受付処理。リクエストパラメータはsetterメソッドにより受け入れることが可能です。ActionクラスではHttpServletRequestなどのクラスを考慮する必要はありません。}リクエスト中のpasswordパラメータ受付処理。}loginアクションの処理。戻り値はアクション処理後にどのJSPファイルへ転送するかを示します。showError("ユーザIDもしくはパスワードが不正です。}login_actionアクションの処理。戻り値はアクション処理後にどの処理へ転送するかを示します。ユーザIDとパスワードが不正などのエラーが発生した場合はerrorを、ログイン成功した場合はsuccessを返します。この戻り値はStruts2で解釈され、この後記述するstruts.xmlに従って別の処理に転送されます。同じ要領でListActionクラスを作成します。ListAction.javaJSPファイルの実装JSPファイルを実装します。ここでは、以下のファイルを実装します。ログイン画面を記述します。一覧画面を記述します。エラー画面を記述します。ログイン画面のJSPファイルを記述します。WEB-INF/jsp以下に以下のようなファイルを作成します。開発者は直接Javaコードを記述しなくても簡単にJSPが記述できるようになっています。タグは以下のようなものが記述可能です。(フォームの内容)</s:form>フォームの宣言。action属性で定義されたアクションへとフォームの内容を送信する。label="ユーザID"/>テキスト入力フィールドの宣言。name,value属性はinputタグと同様の意味を持つ。label属性に指定された文字列がフィールドの左側に表示される。label="パスワード"/>パスワード入力フィールドの宣言。name,value属性はinputタグと同様の意味を持つ。label属性に指定された文字列がフィールドの左側に表示される。value="ログイン"/>送信ボタンの宣言。value属性はinputタグと同様の意味を持つ。value="ID"/>hiddenフィールドの宣言。name,value属性はinputタグと同様の意味を持つ。value属性が省略された場合はnameに対応するActionクラスのプロパティが利用される。value="currentUser.name"/>値の埋め込み。value属性にはActionクラスのプロパティを指定可能。${変数名}の形式でも埋め込み可能。(いずれも成立しなった場合の記述)</s:else>条件分岐の宣言。test属性に指定された式を評価し、成立した場合の記述が出力対象となる。value="items">繰り返しの宣言。value属性に指定されたオブジェクトに格納されたオブジェクトの個数だけ繰り返しをおこなう。iteratorタグ内では、繰り返し中のオブジェクトのプロパティを参照可能。value="1"/>変数の定義。var属性で指定された変数に値を設定する。%>Struts2のタグライブラリを使用することの宣言。</s:form>タグライブラリを使用したform定義。table定義など面倒なHTML記述をすることなくシンプルにformを定義することができます。エラー画面のJSPファイルを記述します。エラーが発生しました。value="errorMessage"/>Actionの値をJSP中に出力。s:propertyタグを記述することで、転送元のActionのgetterを呼び出し、JSP中に埋め込んでいます。一覧画面のJSPファイルを記述します。作業項目はありません。</s:if>転送元のActionの値による条件分岐。s:ifタグによって条件分岐をおこないます。条件文中の値は、s:propertyと同様に転送元のActionのgetterを呼び出すことで取得しています。</s:if>転送元のActionの値による繰り返しと変数の管理処理。s:iteratorタグによって繰り返しをおこないます。s:setタグにより変数に値を設定しています。先に作ったCSS,JavaScriptファイルをstruts2todoプロジェクト直下にコピーします。CSSについてはStruts2のformタグにあわせて一部修正しています。login.js設定ファイルの記述WEB-INF以下にweb.xmlを作成します。ここでは、Struts2が提供するクラスをパラメータに指定します。web.xmlWEB-INF/src以下にstruts.xmlを作成します。ここでは、これから記述するActionとJSPの定義をパラメータに指定します。</action>loginアクションの定義。アクションクラス名とメソッド名、結果文字列によってどのJSPファイルに転送するかを設定します。type="chain">list</result>別のアクションへの転送定義。result要素にtype="chain"と記述することで別のアクションに転送することも可能です。ここまでのファイルここまででプロジェクトディレクトリの内容は以下のようになります。作成できているか、確認してください。struts2todo_1.zipデバッグブラウザで以下のURLを開きます。個々の機能の独立性が高くなっていることがわかると思います。できるようになります。