サーブレット 5章 includeとforward
- 5.1. 他のサーブレットの呼び出し
- 5.2. include
- 5.3. forward
- 5.4. ServletRequestを用いたデータ共有
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つのサーブレットを作成する事。