- 1.1. Strutsとは
- 1.2. ActionServlet
- 1.3. Struts設定ファイルの編集とActionクラスの実装
1.3. Struts設定ファイルの編集とActionクラスの実装
「WEB-INF/web.xml」の編集が終了したら、Struts設定ファイルの編集とActionクラスの実装に取り掛かります。
ActionServletは呼び出されると、その時のURLとStruts設定ファイルに基づいて実行するActionクラスを決定します。以下の単純な設定ファイルを用いて説明します。
<?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd"> <struts-config> <action-mappings> <action path="/sample/test" type="sample.TestAction"> <forward name="test" path="/sample/test.jsp" /> </action> </action-mappings> </struts-config>
最初のxml宣言およびDOCTYPE宣言はそのまま真似て下さい。DTDはDOCTYPE宣言に記載されているURLにありますが、strutsのライブラリの中(libディレクトリ)にも含まれているのでそれを参考にして下さい。
<struts-config>内の<action-mapping>が、URLと呼び出されるActionクラスの設定を記述する部分です。具体的な設定は<action>タグで行われ「path」属性でURL、「type」属性で呼び出されるActionクラスが指定されます。例の場合、
http://(サーバ名)/(Webアプリケーションのルートpath)/sample/test.do
というURLにアクセスがあると、「sample.TestAction」クラスがActionServletによって呼び出され、実行されます。
<action>タグの中にある<forward>タグは、リクエストをフォワードする先を指定するものです。Actionクラスは自身で表示を行わず、他にフォワードします。(Actionクラス自身で処理する事も可能ですが、それについては後に説明します。)その先の内容を指定するものが<forward>タグで、サンプルの場合は「/sample/test.jsp」ファイルを指定しています。「name」属性はフォワード先のキーを意味するもので、複数<forward>タグを指定した中から1つ転送先を選択する場合に使用します。
さて続いてActionクラスの実装について説明します。Actionクラスは「org.apache.struts.action.Action」クラスを継承する形で実装します。
package sample; import org.apache.struts.action.Action; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class TestAction extends Action{ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception{ .... return(mapping.findForward("test")); } }
Actionクラスの実装は「execute」メソッドのオーバーライドが中心です。このメソッドはActionServletによってActionクラスが呼び出される際に実行されるもので、この中にクライアントからアクセスがあった場合の具体的な処理を記述します。引数・返り値の意味・利用目的は以下の通りです。
引数ActionMapping | ActionServletの情報を管理するクラス。主に<forward>タグと<exception>タグの情報を取得するために利用します。 |
ActionForm | HTMLの<form>の情報を取得するために利用します。詳細については後の章で説明します。 |
HttpServletRequest | 「ActionForm」で取得できない情報を取得するために使用します。基本的には使用しません。 |
HttpServletResponse | forwardを行わずに、このクラス内でHTTPレスポンスを行う場合に使用します。基本的には使用しません。 |
返り値
ActionForward | <forward>タグの情報を管理するクラス。executeメソッドがこのインスタンスを返す事により、<forward>タグで指定されたリソースにリクエストがフォワードされます。メソッドの返り値がnullである場合には、他への転送を行いません。 |
Actionクラスはexecuteメソッドの中で、ActionFormやHttpServletRequestからHTTPリクエストのパラメータを読み取り、何らかの処理を行います。処理が正常終了した場合には、ActionMappingのfindForwardメソッドでActionForwardインスタンスを1つ取得し、それを返します。findForwardメソッドの引数は文字列で、<forward>タグのname属性で指定した値を指定します。また返り値は、指定した値に該当する<forward>タグに該当するActionForwardインスタンスです。したがってfindForwardメソッドで検索された、<forward>タグのpath属性で指定されたリソースに、リクエストは転送される事になります。
executeメソッドの返り値をnullにした場合には他への転送が行われませんので、Actionクラス内で表示処理を行う必要があります。
処理が異常終了した場合には「javax.servlet.ServletException」を始め、何らかの例外をスローします。executeメソッドは「throws Exception」と定義されているので、任意の例外クラスをスローする事ができます。
(実習課題1)
以下のWebアプリケーションを、Strutsを用いて作成しなさい。
- Internet Explorerでアクセスしてきた場合には403エラーを表示する事。
- それ以外のブラウザでアクセスしてきた場合には時刻を表示する事。
- 時刻の表示はフォワード先のJSPページで行う事。
(実習課題2)
以下のWebアプリケーションを、Strutsを用いて作成しなさい。
- パラメータ「op」の値が「time」である場合には、時刻を表示する事。
- パラメータ「op」の値が「ip」である場合には、接続元のIPアドレスを表示する事。
- いずれも表示はフォワード先のJSPページで行う事。