JavaのHttpServletRequestWrapperとgetRequestURLメソッドを完全ガイド!初心者でもわかるURL取得の基本
生徒
「Javaで、今アクセスされているページの完全なURLを取得するにはどうすればいいですか?」
先生
「その場合は、HttpServletRequestWrapperクラスのgetRequestURLメソッドを使うと、フルURLが取得できます。」
生徒
「URIとURLってどう違うんですか?」
先生
「URIはパスの部分だけ、URLはスキームやホスト名も含む完全なアドレスです。それでは具体的に説明していきましょう。」
1. javax.servlet.httpパッケージとは
Javaのjavax.servlet.httpパッケージは、Webアプリケーションを開発するときに使用する基本的な機能を提供するパッケージです。
HttpServletRequestやHttpServletResponseといったクラスを使って、クライアントからのリクエスト情報の取得やレスポンスの返却が行えます。
このパッケージに含まれるHttpServletRequestWrapperは、既存のリクエストオブジェクトをラップして、動作を拡張したいときに使います。
2. HttpServletRequestWrapperクラスとは
HttpServletRequestWrapperは、HttpServletRequestのすべてのメソッドを引き継ぎつつ、必要に応じて独自の処理を追加できるラッパークラスです。
たとえば、フィルターの中でパラメータを加工したり、セキュリティの処理を加えたりする場面でよく使われます。
3. getRequestURLメソッドの基本
getRequestURLメソッドは、HTTPリクエストされたURL全体(スキーム、ホスト名、ポート番号、パス)を取得できるメソッドです。
たとえば、次のようなURLでWebアプリケーションにアクセスされた場合:
http://localhost:8080/sample-app/page/detail
getRequestURL()は以下の文字列を返します:
http://localhost:8080/sample-app/page/detail
クエリパラメータ(例:?id=123)は含まれない点に注意しましょう。
4. getRequestURLの使いどころ
getRequestURLメソッドは、以下のようなシーンで活用されます:
- アクセスログに完全なURLを記録したいとき
- リダイレクト先やリンクURLを動的に生成したいとき
- Web APIでアクセス先のURLをベースにした処理を行いたいとき
- フルURLを利用してページ情報を外部に通知したいとき
ページの判別やアクセス管理を行う上で、非常に重要な情報源となります。
5. HttpServletRequestWrapperでgetRequestURLを使うサンプル
それでは、HttpServletRequestWrapperを使ってgetRequestURLメソッドを呼び出すJavaサーブレットのサンプルコードを紹介します。
@WebServlet("/full-url")
public class RequestURLServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HttpServletRequestWrapper wrapper = new HttpServletRequestWrapper(request);
StringBuffer requestURL = wrapper.getRequestURL();
response.setContentType("text/plain; charset=UTF-8");
response.getWriter().println("リクエストされたURL: " + requestURL.toString());
}
}
6. getRequestURLの実行結果例
たとえば、次のURLにアクセスした場合:
http://localhost:8080/sample-app/full-url
出力結果は以下のようになります:
リクエストされたURL: http://localhost:8080/sample-app/full-url
このように、ドメイン名やポート番号を含んだ完全なURLが取得できます。
7. 初心者が気をつけたいポイント
getRequestURLで得られるのは、文字列ではなくStringBuffer型です。そのまま出力したいときはtoString()を呼び出して変換する必要があります。
また、クエリパラメータ(例:?page=2)は含まれていないため、必要に応じてgetQueryString()と組み合わせて扱うのがポイントです。
8. Webアプリケーションでの活用例
例えば、メールで「このページにアクセスしてください」というリンクを自動生成する場面では、getRequestURLで取得したURLを使えば正確なリンクを作ることができます。
また、複数ドメインで動作するWebシステムで、アクセス先のホスト名ごとに処理を分けたいときにも、フルURLの取得は欠かせません。
Java ServletによるWebアプリ開発では、HttpServletRequestWrapperとgetRequestURLの正しい理解がとても重要です。