<html><head><META http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><title>Apache Tomcat 7 (7.0.77) - SSI How To</title><meta name="author" content="Glenn L. Nielsen"><style type="text/css" media="print">
    .noPrint {display: none;}
    td#mainBody {width: 100%;}
</style><style type="text/css">
code {background-color:rgb(224,255,255);padding:0 0.1em;}
code.attributeName, code.propertyName {background-color:transparent;}


table {
  border-collapse: collapse;
  text-align: left;
}
table *:not(table) {
  /* Prevent border-collapsing for table child elements like <div> */
  border-collapse: separate;
}

th {
  text-align: left;
}


div.codeBox pre code, code.attributeName, code.propertyName, code.noHighlight, .noHighlight code {
  background-color: transparent;
}
div.codeBox {
  overflow: auto;
  margin: 1em 0;
}
div.codeBox pre {
  margin: 0;
  padding: 4px;
  border: 1px solid #999;
  border-radius: 5px;
  background-color: #eff8ff;
  display: table; /* To prevent <pre>s from taking the complete available width. */
  /*
  When it is officially supported, use the following CSS instead of display: table
  to prevent big <pre>s from exceeding the browser window:
  max-width: available;
  width: min-content;
  */
}

div.codeBox pre.wrap {
  white-space: pre-wrap;
}


table.defaultTable tr, table.detail-table tr {
    border: 1px solid #CCC;
}

table.defaultTable tr:nth-child(even), table.detail-table tr:nth-child(even) {
    background-color: #FAFBFF;
}

table.defaultTable tr:nth-child(odd), table.detail-table tr:nth-child(odd) {
    background-color: #EEEFFF;
}

table.defaultTable th, table.detail-table th {
  background-color: #88b;
  color: #fff;
}

table.defaultTable th, table.defaultTable td, table.detail-table th, table.detail-table td {
  padding: 5px 8px;
}


