21
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Java】遷移元のURLを取得する方法

Posted at

#はじめに
遷移元のURLを取得する方法をメモとして記録しておきます。
今回はログイン機能を作る中で、ログインに成功したら、ログイン前に開いていたページ(ログインボタンを押したページ)に遷移するために利用しました。

以下のような流れです。

ログイン前に開いていたページ (jsp)

Login.java (ログイン前に開いていたページのURLを取得し、ログインフォームに遷移)

login.jsp (ログインフォーム)

LoginCheck.java (ログインできるか判定、ログイン前に開いていたページのURLを取り出す)

ログイン前に開いていたページ (ログインに成功したらこのページに戻る)

#取得する方法
結論としては、getHeaderメソッドを使って、リクエストヘッダーのRefererを取得します。

    //リクエストのヘッダー情報の遷移元URLを取得
    request.getHeader("REFERER");

今回はセッションを使って、取得したURLを保持し、ログインに成功したらそれを取り出して遷移します。

Login.java
   //リクエストのヘッダー情報の遷移元URLを取得しセッションに格納
   session.setAttribute("referer", request.getHeader("REFERER"));
   request.getRequestDispatcher("/login.jsp").forward(request, response);
LoginCheck.java
   //ログインに成功したら、セッションから遷移元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のみ切り出せます。

21
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?