ここでは、JavaScriptアプリケーションからの送信データを受け取って処理を行うビジネスロジックの作成方法について説明します。
ビジネスロジックは、サーブレットとして作成します。
JavaBean(リクエスト用)の取得
JavaBean(リクエスト用)の取得は、以下の手順で行います。
ServletContextクラスのインスタンスを取得します。
「3.5.2 JavaBeanの取得(コールバック)」で作成したcom.fujitsu.interstage.rcf.http.RcfServletHelperクラスを継承したクラスのインスタンスを生成します。コンストラクタの引数には、ServletContextを指定します。なお、性能を考慮する場合は、生成したインスタンスをアプリケーション全体で共用することを推奨します。
生成したインスタンスのgetRequestBeanメソッドを呼び出し、JavaBeanを取得します。このとき、引数にはjavax.servlet.http.HttpServletRequestクラスのインスタンスを指定します。ビジネスロジック呼出し時に送信データがない場合は、getRequestBeanメソッドからnullが返却されます。
業務処理の呼出し
受け取ったリクエストパラメーターに応じて、各業務処理を振り分けて実行します。
業務処理では、処理結果をJavaBeanに格納します。
JavaBean(レスポンス用)の出力
JavaBean(リクエスト用)の取得で作成したインスタンスのsetResponseBeanメソッドを呼び出し、処理結果のJavaBeanをレスポンスに出力します。
このとき、引数には以下の情報を指定します。
javax.servlet.http.HttpServletRequestクラスのインスタンス
javax.servlet.http.HttpServletResponseクラスのインスタンス
処理結果のJavaBean
JavaBeanがnullだった場合は、JavaScriptアプリケーションにnullが返却されます。
エラー情報の出力
業務処理でエラーが発生した場合などで、クライアントに例外を返却したい場合は、JavaBean(リクエスト用)の取得で作成したインスタンスのsetExceptionメソッドを呼び出し、レスポンスに例外の情報を出力します。
このとき、引数には以下の情報を指定します。
javax.servlet.http.HttpServletRequestクラスのインスタンス
javax.servlet.http.HttpServletResponseクラスのインスタンス
例外のインスタンス
例外の情報を出力すると、JavaScriptアプリケーションでは、errorHandlerコールバック関数が呼び出されます。errorHandlerの引数にはエラーコードRCF0907のエラーオブジェクトが渡されます。エラーオブジェクトのcauseプロパティには、setExceptionの引数に指定した例外の情報が格納されています。
なお、setResponseBeanメソッドでJavaBeanを返却しない場合は、setExceptionメソッドで例外を返却してください。また、setResponseBeanメソッドを実行して正常終了した場合は、setExceptionメソッドを呼び出さないでください。setExceptionメソッドを実行した場合は、setResponseBeanを呼び出さないでください。
以下に、ビジネスロジックの記述例を示します。
package mypkg; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.fujitsu.interstage.rcf.http.RcfServletHelper; public class MyHandler extends HttpServlet { public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException { // JavaBean(リクエスト用)の取得 ServletContext context = getServletContext(); RcfServletHelper helper = new MyHelper(context); RequestBean reqBean = null; try { reqBean = (RequestBean) helper.getRequestBean(req); } catch (Exception e) { // 例外発生時の処理 ...; } // 業務ロジックの呼出し ResponseBean resBean = null; String cmd = req.getParameter("command"); if ("init".equals(cmd)) { // 初期処理の呼出し resBean = init(reqBean); } else if ("execute".equals(cmd)) { // 実行処理の呼出し ...; } // JavaBean(レスポンス用)の出力 try { helper.setResponseBean(req, res, resBean); } catch (Exception e) { // 例外発生時の処理 ...; try { helper.setException(req, res, e); } catch (Exception ie) { // 例外発生時の処理 ...; } } } }