Class SSIProcessor

java.lang.Object
org.apache.catalina.ssi.SSIProcessor

public class SSIProcessor extends Object
The entry point to SSI processing. This class does the actual parsing, delegating to the SSIMediator, SSICommand, and SSIExternalResolver as necessary.
  • Field Details

    • COMMAND_START

      protected static final String COMMAND_START
      The start pattern
      See Also:
    • COMMAND_END

      protected static final String COMMAND_END
      The end pattern
      See Also:
    • ssiExternalResolver

      protected final SSIExternalResolver ssiExternalResolver
      External resolver for file and variable access.
    • commands

      protected final HashMap<String, SSICommand> commands
      Map of registered SSI command names to their handlers.
    • debug

      protected final int debug
      Debug level for SSI processing.
    • allowExec

      protected final boolean allowExec
      Whether exec commands are allowed.
  • Constructor Details

    • SSIProcessor

      public SSIProcessor(SSIExternalResolver ssiExternalResolver, int debug, boolean allowExec)
      Creates a new SSI processor with the given configuration.
      Parameters:
      ssiExternalResolver - the external resolver for file/variable access
      debug - the debug level
      allowExec - whether exec commands are allowed
  • Method Details

    • addBuiltinCommands

      protected void addBuiltinCommands()
      Registers all built-in SSI commands.
    • addCommand

      public void addCommand(String name, SSICommand command)
      Registers a custom SSI command handler.
      Parameters:
      name - the command name
      command - the command handler
    • process

      public long process(Reader reader, long lastModifiedDate, PrintWriter writer) throws IOException
      Process a file with server-side commands, reading from reader and writing the processed version to writer. NOTE: We really should be doing this in a streaming way rather than converting it to an array first.
      Parameters:
      reader - the reader to read the file containing SSIs from
      lastModifiedDate - resource last modification date
      writer - the writer to write the file with the SSIs processed.
      Returns:
      the most current modified date resulting from any SSI commands
      Throws:
      IOException - when things go horribly awry. Should be unlikely since the SSICommand usually catches 'normal' IOExceptions.
    • parseParamNames

      protected String[] parseParamNames(StringBuilder cmd, int start)
      Parse a StringBuilder and take out the param type token. Called from requestHandler
      Parameters:
      cmd - a value of type 'StringBuilder'
      start - index on which parsing will start
      Returns:
      an array with the parameter names
    • parseParamValues

      protected String[] parseParamValues(StringBuilder cmd, int start, int count)
      Parse a StringBuilder and take out the param token. Called from requestHandler
      Parameters:
      cmd - a value of type 'StringBuilder'
      start - index on which parsing will start
      count - number of values which should be parsed
      Returns:
      an array with the parameter values
    • charCmp

      protected boolean charCmp(String buf, int index, String command)
      Compares a substring of the buffer with the given command string.
      Parameters:
      buf - the buffer to search
      index - the starting index
      command - the command string to match
      Returns:
      true if the substring matches the command
    • isSpace

      protected boolean isSpace(char c)
      Checks if the given character is a whitespace character.
      Parameters:
      c - the character to check
      Returns:
      true if the character is a space, tab, newline, or carriage return
    • isQuote

      protected boolean isQuote(char c)
      Checks if the given character is a quote character.
      Parameters:
      c - the character to check
      Returns:
      true if the character is a single, double, or backtick quote