<c:redirect>
は指定したURLへリダイレクトさせるJSP標準タグライブラリ(JSTL)である。
<c:redirect url="" />
<c:param>
タグを使って、URLにリクエストパラメータを指定することもできる。
<c:redirect url="">
<c:param name="" value="" />
</c:redirect>
<c:redirect>
タグには次の属性を指定する。
コンテキストパスを指定する。
WebサーバはWebアプリケーションをコンテキストと呼ばれる単位で管理している。下記URLの場合は「/app」の部分がコンテキストパスとなる。
https://localhost:8080/app/example/index.jsp
リダイレクト先の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>
がある。
リダイレクトの場合、転送先に再度要求するようクライアントに返す。別のサーバへ転送することもできるが、リクエストパラメータを引き継ぐことはできない。
フォワードの場合、転送先の応答をクライアントへ返す。別のサーバへ転送することはできないが、リクエストパラメータを引き継ぐことができる。
リダイレクト | フォワード | |
---|---|---|
動作 | リダイレクト先へ再度要求するようクライアントに返す | フォワード先の応答を返す |
転送先 | 外部サーバでも可能 | 同一サーバのみ |
リクエストパラメータ | 引き継げない | 引き継げる |
リダイレクトの場合、クライアントとサーバーの間で次のやり取りを行う。
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
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
フォワードの場合、クライアントとサーバーの間で次のやり取りを行う。
JSP標準タグライブラリ(JSTL)には、他にも次のタグがある。