p.notice {
    border: 1px solid rgb(255, 0, 0);
    background-color: rgb(238, 238, 238);
    color: rgb(0, 51, 102);
    padding: 0.5em;
    margin: 1em 2em 1em 1em;
}
</style></head><body bgcolor="#ffffff" text="#000000" link="#525D76" alink="#525D76" vlink="#525D76"><table border="0" width="100%" cellspacing="0"><!--PAGE HEADER--><tr><td><!--PROJECT LOGO--><a href="http://tomcat.apache.org/"><img src="./images/tomcat.gif" align="right" alt="
      The Apache Tomcat Servlet/JSP Container
    " border="0"></a></td><td><h1><font face="arial,helvetica,sanserif">Apache Tomcat 7</font></h1><font face="arial,helvetica,sanserif">Version 7.0.77, Mar 28 2017</font></td><td><!--APACHE LOGO--><a href="http://www.apache.org/"><img src="./images/asf-logo.svg" align="right" alt="Apache Logo" border="0" style="width: 266px;height: 83px;"></a></td></tr></table><table border="0" width="100%" cellspacing="4"><!--HEADER SEPARATOR--><tr><td colspan="2"><hr noshade size="1"></td></tr><tr><!--LEFT SIDE NAVIGATION--><td width="20%" valign="top" nowrap class="noPrint"><p><strong>Links</strong></p><ul><li><a href="index.html">Docs Home</a></li><li><a href="http://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul><p><strong>User Guide</strong></p><ul><li><a href="introduction.html">1) Introduction</a></li><li><a href="setup.html">2) Setup</a></li><li><a href="appdev/index.html">3) First webapp</a></li><li><a href="deployer-howto.html">4) Deployer</a></li><li><a href="manager-howto.html">5) Manager</a></li><li><a href="realm-howto.html">6) Realms and AAA</a></li><li><a href="security-manager-howto.html">7) Security Manager</a></li><li><a href="jndi-resources-howto.html">8) JNDI Resources</a></li><li><a href="jndi-datasource-examples-howto.html">9) JDBC DataSources</a></li><li><a href="class-loader-howto.html">10) Classloading</a></li><li><a href="jasper-howto.html">11) JSPs</a></li><li><a href="ssl-howto.html">12) SSL/TLS</a></li><li><a href="ssi-howto.html">13) SSI</a></li><li><a href="cgi-howto.html">14) CGI</a></li><li><a href="proxy-howto.html">15) Proxy Support</a></li><li><a href="mbeans-descriptors-howto.html">16) MBeans Descriptors</a></li><li><a href="default-servlet.html">17) Default Servlet</a></li><li><a href="cluster-howto.html">18) Clustering</a></li><li><a href="balancer-howto.html">19) Load Balancer</a></li><li><a href="connectors.html">20) Connectors</a></li><li><a href="monitoring.html">21) Monitoring and Management</a></li><li><a href="logging.html">22) Logging</a></li><li><a href="apr.html">23) APR/Native</a></li><li><a href="virtual-hosting-howto.html">24) Virtual Hosting</a></li><li><a href="aio.html">25) Advanced IO</a></li><li><a href="extras.html">26) Additional Components</a></li><li><a href="maven-jars.html">27) Mavenized</a></li><li><a href="security-howto.html">28) Security Considerations</a></li><li><a href="windows-service-howto.html">29) Windows Service</a></li><li><a href="windows-auth-howto.html">30) Windows Authentication</a></li><li><a href="jdbc-pool.html">31) Tomcat's JDBC Pool</a></li><li><a href="web-socket-howto.html">32) WebSocket</a></li></ul><p><strong>Reference</strong></p><ul><li><a href="RELEASE-NOTES.txt">Release Notes</a></li><li><a href="config/index.html">Configuration</a></li><li><a href="api/index.html">Tomcat Javadocs</a></li><li><a href="servletapi/index.html">Servlet Javadocs</a></li><li><a href="jspapi/index.html">JSP 2.2 Javadocs</a></li><li><a href="elapi/index.html">EL 2.2 Javadocs</a></li><li><a href="websocketapi/index.html">WebSocket 1.1 Javadocs</a></li><li><a href="http://tomcat.apache.org/connectors-doc/">JK 1.2 Documentation</a></li></ul><p><strong>Apache Tomcat Development</strong></p><ul><li><a href="building.html">Building</a></li><li><a href="changelog.html">Changelog</a></li><li><a href="http://wiki.apache.org/tomcat/TomcatVersions">Status</a></li><li><a href="developers.html">Developers</a></li><li><a href="architecture/index.html">Architecture</a></li><li><a href="funcspecs/index.html">Functional Specs.</a></li><li><a href="tribes/introduction.html">Tribes</a></li></ul></td><!--RIGHT SIDE MAIN BODY--><td width="80%" valign="top" align="left" id="mainBody"><h1>SSI How To</h1><table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Table of Contents"><!--()--></a><a name="Table_of_Contents"><strong>Table of Contents</strong></a></font></td></tr><tr><td><blockquote>
<ul><li><a href="#Introduction">Introduction</a></li><li><a href="#Installation">Installation</a></li><li><a href="#Servlet_Configuration">Servlet Configuration</a></li><li><a href="#Filter_Configuration">Filter Configuration</a></li><li><a href="#Directives">Directives</a></li><li><a href="#Variables">Variables</a></li></ul>
</blockquote></td></tr></table><table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Introduction"><strong>Introduction</strong></a></font></td></tr><tr><td><blockquote>

<p>SSI (Server Side Includes) are directives that are placed in HTML pages,
and evaluated on the server while the pages are being served. They let you
add dynamically generated content to an existing HTML page, without having
to serve the entire page via a CGI program, or other dynamic technology.
</p>

<p>Within Tomcat SSI support can be added when using Tomcat as your
HTTP server and you require SSI support.  Typically this is done
during development when you don't want to run a web server like Apache.</p>

<p>Tomcat SSI support implements the same SSI directives as Apache.  See the
<a href="http://httpd.apache.org/docs/howto/ssi.html#basicssidirectives">
Apache Introduction to SSI</a> for information on using SSI directives.</p>

<p>SSI support is available as a servlet and as a filter. You should use one
or the other to provide SSI support but not both.</p>

<p>Servlet based SSI support is implemented using the class
<code>org.apache.catalina.ssi.SSIServlet</code>.  Traditionally, this servlet
is mapped to the URL pattern "*.shtml".</p>

