Servlet/JSP 基礎編10 リダイレクト

リダイレクトとは

リダイレクトとは、サーブレットJSPがレスポンスで、指定したWebページをブラウザに開かせる機能のことである。実際にリダイレクトを経験した人も多いと思う。ブラウザで見てみると、サーブレットJSPのファイルを開いたにもかかわらず、突然、別のURLを開いたかのようになる。
この機は、Webサイトが引っ越ししたときなどに利用されている。

メリットとデメリット

前回と今回で、「フォワード」「インクルード」「リダイレクト」という機能がでてきたが、それぞれの動きが理解できたでしょうか。少し難しいと思うので、図で表したいと思う。

まずは、フォワードの図である。

f:id:kouki-matsuura:20200901115947p:plain

フォワードはリクエスト先のファイルから他のファイルに処理を完全に委託するイメージである。

次は、インクルードの図である。

f:id:kouki-matsuura:20200901120120p:plain

インクルードは、処理を途中まで、他のファイルに委託し、返答をしてもらう。そして、残りのレスポンスまでを元のファイルで行う。

そして、次の図はリダイレクトである。

f:id:kouki-matsuura:20200901120338p:plain

リダイレクトは、一旦、URLをレスポンスとして、ブラウザに返し、ブラウザは再び、そのURLへリクエストを送り、レスポンスを待つ。

これらの図を見れば、メリットとデメリットが理解できると思う。

まず、デメリットは、通信の回数である。「リダイレクト」はブラウザとサーバの通信が2往復で、他の二つは1往復である。

メリットは、外部のリソースにアクセスできることである。「フォワード」「インクルード」は内部リソースのみに限られる。

つまり、使いたいファイルが内部にあるのか、外部にあるのかで使い分けるべきである。

作成するプログラム

今回は、リダイレクトという機能を感じてほしいので、外部リソースのサイトを表示できるプログラムにする。そこで、作成したサーブレットを開くと、Tomcatのページを表示するようにする。
リダイレクトをするには、「sendRedirect」を利用する。引数には、URLを入れる。プログラムは以下である。

public class Redirect extends HttpServlet{

    public void doGet(HttpServletRequest request , HttpServletResponse response)
     throws ServletExceptionIOException{
        response.sendRedirect("http://tomcat.apache.org/");
    }
}

特に難しいことは書いていない。ただ、「sendRedirect」を使っていて、URLにTomcatのページを入力しているだけである。

実際に、このサーブレットを開くと、このような画面が出てきた。

f:id:kouki-matsuura:20200901122232p:plain

これはTomcatのページである。しっかりとリダイレクトされていることがわかる。

さいごに

リダイレクトについて、解説した。これで、3つの画面遷移について、それぞれの違いやメリット、デメリットが理解して頂けたかと思う。次回は、「フィルタ」を紹介したいとおもう。フィルタを利用すると、複数のファイルを扱うときに、コード量を減らせるという利点があるので、是非、知っていただきたい。