IRequestParserインターフェースはHTTPパラメータへのアクセスを定義したインターフェースです。javax.servlet.http.HttpServletRequestのラッパークラスですが、目的のパラメータが存在しない場合の例外送出、あるいは目的のパラメータが存在しない場合の省略時の設定、添付ファイルの取得などを行うことができます。このインターフェースのインスタンスはwisdom.core.application.AbstractRequestCommandのインスタンス変数rpとして参照可能です。インスタンスはコマンド実行時に作成されています。
例) AbstractRequestCommandのサブクラスでのIRequestParserの使用
package tutorial; import wisdom.core.application.AbstractRequestCommand; public class HelloWorld extends AbstractRequestCommand { protected void _execute() throws Exception { String name = rp.getString("name"); } }
例) 省略時なしのIRequestParserからのパラメータ取得
String name = rp.getString("name");
この場合、HTTPパラメータ「name」の値がnullの場合、ParameterNotFoundExceptionが送出されます。
想定されるケースは開発中のJSPのコーディング・ミス、あるいは必須のHTTPパラメータがない場合です。
この場合不正なリクエストとして例外として処理を中断するように省略時の値をつけません。以下の例を想定してください。
顧客情報を登録する画面があったとします。開発中にはJSPの項目名が違っていた場合、「パラメータxxxxが見つかりません」というメッセージを含んだParameterNotFoundExceptionが送出されるので開発の助けになります。
開発が完了し、テストも完了したWebアプリケーションで画面の項目がない(HTML FORM上にINPUTタグが存在しない)というケースの場合、通常はパラメータの値はnullとしてWebアプリケーションに渡されます。ケースとしては不正なリクエスト、バグの潜在が考えられます。Webアプリケーションは、「項目が存在すること」という前提前提を満たしていないので、これ以上処理を継続することができません。
こういったケースの場合、WisdomはParameterNotFoundExceptionを送出しますが、Webアプリケーションではこの例外をcatchするように作成してはいけません。Wisdomはコマンドの実行中に例外が発生した場合、例外が発生するまでにトランザクションが開始されていた場合、それらを安全にロールバック、クローズして例外クラスに対応したエラー画面にしますので、Webアプリケーションで項目が存在しない場合の対応が明確に仕様として存在している場合以外、例外をcatchしてはいけません。
例) 省略時の値つきのIRequestParserからのパラメータ取得
String searchUserType = rp.getString("searchUserType", "1");
この場合、HTTPパラメータ「searchUserType」の値がnullの場合、String searchUserTypeには"1"が入ります。ParameterNotFoundExceptionは送出されません。
使用用途は検索条件の入力、他の画面からのgetでのリンクから表示される画面、checkboxタグなど、アプリケーションでその値がない場合に明確に処理を継続できる場合に使用してください。
HTML FORMタグが添付ファイルが使用可能な場合にwisdomは添付ファイルの解析を行い、IRequestParser#getPart(String) メソッドにより添付ファイルへの取得ができるようになります。
添付ファイルはwisdom.core.request.Partオブジェクトにファイル名、コンテントタイプ、サイズ、添付ファイルのバイナリーデータなどが含まれます。
例) 添付ファイルが可能なHTML
<form method="post" enctype="multipart/form-data" action="<%= path%>/rt"> <input type="file" name="attfile" > </form>
例)添付ファイルの取得
package tutorial; import wisdom.core.application.AbstractRequestCommand; import wisdom.core.request.Part; public class HelloAttachFile extends AbstractRequestCommand { public void _execute() throws Exception { Part part = rp.getPart("attfile"); } }