code: @Nullable
    public static String getRequestURI (@Nonnull final HttpServletRequest aHttpRequest)
    {
      ValueEnforcer.notNull (aHttpRequest, "HttpRequest");
  
      // Use the GlobalWebScope context path to build the result string instead of
      // "aHttpRequest.getRequestURI"!
      final String sContextPath = ServletContextPathHolder.getContextPath ();
      final String sServletPath = ServletHelper.getRequestServletPath (aHttpRequest);
      final String sPathInfo = ServletHelper.getRequestPathInfo (aHttpRequest);
  
      final String sRequestURI = sContextPath + sServletPath + sPathInfo;
      if (StringHelper.hasNoText (sRequestURI))
        return sRequestURI;
  
      return getWithoutSessionID (sRequestURI);
    }
docs: Get the request URI without an eventually appended session
  (";jsessionid=..."). This method considers the GlobalWebScope custom
  context path.
  <table summary="Examples of Returned Values">
  <tr align=left>
  <th>First line of HTTP request</th>
  <th>Returned Value</th>
  <tr>
  <td>POST /some/path.html;JSESSIONID=4711</td>
  <td>/some/path.html</td>
  </tr>
  <tr>
  <td>GET http://foo.bar/a.html;JSESSIONID=4711</td>
  <td>/a.html</td>
  </tr>
  <tr>
  <td>HEAD /xyz;JSESSIONID=4711?a=b</td>
  <td>/xyz</td>
  </tr>
  </table>
  
  @param aHttpRequest
  The HTTP request
  @return The request URI without the optional session ID