<p>Filter based SSI support is implemented using the class
<code>org.apache.catalina.ssi.SSIFilter</code>.  Traditionally, this filter
is mapped to the URL pattern "*.shtml", though it can be mapped to "*" as
it will selectively enable/disable SSI processing based on mime types.  The
contentType init param allows you to apply SSI processing to JSP pages,
javascript, or any other content you wish.</p>
<p>By default SSI support is disabled in Tomcat.</p>
</blockquote></td></tr></table><table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Installation"><strong>Installation</strong></a></font></td></tr><tr><td><blockquote>

<p><strong>CAUTION</strong> - SSI directives can be used to execute programs
external to the Tomcat JVM. If you are using the Java SecurityManager this
will bypass your security policy configuration in <code>catalina.policy.</code>
</p>

<p>To use the SSI servlet, remove the XML comments from around the SSI servlet
and servlet-mapping configuration in
<code>$CATALINA_BASE/conf/web.xml</code>.</p>

<p>To use the SSI filter, remove the XML comments from around the SSI filter
and filter-mapping configuration in
<code>$CATALINA_BASE/conf/web.xml</code>.</p>

<p>Only Contexts which are marked as privileged may use SSI features (see the
privileged property of the Context element).</p>

</blockquote></td></tr></table><table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Servlet Configuration"><!--()--></a><a name="Servlet_Configuration"><strong>Servlet Configuration</strong></a></font></td></tr><tr><td><blockquote>

<p>There are several servlet init parameters which can be used to
configure the behaviour of the SSI servlet.
<ul>
<li><strong>buffered</strong> - Should output from this servlet be buffered?
(0=false, 1=true) Default 0 (false).</li>
<li><strong>debug</strong> - Debugging detail level for messages logged
by this servlet. Default 0.</li>
<li><strong>expires</strong> - The number of seconds before a page with SSI
directives will expire. Default behaviour is for all SSI directives to be
evaluated for every request.</li>
<li><strong>isVirtualWebappRelative</strong> - Should "virtual" SSI directive
paths be interpreted as relative to the context root, instead of the server
root? Default false.</li>
<li><strong>inputEncoding</strong> - The encoding to be assumed for SSI
resources if one cannot be determined from the resource itself. Default is
the default platform encoding.</li>
<li><strong>outputEncoding</strong> - The encoding to be used for the result
of the SSI processing. Default is UTF-8.</li>
<li><strong>allowExec</strong> - Is the exec command enabled? Default is
false.</li>
</ul>
</p>

</blockquote></td></tr></table><table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Filter Configuration"><!--()--></a><a name="Filter_Configuration"><strong>Filter Configuration</strong></a></font></td></tr><tr><td><blockquote>

<p>There are several filter init parameters which can be used to
configure the behaviour of the SSI filter.
<ul>
<li><strong>contentType</strong> - A regex pattern that must be matched before
SSI processing is applied. When crafting your own pattern, don't forget that a
mime content type may be followed by an optional character set in the form
"mime/type; charset=set" that you must take into account.  Default is
"text/x-server-parsed-html(;.*)?".</li>
<li><strong>debug</strong> - Debugging detail level for messages logged
by this servlet. Default 0.</li>
<li><strong>expires</strong> - The number of seconds before a page with SSI
directives will expire. Default behaviour is for all SSI directives to be
evaluated for every request.</li>
<li><strong>isVirtualWebappRelative</strong> - Should "virtual" SSI directive
paths be interpreted as relative to the context root, instead of the server
root? Default false.</li>
<li><strong>allowExec</strong> - Is the exec command enabled? Default is
false.</li>
</ul>
</p>

</blockquote></td></tr></table><table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Directives"><strong>Directives</strong></a></font></td></tr><tr><td><blockquote>
<p>Server Side Includes are invoked by embedding SSI directives in an HTML document
 whose type will be processed by the SSI servlet. The directives take the form of an HTML
 comment. The directive is replaced by the results of interpreting it before sending the
 page to the client. The general form of a directive is: </p>
