http-servlet-request-requesturi-pathinfo
HttpServletRequestのgetRequestURIとgetPathInfoの違い
-
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で]から入手できます。