<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<!DOCTYPE document [
  <!ENTITY project SYSTEM "project.xml">
]>
<document url="ssi-howto.html">

&project;

<properties>
<author email="glenn@apache.org">Glenn L. Nielsen</author>
<title>SSI How To</title>
</properties>

<body>

<section name="Table of Contents">
<toc/>
</section>

<section name="Introduction">

<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="https://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>
</section>

<section name="Installation">

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

</section>

<section name="Servlet Configuration">

<p>There are several servlet init parameters which can be used to
configure the behaviour of the SSI servlet.</p>
<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>


</section>

<section name="Filter Configuration">

<p>There are several filter init parameters which can be used to
configure the behaviour of the SSI filter.</p>
<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>


</section>

<section name="Directives">
<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:</p>
<ul>
<li>
<strong>config</strong> - <code>&lt;!--#config errmsg=&quot;Error occurred&quot; sizefmt=&quot;abbrev&quot;
timefmt=&quot;%B %Y&quot; --&gt;</code>
Used to set SSI error message, the format of dates and file sizes processed by SSI.<br/>
All are optional but at least one must be used. The available options are as follows:
<br/>
<strong>errmsg</strong> - error message used for SSI errors<br/>
<strong>sizefmt</strong> - format used for sizes in the <strong>fsize</strong> directive<br/>
<strong>timefmt</strong> - format used for timestamps in the <strong>flastmod</strong> directive<br/>
</li>
<li>
<strong>echo</strong> -   <code>&lt;!--#echo var=&quot;VARIABLE_NAME&quot; encoding=&quot;entity&quot; --&gt;</code>
will be replaced by the value of the variable.
<br/>
The optional <strong>encoding</strong> parameter specifies the type of encoding to use.
Valid values are <strong>entity</strong> (default), <strong>url</strong> or <strong>none</strong>.
NOTE: Using an encoding other than <strong>entity</strong> can lead to security issues.
</li>
<li>
<strong>exec</strong> - <code>&lt;!--#exec cmd=&quot;file-name&quot; --&gt;</code>
Used to run commands on the host system.
</li>
<li>
<strong>exec</strong> - <code>&lt;!--#exec cgi=&quot;file-name&quot; --&gt;</code>
This acts the same as the <strong>include virtual</strong> directive, and doesn't actually execute any commands.
</li>
<li>
<strong>include</strong> -  <code>&lt;!--#include file=&quot;file-name&quot; --&gt;</code>
inserts the contents. The path is interpreted relative to the document where this directive
is being used, and IS NOT a &quot;virtual&quot; path relative to either the context root or the server root.
</li>
<li>
<strong>include</strong> -  <code>&lt;!--#include virtual=&quot;file-name&quot; --&gt;</code>
inserts the contents. The path is interpreted as a &quot;virtual&quot; path which is
relative to either the context root or the server root (depending on the <strong>isVirtualWebappRelative</strong>
parameter).
</li>
<li>
<strong>flastmod</strong> - <code>&lt;!--#flastmod file=&quot;filename.shtml&quot; --&gt;</code>
Returns the time that a file was last modified. The path is interpreted relative to the document where this directive
is being used, and IS NOT a &quot;virtual&quot; path relative to either the context root or the server root.
</li>
<li>
<strong>flastmod</strong> - <code>&lt;!--#flastmod virtual=&quot;filename.shtml&quot; --&gt;</code>
Returns the time that a file was last modified. The path is interpreted as a &quot;virtual&quot; path which is
relative to either the context root or the server root (depending on the <strong>isVirtualWebappRelative</strong>
parameter).
</li>
<li>
<strong>fsize</strong> - <code>&lt;!--#fsize file=&quot;filename.shtml&quot; --&gt;</code>
Returns the size of a file. The path is interpreted relative to the document where this directive
is being used, and IS NOT a &quot;virtual&quot; path relative to either the context root or the server root.
</li>
<li>
<strong>fsize</strong> - <code>&lt;!--#fsize virtual=&quot;filename.shtml&quot; --&gt;</code>
Returns the size of a file. The path is interpreted as a &quot;virtual&quot; path which is
relative to either the context root or the server root (depending on the <strong>isVirtualWebappRelative</strong>
parameter).
</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:
<source><![CDATA[<!--#config timefmt="%A" -->
<!--#if expr="$DATE_LOCAL = /Monday/" -->
<p>Meeting at 10:00 on Mondays</p>
<!--#elif expr="$DATE_LOCAL = /Friday/" -->
<p>Turn in your time card</p>
<!--#else -->
<p>Yoga class at noon.</p>
<!--#endif -->]]></source>
</li>
</ul>
<p>
See the
<a href="https://httpd.apache.org/docs/howto/ssi.html#basicssidirectives">
Apache Introduction to SSI</a> for more information on using SSI directives.</p>
</section>

<section name="Variables">
<p>
SSI variables are implemented via request attributes on the <b>javax.servlet.ServletRequest</b> object
and are not limited to the SSI servlet. Variables starting with the names
"java.", "javax.", "sun" or "org.apache.catalina.ssi.SSIMediator." are reserved
and cannot be used.
</p>
<p>The SSI servlet currently implements the following variables:
</p>
<table class="defaultTable">
<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 &quot;text/html&quot;.</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: &quot;CGI/1.1&quot;.</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:
  &quot;Close&quot; or &quot;Keep-Alive&quot;.</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 &quot;?&quot; in the URL.
</td>
</tr>
<tr>
<td>QUERY_STRING_UNESCAPED</td>
<td>
Undecoded query string with all shell metacharacters escaped
with &quot;\&quot;</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: &quot;GET&quot;, &quot;POST&quot; 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. &quot;HTTP/1.1&quot;.</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>
</section>

</body>

</document>
