SSIProcessor (Apache Tomcat 9.0.120 API Documentation)
Description: declaration: package: org.apache.catalina.ssi, class: SSIProcessor

# 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 Summary

  Fields
  Modifier and Type
  Field
  Description
  `protected final boolean`
  `allowExec`
  Whether exec commands are allowed.
  `protected static final String`
  `COMMAND_END`
  The end pattern
  `protected static final String`
  `COMMAND_START`
  The start pattern
  `protected final HashMap<String, SSICommand>`
  `commands`
  Map of registered SSI command names to their handlers.
  `protected final int`
  `debug`
  Debug level for SSI processing.
  `protected final SSIExternalResolver`
  `ssiExternalResolver`
  External resolver for file and variable access.

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `SSIProcessor(SSIExternalResolver ssiExternalResolver, int debug, boolean allowExec)`
  Creates a new SSI processor with the given configuration.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `protected void`
  `addBuiltinCommands()`
  Registers all built-in SSI commands.
  `void`
  `addCommand(String name, SSICommand command)`
  Registers a custom SSI command handler.
  `protected boolean`
  `charCmp(String buf, int index, String command)`
  Compares a substring of the buffer with the given command string.
  `protected boolean`
  `isQuote(char c)`
  Checks if the given character is a quote character.
  `protected boolean`
  `isSpace(char c)`
  Checks if the given character is a whitespace character.
  `protected String[]`
  `parseParamNames(StringBuilder cmd, int start)`
  Parse a StringBuilder and take out the param type token.
  `protected String[]`
  `parseParamValues(StringBuilder cmd, int start, int count)`
  Parse a StringBuilder and take out the param token.
  `long`
  `process(Reader reader, long lastModifiedDate, PrintWriter writer)`
  Process a file with server-side commands, reading from reader and writing the processed version to writer.

  ### Methods inherited from class Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Field Details

  - ### COMMAND_START

    protected static final String COMMAND_START
    The start pattern
    See Also:
      - Constant Field Values

  - ### COMMAND_END

    protected static final String COMMAND_END
    The end pattern
    See Also:
      - Constant Field Values

  - ### 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