Servlet/JSP 基礎編09 フォワード・インクルード
はじめに
この記事では「フォワードとインクルード」、次回は「リダイレクト」の二つについて解説します。なぜ、この二つを記事にするのかというと、実際のWebアプリケーションでは、サーブレットが使いやすいところ、JSPが使いやすいところで処理を回すのが普通であるからだ。そして、この処理を渡すのがフォワードやインクルードという技術である。
フォワードとインクルード
フォワードもインクルードも、他のJSP、サーブレットに処理を渡すという機能であるが、この二つの違いが気になる人もいるのではないだろうか?
二つの大きな違いは、フォワードは完全に処理を最後まで他のJSP、サーブレットに任せ、インクルードは、処理を任せる点は同じだが、最後の出力の処理を元の方でしなければならない。簡単に言うと、インクルードする側がレスポンスを出力するということである。
大して利点ではないと思えるが、複数のJSP、サーブレットで処理するとき、複数から出力するよりも、最後に一つの場所から出力できるほうが制御できる。
「フォワード」のプログラム
サーブレットからJSPへフォワードするプログラムを作成する。
今までの記事では、二つは別々で紹介していたが、これからは二つ同時に使っていきたいと思う。一つ目はサーブレットからJSPへフォワードをするので、ブラウザでサーブレットを開いたときに、JSP内の処理が画面に出れば、フォワード成功となる。
実際のサーブレットのプログラムは下記である。
これはサーブレットのプログラムである。「getRequestDispatcher」の引数には、サーブレット、JSPファイルのパスを入れる。これで、「forward.jsp」へ遷移するオブジェクトを取得できた。そして、「forword」で、フォワードを送ることができる。
ここから先は、JSPの処理に移る。JSPプログラムは下記である。
今回は、フォワードを確かめるだけなので、ブラウザに「フォワード先のJSPファイルです」という文を表示します。
実行した結果は以下のようになった。
サーブレットで開いたのだが、ちゃんとフォワードされて、JSPファイルの内容が表示されている。
「インクルード」のプログラム
次は、インクルードがどのようなプログラムで動くのか見てみたいと思う。
しかし、プログラムだけ見ても、あまりフォワードとの違いが分からないと思うので、雰囲気だけ味わっていただければと思う。
今回のプログラムでは、二つのJSPファイルにインクルードをし、その返答を呼び出し元のサーブレットで受け取り、画面に表示するというものにする。
まず、サーブレットは以下である。
フォワードの時と、同じく、「getRequestDispatcher」を使い、インクルード先のファイルを指定する。そして、「include」でインクルードを行う。
インクルード先のファイルのプログラムは次のとおりである。
これはinclude1.jspである。
これはinclude2.jspである。
いつもは、ヘッダーと、フッターのファイルをincludeディレクティブで入れているのだが、出力をサーブレット側で行うので、JSPファイルにそれらのファイルを入れる必要はなく、出力したいものを書き込むだけでよい。
結果は下記の通りである。
include1.jspの内容
include1.jspから戻ってきました
include2.jspの内容
include2.jspから戻ってきました
JSPファイルの処理をしてから、サーブレットのファイルへ戻ってきていることが分かると思う。
ちなみに、「フォワード」のサーブレットに次のようなプログラムを書き加えた。
先ほどと違うのは、printlnメソッドを加えた部分だ。
実行結果は、はじめと変わらなかった。
これで、「フォワード」と「インクルード」の違いがより理解できたと思う。
おわりに
今回は、画面遷移の「フォワード」と「インクルード」を紹介した。次回は「リダイレクト」について紹介する。「リダイレクト」と聞いたことがない人もいると思うが、経験した人はかなりいると思う。次回、お楽しみに!