code: public static void setIgnoreIncludeServletPath( ServletRequest request, boolean ignore )
      {
          Integer depth = ( Integer ) request.getAttribute( IGNORE_INCLUDE_SERVLET_PATH_ATTR );
          
          if ( ignore )
          {
              if ( depth == null ) depth = new Integer( 0 );
              request.setAttribute( IGNORE_INCLUDE_SERVLET_PATH_ATTR, new Integer( depth.intValue() + 1 ) );
          }
          else
          {
              assert depth != null : "call to setIgnoreIncludeServletPath() was imbalanced";
              depth = new Integer( depth.intValue() - 1 );
              
              if ( depth.intValue() == 0 )
              {
                  request.removeAttribute( IGNORE_INCLUDE_SERVLET_PATH_ATTR );
              }
              else
              {
                  request.setAttribute( IGNORE_INCLUDE_SERVLET_PATH_ATTR, depth );
              }
          }
      }
docs: Tell {@link #getDecodedServletPath} (and all that call it) to ignore the attribute that specifies the Servlet
  Include path, which is set when a Servlet include is done through RequestDispatcher.  Normally,
  getDecodedServletPath tries the Servlet Include path before falling back to getServletPath() on the request.
  Note that this is basically a stack of instructions to ignore the include path, and this method expects each
  call with <code>ignore</code>==<code>true</code> to be balanced by a call with
  <code>ignore</code>==<code>false</code>.