@Override
  public void init() throws ServletException {
    ServletContextFactory.setServletContext(getServletContext());
    IConfiguration configuration = null;
    try {
      String className = getServletConfig().getInitParameter("configuration");
      if (className != null) {
        Class<?> clazz = Class.forName(className);

        if (clazz.getConstructor(ServletConfig.class) != null) {
          configuration =
              (IConfiguration)
                  clazz.getConstructor(ServletConfig.class).newInstance(getServletConfig());

        } else {
          configuration = (IConfiguration) clazz.newInstance();
        }
      } else {
        configuration = new Configuration(getServletConfig());
      }
    } catch (Exception e) {
      configuration = new Configuration(getServletConfig());
    }
    try {
      configuration.init();
      AccessControlUtil.getInstance(configuration).loadACLConfig();
    } catch (Exception e) {
      if (Boolean.valueOf(getServletConfig().getInitParameter("debug"))) {
        e.printStackTrace();
      }
      this.startException = e;
      configuration = null;
    }
    ConfigurationFactory.getInstace().setConfiguration(configuration);
  }
  /**
   * Creating reponse for every command in request param.
   *
   * @param request request
   * @param response response
   * @param post if it's post command.
   * @throws ServletException when error occurs.
   */
  private void getResponse(
      final HttpServletRequest request, final HttpServletResponse response, final boolean post)
      throws ServletException {
    // 判断文件夹是否存在,不存在则创建,此处控制用户只查看自己有权限的文件
    if (request.getSession().getAttribute("currentFolder") != null) {
      String filesFolder =
          request.getRealPath(
              "/userfiles/files/" + request.getSession().getAttribute("currentFolder").toString());
      File filesFolderFile = new File(filesFolder);
      if (!filesFolderFile.exists()) {
        filesFolderFile.mkdirs();
      }
      String flashFolder =
          request.getRealPath(
              "/userfiles/flash/" + request.getSession().getAttribute("currentFolder").toString());
      File flashFolderFile = new File(flashFolder);
      if (!flashFolderFile.exists()) {
        flashFolderFile.mkdirs();
      }
      String imagesFolder =
          request.getRealPath(
              "/userfiles/images/" + request.getSession().getAttribute("currentFolder").toString());
      File imagesFolderFile = new File(imagesFolder);
      if (!imagesFolderFile.exists()) {
        imagesFolderFile.mkdirs();
      }
    }
    if (startException != null && Boolean.valueOf(getServletConfig().getInitParameter("debug"))) {
      throw new ServletException(startException);
    }
    String command = request.getParameter("command");
    IConfiguration configuration = null;
    try {
      configuration = ConfigurationFactory.getInstace().getConfiguration(request);
      if (configuration == null) {
        throw new Exception("Configuration wasn't initialized correctly. Check server logs.");
      }
    } catch (Exception e) {
      if (Boolean.valueOf(getServletConfig().getInitParameter("debug"))) {
        e.printStackTrace();
      }
      throw new ServletException(e);
    }
    try {

      if (command == null || command.equals("")) {
        throw new ConnectorException(
            Constants.Errors.CKFINDER_CONNECTOR_ERROR_INVALID_COMMAND, false);
      }

      configuration.setDebugMode(Boolean.valueOf(getServletConfig().getInitParameter("debug")));

      CommandHandlerEnum cmd = null;

      try {
        cmd = CommandHandlerEnum.valueOf(command.toUpperCase());
        // checks if command should go via POST request or it's a post request
        // and it's not upload command
        if ((cmd.getCommand() instanceof IPostCommand || post)
            && !CommandHandlerEnum.FILEUPLOAD.equals(cmd)
            && !CommandHandlerEnum.QUICKUPLOAD.equals(cmd)) {
          checkPostRequest(request);
        }
      } catch (IllegalArgumentException e1) {
        // Ignore custom plugins commands
      }

      BeforeExecuteCommandEventArgs args = new BeforeExecuteCommandEventArgs();
      args.setCommand(command);
      args.setRequest(request);
      args.setResponse(response);

      if (configuration.getEvents() != null) {
        if (configuration.getEvents().run(EventTypes.BeforeExecuteCommand, args, configuration)) {
          cmd = CommandHandlerEnum.valueOf(command.toUpperCase());
          cmd.execute(request, response, configuration, getServletContext());
        }
      } else {
        cmd = CommandHandlerEnum.valueOf(command.toUpperCase());
        cmd.execute(request, response, configuration, getServletContext());
      }
    } catch (IllegalArgumentException e) {
      if (Boolean.valueOf(getServletConfig().getInitParameter("debug"))) {
        e.printStackTrace();
        response.reset();
        throw new ServletException(e);
      } else {
        handleError(
            new ConnectorException(
                Constants.Errors.CKFINDER_CONNECTOR_ERROR_INVALID_COMMAND, false),
            configuration,
            request,
            response,
            command);
      }
    } catch (ConnectorException e) {
      if (Boolean.valueOf(getServletConfig().getInitParameter("debug"))
          && e.getException() != null) {
        e.getException().printStackTrace();
        response.reset();
        throw new ServletException(e.getException());
      } else {
        handleError(e, configuration, request, response, command);
      }
    } catch (Exception e) {
      if (Boolean.valueOf(getServletConfig().getInitParameter("debug"))) {
        e.printStackTrace();
        response.reset();
        throw new ServletException(e);
      } else {
        handleError(new ConnectorException(e), configuration, request, response, command);
      }
    }
  }