code: public static void forward(
  		String contextRelativePath,
  		RequestDispatcher dispatcher,
  		HttpServletRequest request,
  		HttpServletResponse response,
  		Map<String,?> args
  	) throws ServletException, IOException {
  		// Track original page when first accessed
  		final String oldOriginal = getOriginalPage(request);
  		try {
  			// Set original request path if not already set
  			if(oldOriginal == null) {
  				setOriginalPage(request, request.getServletPath());
  			}
  			// Keep old dispatch page to restore
  			final String oldDispatchPage = getDispatchedPage(request);
  			try {
  				// Store as new relative path source
  				setDispatchedPage(request, contextRelativePath);
  				// Keep old arguments to restore
  				final Object oldArgs = request.getAttribute(Dispatcher.ARG_MAP_REQUEST_ATTRIBUTE_NAME);
  				try {
  					// Set new arguments
  					request.setAttribute(
  						Dispatcher.ARG_MAP_REQUEST_ATTRIBUTE_NAME,
  						args==null ? null : AoCollections.optimalUnmodifiableMap(args)
  					);
  					// Perform dispatch
  					dispatcher.forward(request, response);
  				} finally {
  					// Restore any previous args
  					request.setAttribute(Dispatcher.ARG_MAP_REQUEST_ATTRIBUTE_NAME, oldArgs);
  				}
  			} finally {
  				setDispatchedPage(request, oldDispatchPage);
  			}
  		} finally {
  			if(oldOriginal == null) {
  				setOriginalPage(request, null);
  			}
  		}
  	}
docs: Performs a forward with the provided servlet path and associated dispatcher.
  
  @param  args  The arguments for the page, make unmodifiable and accessible as request-scope var "arg"