HttpServletRequestのgetRequestURIとgetPathInfoの違い

  • Java EE

  • link:/tag/servlet/ [サーブレット]

1. 概要

このクイックチュートリアルでは、_HttpServletRequest_クラスの_getRequestURI()_と_getPathInfo()_の違いについて説明します。

*2. getRequestURI()_と_getPathInfo() *の違い

関数* _getRequestURI()_ * *は、要求された完全なURIを返します。*これには、デプロイメントフォルダーとサーブレットマッピング文字列が含まれます。 また、すべての追加のパス情報を返します。
関数* _getPathInfo()_ * *は、サーブレットに渡されたパスのみを返します*。 追加のパス情報が渡されていない場合、この関数は_null_を返します。
言い換えると、アプリケーションをWebサーバーのルートにデプロイし、**“/âにマッピングされたサーブレットをリクエストすると、_getRequestURI()_と_getPathInfo()_の両方が同じstrin ** gを返します。 。 そうでなければ、異なる値を取得します。

3. リクエスト例

_HttpServletRequest_メソッドの理解を深めるために、次のURLからアクセスできるlink:/intro-to-servlets[servlet]があるとします。
http://localhost:8080/deploy-folder/servlet-mapping
このリクエストは、「deploy-folder」内にデプロイされたWebアプリケーションの「servlet-mapping」サーブレットにヒットします。 したがって、このリクエストに対して_getRequestURI()_と_getPathInfo()_を呼び出すと、異なる文字列が返されます。
単純な_doGet()_サーブレットメソッドを作成しましょう。
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
    PrintWriter writer = response.getWriter();
    if ("getPathInfo".equals(request.getParameter("function")) {
        writer.println(request.getPathInfo());
    } else if ("getRequestURI".equals(request.getParameter("function")) {
        writer.println(request.getRequestURI());
    }
    writer.flush();
}
まず、https://www.baeldung.com/curl-rest [curl]コマンドによってフェッチされた_getRequestURI_リクエストのサーブレットの出力を見てみましょう。
curl http://localhost:8080/deploy-folder/servlet-mapping/request-path?function=getRequestURI
/deploy-folder/servlet-mapping/request-path
同様に、_getPathInfo_のサーブレットの出力を見てみましょう。
curl http://localhost:8080/deploy-folder/servlet-mapping/request-path?function=getPathInfo
/request-path

4. 結論

この記事では、_HttpServletRequest_ *の_getRequestURI()_と_getPathInfo()_の違いについて説明しました。 また、サンプルのサーブレットとリクエストを使用してデモを行いました。
いつものように、これらのすべての機能をテストするために実装されたサーブレットはhttps://github.com/eugenp/tutorials/tree/master/javax-servlets[Githubで]から入手できます。