#はじめに
遷移元のURLを取得する方法をメモとして記録しておきます。
今回はログイン機能を作る中で、ログインに成功したら、ログイン前に開いていたページ(ログインボタンを押したページ)に遷移するために利用しました。
以下のような流れです。
ログイン前に開いていたページ (jsp)
↓
Login.java (ログイン前に開いていたページのURLを取得し、ログインフォームに遷移)
↓
login.jsp (ログインフォーム)
↓
LoginCheck.java (ログインできるか判定、ログイン前に開いていたページのURLを取り出す)
↓
ログイン前に開いていたページ (ログインに成功したらこのページに戻る)
#取得する方法
結論としては、getHeaderメソッドを使って、リクエストヘッダーのRefererを取得します。
//リクエストのヘッダー情報の遷移元URLを取得
request.getHeader("REFERER");
今回はセッションを使って、取得したURLを保持し、ログインに成功したらそれを取り出して遷移します。
//リクエストのヘッダー情報の遷移元URLを取得しセッションに格納
session.setAttribute("referer", request.getHeader("REFERER"));
request.getRequestDispatcher("/login.jsp").forward(request, response);
//ログインに成功したら、セッションから遷移元URLを取り出して遷移
String url = (String)session.getAttribute("referer");
request.getRequestDispatcher(response.encodeURL(url).substring(29)).forward(request, response);
#手こずったところ
LoginCheck.javaからログイン前のページに遷移しようとすると、404のHTTPエラーが出てしまい苦戦しました。
理由としては、refererで取得したURLは、URLの全体であるため不要な部分も指定してフォワードしようとしていたためです。
対処法は単純で、substringを使って必要箇所を切り出せばOKです。
例えば
http://localhost:8080/sample/top.jsp
「http://localhost:8080/sample
」の部分はいらないのでURLに対して**substring(29)**としてあげれば、/top.jspのみ切り出せます。