JSTL <c:redirect>

<c:redirect> は指定したURLへリダイレクトさせるJSP標準タグライブラリ(JSTL)である。

タグ

<c:redirect url="" />

<c:param> タグを使って、URLにリクエストパラメータを指定することもできる。

<c:redirect url="">
  <c:param name="" value="" />
</c:redirect>

属性

<c:redirect> タグには次の属性を指定する。

context

コンテキストパスを指定する。

WebサーバはWebアプリケーションをコンテキストと呼ばれる単位で管理している。下記URLの場合は「/app」の部分がコンテキストパスとなる。

https://localhost:8080/app/example/index.jsp
url

リダイレクト先のURLを指定する。必須属性で、省略できない。

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
  <head>
    <title>JSTL redirect to another page</title>
  </head>
  <body>
    <c:redirect url="https://segakuin.com/" />
  </body>
</html>

<c:param> タグを使って、URLにリクエストパラメータを指定することもできる。

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
  <head>
    <title>JSP redirect another page with parameters</title>
  </head>
  <body>
    <c:redirect url="https://segakuin.com/">
      <c:param name="user" value="tsuka" />
    </c:redirect>
  </body>
</html>

リダイレクトとフォワードの違い

<c:redirect> と似たJSPアクションタグに <jsp:forward> がある。

リダイレクトの場合、転送先に再度要求するようクライアントに返す。別のサーバへ転送することもできるが、リクエストパラメータを引き継ぐことはできない。

フォワードの場合、転送先の応答をクライアントへ返す。別のサーバへ転送することはできないが、リクエストパラメータを引き継ぐことができる。

リダイレクトとフォワードの違い
リダイレクト フォワード
動作 リダイレクト先へ再度要求するようクライアントに返す フォワード先の応答を返す
転送先 外部サーバでも可能 同一サーバのみ
リクエストパラメータ 引き継げない 引き継げる

リダイレクトの場合、クライアントとサーバーの間で次のやり取りを行う。

  1. クライアントがサーバーへ要求を送信する。
    GET /unix/command/date.html HTTP/1.1
    Host: segakuin.com
    Connection: keep-alive
    Upgrade-Insecure-Requests: 1
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
    Accept-Encoding: gzip, deflate
    Accept-Language: ja,en-US;q=0.9,en;q=0.8
  2. サーバーがHTTPステータス302を返す。
    HTTP/1.1 302 Found
    Date: Sun, 23 May 2021 00:38:37 GMT
    Server: Apache/1.3.31 (Unix)
    Location: https://segakuin.com/linux/command/date.html
    Connection: close
    Transfer-Encoding: chunked
    Content-Type: text/html; charset=iso-8859-1
  3. クライアントが転送先(HTTP応答ヘッダのLocation)へ再度要求を送信する。
  4. 転送先のページが応答を返す。
リダイレクト
Figure 1. リダイレクト

フォワードの場合、クライアントとサーバーの間で次のやり取りを行う。

  1. クライアントがサーバーへ要求を送信する。
  2. サーバーが転送先ページの応答を返す。
フォワード
Figure 2. フォワード

JSTL (JavaServer Pages Standard Tag Library)

JSP標準タグライブラリ(JSTL)には、他にも次のタグがある。