docs: public void init(ServletConfig config) throws ServletException {
          /*
           * Never forget super.init()!
           */
          super.init(config);
  
          /*
           * Grab the servlet context.
           */
          this.servletContext = config.getServletContext();
  
          // Get verbosity hint.
          String value = config.getInitParameter("verbose");
          if (value != null) {
              this.verbose = Boolean.valueOf(value);
          }
  
          // get encoding
          value = config.getInitParameter("encoding");
          if (value != null) {
              this.encoding = value;
          }
  
          // And now the real init work...
          if (verbose) {
              log("Parsing init parameters...");
          }
  
          String regex = config.getInitParameter(INIT_PARAM_RESOURCE_NAME_REGEX);
          if (regex != null) {
              String replacement = config.getInitParameter("resource.name.replacement");
              if (replacement == null) {
                  Exception npex = new NullPointerException("resource.name.replacement");
                  String message = "Init-param 'resource.name.replacement' not specified!";
                  log(message, npex);
                  throw new ServletException(message, npex);
              } else if ("EMPTY_STRING".equals(replacement)) {//<param-value></param-value> is prohibited
                  replacement = "";
              }
              int flags = 0; // TODO : Parse pattern compile flags (literal names).
              String flagsStr = config.getInitParameter(INIT_PARAM_RESOURCE_NAME_REGEX_FLAGS);
              if (flagsStr != null && flagsStr.length() > 0) {
                flags = Integer.decode(flagsStr.trim());//throws NumberFormatException
              }
              resourceNamePattern = Pattern.compile(regex, flags);
              this.resourceNameReplacement = replacement;
              String all = config.getInitParameter("resource.name.replace.all");
              if (all != null) {
                  this.resourceNameReplaceAll = Boolean.valueOf(all.trim());
              }
          }
  
          value = config.getInitParameter("logGROOVY861");
          if (value != null) {
              this.logGROOVY861 = Boolean.valueOf(value);
              // nothing else to do here
          }
  
          /*
           * If verbose, log the parameter values.
           */
          if (verbose) {
              log("(Abstract) init done. Listing some parameter name/value pairs:");
              log("verbose = " + verbose); // this *is* verbose! ;)
              log("reflection = " + reflection);
              log("logGROOVY861 = " + logGROOVY861);
              log(INIT_PARAM_RESOURCE_NAME_REGEX + " = " + resourceNamePattern);//toString == pattern
              log("resource.name.replacement = " + resourceNameReplacement);
          }
      }