JavaのHttpServletRequestWrapperとgetPathInfoメソッドを徹底解説!初心者向けサーブレットURL情報取得ガイド
生徒
「Javaのサーブレットで、URLの一部だけを取り出す方法ってありますか?」
先生
「Javaでは、HttpServletRequestWrapperクラスのgetPathInfoメソッドを使って、URLの追加パス情報を簡単に取得できますよ。」
生徒
「それってどんなときに使うんですか?」
先生
「それでは実際の使い方や仕組みを丁寧に見ていきましょう!」
1. javax.servlet.httpパッケージとは
Javaのjavax.servlet.httpパッケージは、Webアプリケーションを構築する上で非常に重要なパッケージで、HTTPプロトコルを扱うためのクラスやインターフェースが多数含まれています。
サーブレットを使ってリクエストとレスポンスを処理する際には、このパッケージに含まれるHttpServletやHttpServletRequest、HttpServletResponseなどを活用します。
この中にあるHttpServletRequestWrapperは、既存のリクエストオブジェクトに処理を追加したい場合などに使われるラッパークラスです。
2. HttpServletRequestWrapperとは
HttpServletRequestWrapperクラスは、HttpServletRequestのすべてのメソッドを継承しつつ、必要な部分だけをオーバーライドして挙動をカスタマイズできる便利なクラスです。
たとえば、セキュリティ対策やURLの再構築、特殊なフィルタ処理を行う場面などで使われます。既存のリクエストの情報を変更せずに一時的な処理を追加する場面でも活躍します。
3. getPathInfoメソッドの基本的な役割
getPathInfoメソッドは、リクエストURLの中でサーブレットパスのあとに続く追加情報を取得するためのメソッドです。
たとえば、サーブレットが/productにマッピングされていて、URLが/product/123/detailの場合、この/123/detailの部分がgetPathInfoで取得できます。
このように、リソースのIDやサブパスを取得して処理を切り替えるときに便利です。
4. getPathInfoの使い道と注意点
getPathInfoを使えば、REST風の設計やパラメータのような使い方が可能になります。たとえば以下のような用途があります:
- 商品IDごとの処理分岐
- ユーザーごとのページ表示
- カテゴリやタグ情報の取得
ただし、URLにサーブレットマッピング以外の情報が含まれていないと、getPathInfoはnullを返すので注意が必要です。
5. HttpServletRequestWrapperでgetPathInfoを使う方法
それでは、HttpServletRequestWrapperを使ってgetPathInfoメソッドでパス情報を取得するサンプルコードを見てみましょう。
@WebServlet("/info/*")
public class PathInfoServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HttpServletRequestWrapper wrapper = new HttpServletRequestWrapper(request);
String pathInfo = wrapper.getPathInfo();
response.setContentType("text/plain; charset=UTF-8");
if (pathInfo != null) {
response.getWriter().println("追加パス情報: " + pathInfo);
} else {
response.getWriter().println("パス情報は存在しません。");
}
}
}
6. getPathInfoの実行結果例
サーブレットが/info/*にマッピングされていて、次のようなURLでアクセスした場合:
http://localhost:8080/yourapp/info/user/789
そのときの出力結果は以下のようになります。
追加パス情報: /user/789
もしURLが/infoだけだった場合には、次のような出力になります。
パス情報は存在しません。
7. 初心者が気をつけたいポイント
getPathInfoメソッドは、サーブレットパス以降の部分だけを取り出す機能なので、getRequestURIやgetServletPathなどと組み合わせて使うことで、より細かい制御が可能になります。
ただし、アプリケーションの設計によっては、nullが返るケースも多いため、常にnullチェックを忘れずに行うことが大切です。
8. Webアプリケーションでの活用例
商品詳細ページや、ユーザーのプロフィールページなど、動的にURLが変化する仕組みを作りたいときにgetPathInfoは非常に便利です。
たとえば、ECサイトで/item/456というURLから456のIDを取り出して商品情報をデータベースから取得するようなケースでよく使われます。
初心者のうちは、URLの構造やマッピングの意味を理解しながら使っていくことが大切です。