2

2 つ (またはそれ以上) の異なる URL パターンに使用したい Java サーブレットがあるとします。

  <servlet-mapping>
    <servlet-name>MyServlet</servlet-name>
    <url-pattern>/this/exact/path</url-pattern>
  </servlet-mapping>

  <servlet-mapping>
    <servlet-name>MyServlet</servlet-name>
    <url-pattern>/that/prefix/path/*</url-pattern>
  </servlet-mapping>

  <servlet-mapping>
    <servlet-name>MyServlet</servlet-name>
    <url-pattern>/yet/another/exact/path</url-pattern>
  </servlet-mapping>

MyServlet は、次のいずれかに対して呼び出されます。

/this/exact/path
/yet/another/exact/path
/that/prefix/path/param1
/that/prefix/path/param2.html

私が知りたいのは、リクエストが一致したパスが何であったかをコード内からどのように知ることができるかということです。(つまり、リクエストが行われた場合は/myapp/yet/another/exact/path、文字列を取得したい/yet/another/exact/path)。

また、/that/prefix/path/ と * に一致したものを区別する方法があるはずだと思います。

試してみString path = req.getRequestURI()ましたが、 /myapp 部分も返されます。

4

2 に答える 2

9

HttpServletRequest.getServletPath()を除く URL パターンを/*返しHttpServletRequest.getPathInfo()、一致した部分/*(またはnull完全一致の場合) を返します。

于 2012-05-22T08:27:06.793 に答える
0

以下を使用する必要があります。

     /**
     *
     * Returns any extra path information associated with
     * the URL the client sent when it made this request.
     * The extra path information follows the servlet path
     * but precedes the query string and will start with
     * a "/" character.
     *
     * <p>This method returns <code>null</code> if there
     * was no extra path information.
     *
     * <p>Same as the value of the CGI variable PATH_INFO.
     *
     *
     * @return      a <code>String</code>, decoded by the
     *          web container, specifying 
     *          extra path information that comes
     *          after the servlet path but before
     *          the query string in the request URL;
     *          or <code>null</code> if the URL does not have
     *          any extra path information
     *
     */
    public String getPathInfo();
于 2012-05-22T08:19:45.613 に答える