目次へ

5.4. ServletRequestを用いたデータ共有

呼び出したサーブレットとデータ共有をしたい事が考えられます。ServletRequestのgetParameterで取得できる値は、呼び出した側も呼び出された側も同じになるのですが、それ以外に追加したい場合が考えられます。その場合にはServletRequestの「setAttribute」「getAttribute」を使用します。HttpSessionと使用方法は同じです。

無論、HttpSessionでもデータ共有はできるのですが、こちらと違い、ServletRequestの場合には1回のクライアントからの要求から応答までの間でのみ、データが保持されます。セッションの間でデータ共有したい場合にはHttpSession、1回の要求の間だけの場合にはServletRequestを使用します。

public final class TimeServlet extends HttpServlet{
  protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException{
    String msg="ただ今の時刻は "+new SimpleDateFormat().format(new Date())+" です。";
    request.setAttribute("msg",msg);
    request.getRequestDispatcher("/servlet/MessageShowServlet").forward(request,response);
  }
}
public final class MessageShowServlet extends HttpServlet{
  protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException{
    response.setContentType("text/html; charset=EUC-JP");
    PrintWriter writer=response.getWriter();
    wrieter.println("<html><body><hr><b>");
    String msg=(String)request.getAttribute("msg");
    writer.println("</b><hr></body></html>");
  }
}

MessageShowServletは汎用的な表示を行うサーブレットです。TimeServletから表示させたい値をServletRequestを介して渡してやる事により、全体として1つの表示を行っています。MessageShowServletの部分を、JSPで行う事がJ2EEでは推奨されています。

(実習課題3)

以下の条件を満たすサーブレットアプリケーションを作成しなさい。

  • 動物を表すクラスを作成し、そのクラスは「名前」「身長」「体重」を表すインスタンス変数、および適当な「set」「get」メソッドを持つものとする。
  • サーブレットアプリケーションは入力ページと出力ページを持ち、入力ページで上記3要素を入力する。出力ページでは、3要素の表示を行う。
  • 3要素全てが入力されていない場合には、出力ページを表示せずに、再度入力ページで入力を促すようにする事。
  • 出力ページに表示をする前に、入力された要素をログファイルに書き出すようにする事。
  • 「入力ページ」「出力ページ」「処理を行うサーブレット」の3つのサーブレットを作成する事。

解答例はこちら

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp