/**
  * Starts the request process.
  *
  * @param path the request path
  * @throws NullPointerException if the path parameter is null
  * @throws IllegalArgumentException if the path does not start with "/"
  * @throws IOException if {@link IOException} occurred
  * @throws ServletException if {@link ServletException} occurred
  */
 public void start(String path)
     throws NullPointerException, IllegalArgumentException, IOException, ServletException {
   if (path == null) {
     throw new NullPointerException("The path parameter is null.");
   }
   if (!path.startsWith("/")) {
     throw new IllegalArgumentException("The path(" + path + ") must start with \"/\".");
   }
   request.setAttribute(ControllerConstants.FORWARD_SERVLET_PATH_KEY, path);
   Router router = RouterFactory.getRouter();
   String routingPath = router.route(request, path);
   if (routingPath != null) {
     int index = routingPath.lastIndexOf('?');
     if (index < 0) {
       path = routingPath;
     } else {
       path = routingPath.substring(0, index);
       request.setQueryString(routingPath.substring(index + 1));
     }
     request.setAttribute(ControllerConstants.ROUTED_KEY, true);
   }
   request.setServletPath(path);
   frontController.doFilter(request, response, filterChain);
 }