<p> <code>&lt;!--#directive [parm=value] --&gt;</code></p>
<p>The directives are:
<ul>
<li>
<strong>config</strong> - <code>&lt;!--#config timefmt="%B %Y" --&gt;</code>
Used to set the format of dates and other items processed by SSI
</li>
<li>
<strong>echo</strong> -   <code>&lt;!--#echo var="VARIABLE_NAME" --&gt;</code>
will be replaced by the value of the variable.
</li>
<li>
<strong>exec</strong> -  Used to run commands on the host system.
</li>
<li>
<strong>include</strong> -  <code>&lt;!--#include virtual="file-name" --&gt;</code>
inserts the contents
</li>
<li>
<strong>flastmod</strong> - <code>&lt;!--#flastmod file="filename.shtml" --&gt;</code>
Returns the time that a file was lost modified.
</li>
<li>
<strong>fsize</strong> - <code>&lt;!--#fsize file="filename.shtml" --&gt;</code>
Returns the size of a file.
</li>
<li>
<strong>printenv</strong> - <code>&lt;!--#printenv --&gt;</code>
Returns the list of all the defined variables.
</li>
<li>
<strong>set</strong> - <code>&lt;!--#set var="foo" value="Bar" --&gt;</code>
is used to assign a value to a user-defined variable.
</li>
<li>
<strong>if elif endif else</strong> - Used to create conditional sections. For example:</li>
<code>&lt;!--#config timefmt="%A" --&gt;<br>
  &lt;!--#if expr="$DATE_LOCAL = /Monday/" --&gt;<br>
  &lt;p&gt;Meeting at 10:00 on Mondays&lt;/p&gt;<br>
  &lt;!--#elif expr="$DATE_LOCAL = /Friday/" --&gt;<br>
  &lt;p&gt;Turn in your time card&lt;/p&gt;<br>
  &lt;!--#else --&gt;<br>
  &lt;p&gt;Yoga class at noon.&lt;/p&gt;<br>
  &lt;!--#endif --&gt;</code>
 </ul>
</p>
See the
<p> <a href="http://httpd.apache.org/docs/howto/ssi.html#basicssidirectives">
Apache Introduction to SSI</a> for more information on using SSI directives.</p>
</blockquote></td></tr></table><table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Variables"><strong>Variables</strong></a></font></td></tr><tr><td><blockquote>
<p>The SSI servlet currently implements the following variables:
</p>
<table border="1">
<tr>
<th>Variable Name</th>
<th>Description</th>
</tr>

<tr>
<td>AUTH_TYPE</td>
<td>
  The type of authentication used for this user: BASIC, FORM, etc.</td>
</tr>

<tr>
<td>CONTENT_LENGTH</td>
<td>
  The length of the data (in bytes or the number of
  characters) passed from a form.</td>
</tr>

<tr>
<td>CONTENT_TYPE</td>
<td>
  The MIME type of the query data, such as "text/html".</td>
</tr>

<tr>
<td>DATE_GMT</td>
<td>
Current date and time in GMT</td>
</tr>

<tr>
<td>DATE_LOCAL</td>
<td>
Current date and time in the local time zone</td>
</tr>
<tr>
<td>DOCUMENT_NAME</td>
<td>
The current file</td>
</tr>
<tr>
<td>DOCUMENT_URI</td>
<td>
Virtual path to the file</td>
</tr>

<tr>
<td>GATEWAY_INTERFACE</td>
<td>
  The revision of the Common Gateway Interface that the
  server uses if enabled: "CGI/1.1".</td>
</tr>

<tr>
<td>HTTP_ACCEPT</td>
<td>
  A list of the MIME types that the client can accept.</td>
</tr>

<tr>
<td>HTTP_ACCEPT_ENCODING</td>
<td>
  A list of the compression types that the client can accept.</td>
</tr>

<tr>
<td>HTTP_ACCEPT_LANGUAGE</td>
<td>
  A list of the languages that the client can accept.</td>
</tr>
<tr>
<td>HTTP_CONNECTION</td>
<td>
  The way that the connection from the client is being managed:
  "Close" or "Keep-Alive".</td>
</tr>
<tr>
<td>HTTP_HOST</td>
<td>
  The web site that the client requested.</td>
</tr>
<tr>
<td>HTTP_REFERER</td>
<td>
  The URL of the document that the client linked from.</td>
</tr>
<tr>
<td>HTTP_USER_AGENT</td>
<td>
  The browser the client is using to issue the request.</td>
</tr>
<tr>
<td>LAST_MODIFIED</td>
<td>
Last modification date and time for current file</td>
</tr>
<tr>
<td>PATH_INFO</td>
<td>
  Extra path information passed to a servlet.</td>
