HttpServletRequestのgetRequestURIとgetPathInfoの違い
1. 概要
このクイックチュートリアルでは、 HttpServletRequestクラスのgetRequestURI()と getPathInfo()の違いについて説明します。
2. getRequestURI()と getPathInfo()の違い
関数 getRequestURI()
関数getPathInfo() は、サーブレットに渡されたパスのみを返します。 追加のパス情報が渡されない場合、この関数はnullを返します。
つまり、アプリケーションをWebサーバーのルートにデプロイし、「/」にマップされたサーブレットを要求すると、getRequestURI()とgetPathInfo()の両方が同じstringを返します。 それ以外の場合は、異なる値を取得します。
3. リクエストの例
HttpServletRequest メソッドをよりよく理解するために、次のURLからアクセスできるサーブレットがあるとします。
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();
}
まず、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()のの違いについて説明しました。 また、サーブレットとリクエストの例を使用してデモを行いました。
いつものように、これらすべての機能をテストするために実装されたサーブレットは、Githubで利用できます。