</tr>
<tr>
<td>PATH_TRANSLATED</td>
<td>
  The translated version of the path given by the
  variable PATH_INFO.</td>
</tr>
<tr>
<td>QUERY_STRING</td>
<td>
The query string that follows the "?" in the URL.
</td>
</tr>
<tr>
<td>QUERY_STRING_UNESCAPED</td>
<td>
Undecoded query string with all shell metacharacters escaped
with "\"</td>
</tr>
<tr>
<td>REMOTE_ADDR</td>
<td>
  The remote IP address of the user making the request.</td>
</tr>
<tr>
<td>REMOTE_HOST</td>
<td>
  The remote hostname of the user making the request.</td>
</tr>
<tr>
<td>REMOTE_PORT</td>
<td>
  The port number at remote IP address of the user making the request.</td>
</tr>
<tr>
<td>REMOTE_USER</td>
<td>
  The authenticated name of the user.</td>
</tr>
<tr>
<td>REQUEST_METHOD</td>
<td>
  The method with which the information request was
  issued: "GET", "POST" etc.</td>
</tr>
<tr>
<td>REQUEST_URI</td>
<td>
  The web page originally requested by the client.</td>
</tr>
<tr>
<td>SCRIPT_FILENAME</td>
<td>
  The location of the current web page on the server.</td>
</tr>
<tr>
<td>SCRIPT_NAME</td>
<td>
  The name of the web page.</td>
</tr>
<tr>
<td>SERVER_ADDR</td>
<td>
  The server's IP address.</td>
</tr>
<tr>
<td>SERVER_NAME</td>
<td>
  The server's hostname or IP address.</td>
</tr>
<tr>
<td>SERVER_PORT</td>
<td>
  The port on which the server received the request.</td>
</tr>
<tr>
<td>SERVER_PROTOCOL</td>
<td>
  The protocol used by the server. E.g. "HTTP/1.1".</td>
</tr>
<tr>
<td>SERVER_SOFTWARE</td>
<td>
  The name and version of the server software that is
  answering the client request.</td>
</tr>
<tr>
<td>UNIQUE_ID</td>
<td>
  A token used to identify the current session if one
  has been established.</td>
</tr>
</table>
</blockquote></td></tr></table></td></tr><tr class="noPrint"><td width="20%" valign="top" nowrap class="noPrint"></td><td width="80%" valign="top" align="left"><table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="comments_section" id="comments_section"><strong>Comments</strong></a></font></td></tr><tr><td><blockquote><p class="notice"><strong>Notice: </strong>This comments section collects your suggestions
              on improving documentation for Apache Tomcat.<br><br>
              If you have trouble and need help, read
              <a href="http://tomcat.apache.org/findhelp.html">Find Help</a> page
              and ask your question on the tomcat-users
              <a href="http://tomcat.apache.org/lists.html">mailing list</a>.
              Do not ask such questions here. This is not a Q&amp;A section.<br><br>
              The Apache Comments System is explained <a href="./comments.html">here</a>.
              Comments may be removed by our moderators if they are either
              implemented or considered invalid/off-topic.</p><script type="text/javascript"><!--//--><![CDATA[//><!--
              var comments_shortname = 'tomcat';
              var comments_identifier = 'http://tomcat.apache.org/tomcat-7.0-doc/ssi-howto.html';
              (function(w, d) {
                  if (w.location.hostname.toLowerCase() == "tomcat.apache.org") {
                      d.write('<div id="comments_thread"><\/div>');
                      var s = d.createElement('script');
                      s.type = 'text/javascript';
                      s.async = true;
                      s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
                      (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
                  }
                  else {
                      d.write('<div id="comments_thread"><strong>Comments are disabled for this page at the moment.<\/strong><\/div>');
                  }
              })(window, document);
              //--><!]]></script></blockquote></td></tr></table></td></tr><!--FOOTER SEPARATOR--><tr><td colspan="2"><hr noshade size="1"></td></tr><!--PAGE FOOTER--><tr><td colspan="2"><div align="center"><font color="#525D76" size="-1"><em>
        Copyright &copy; 1999-2017, Apache Software Foundation
        </em></font></div></td></tr></table></body></html>