| <?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="default-servlet.html"> |
| |
| &project; |
| |
| <properties> |
| <author email="funkman@apache.org">Tim Funk</author> |
| <title>Default Servlet Reference</title> |
| </properties> |
| |
| <body> |
| |
| <section name="Table of Contents"> |
| <toc/> |
| </section> |
| |
| <section anchor="what" name="What is the DefaultServlet"> |
| <p> |
| The default servlet is the servlet which serves static resources as well |
| as serves the directory listings (if directory listings are enabled). |
| </p> |
| </section> |
| |
| <section anchor="where" name="Where is it declared?"> |
| <p> |
| It is declared globally in <i>$CATALINA_BASE/conf/web.xml</i>. |
| By default here is it's declaration: |
| </p> |
| <source><![CDATA[ <servlet> |
| <servlet-name>default</servlet-name> |
| <servlet-class> |
| org.apache.catalina.servlets.DefaultServlet |
| </servlet-class> |
| <init-param> |
| <param-name>debug</param-name> |
| <param-value>0</param-value> |
| </init-param> |
| <init-param> |
| <param-name>listings</param-name> |
| <param-value>false</param-value> |
| </init-param> |
| <load-on-startup>1</load-on-startup> |
| </servlet> |
| |
| ... |
| |
| <servlet-mapping> |
| <servlet-name>default</servlet-name> |
| <url-pattern>/</url-pattern> |
| </servlet-mapping>]]></source> |
| |
| So by default, the default servlet is loaded at webapp startup and |
| directory listings are disabled and debugging is turned off. |
| </section> |
| |
| <section anchor="change" name="What can I change?"> |
| <p> |
| The DefaultServlet allows the following initParamters: |
| </p> |
| |
| <properties> |
| <property name="debug"> |
| Debugging level. It is not very useful unless you are a tomcat |
| developer. As |
| of this writing, useful values are 0, 1, 11, 1000. [0] |
| </property> |
| <property name="listings"> |
| If no welcome file is present, can a directory listing be |
| shown? |
| value may be <b>true</b> or <b>false</b> [false] |
| <br /> |
| Welcome files are part of the servlet api. |
| <br /> |
| <b>WARNING:</b> Listings of directories containing many entries are |
| expensive. Multiple requests for large directory listings can consume |
| significant proportions of server resources. |
| </property> |
| <property name="gzip"> |
| If a gzipped version of a file exists (a file with <code>.gz</code> |
| appended to the file name located alongside the original file), Tomcat |
| will serve the gzipped file if the user agent supports gzip and this |
| option is enabled. [false] |
| <br /> |
| The file with the <code>.gz</code> extension will be accessible if |
| requested directly so if the original resource is protected with a |
| security constraint, the gzipped version must be similarly protected. |
| </property> |
| <property name="readmeFile"> |
| If a directory listing is presented, a readme file may also |
| be presented with the listing. This file is inserted as is |
| so it may contain HTML. |
| </property> |
| <property name="globalXsltFile"> |
| If you wish to customize your directory listing, you |
| can use an XSL transformation. This value is a relative file name (to |
| either $CATALINA_BASE/conf/ or $CATALINA_HOME/conf/) which will be used |
| for all directory listings. This can be overridden per context and/or |
| per directory. See <strong>contextXsltFile</strong> and |
| <strong>localXsltFile</strong> below. The format of the xml is shown |
| below. |
| </property> |
| <property name="contextXsltFile"> |
| You may also customize your directory listing by context by |
| configuring <code>contextXsltFile</code>. This must be a context |
| relative path (e.g.: <code>/path/to/context.xslt</code>) to a file with |
| a <code>.xsl</code> or <code>.xslt</code> extension. This overrides |
| <code>globalXsltFile</code>. If this value is present but a file does |
| not exist, then <code>globalXsltFile</code> will be used. If |
| <code>globalXsltFile</code> does not exist, then the default |
| directory listing will be shown. |
| </property> |
| <property name="localXsltFile"> |
| You may also customize your directory listing by directory by |
| configuring <code>localXsltFile</code>. This must be a file in the |
| directory where the listing will take place to with a |
| <code>.xsl</code> or <code>.xslt</code> extension. This overrides |
| <code>globalXsltFile</code> and <code>contextXsltFile</code>. If this |
| value is present but a file does not exist, then |
| <code>contextXsltFile</code> will be used. If |
| <code>contextXsltFile</code> does not exist, then |
| <code>globalXsltFile</code> will be used. If |
| <code>globalXsltFile</code> does not exist, then the default |
| directory listing will be shown. |
| </property> |
| <property name="input"> |
| Input buffer size (in bytes) when reading |
| resources to be served. [2048] |
| </property> |
| <property name="output"> |
| Output buffer size (in bytes) when writing |
| resources to be served. [2048] |
| </property> |
| <property name="readonly"> |
| Is this context "read only", so HTTP commands like PUT and |
| DELETE are rejected? [true] |
| </property> |
| <property name="fileEncoding"> |
| File encoding to be used when reading static resources. |
| [platform default] |
| </property> |
| <property name="sendfileSize"> |
| If the connector used supports sendfile, this represents the minimal |
| file size in KB for which sendfile will be used. Use a negative value |
| to always disable sendfile. [48] |
| </property> |
| <property name="useAcceptRanges"> |
| If true, the Accept-Ranges header will be set when appropriate for the |
| response. [true] |
| </property> |
| <property name="showServerInfo"> |
| Should server information be presented in the response sent to clients |
| when directory listing is enabled. [true] |
| </property> |
| </properties> |
| </section> |
| |
| <section anchor="dir" name="How do I customize directory listings?"> |
| <p>You can override DefaultServlet with you own implementation and use that |
| in your web.xml declaration. If you |
| can understand what was just said, we will assume you can read the code |
| to DefaultServlet servlet and make the appropriate adjustments. (If not, |
| then that method isn't for you) |
| </p> |
| <p> |
| You can use either <code>localXsltFile</code> or |
| <code>globalXsltFile</code> and DefaultServlet will create |
| an xml document and run it through an xsl transformation based |
| on the values provided in <code>localXsltFile</code> and |
| <code>globalXsltFile</code>. <code>localXsltFile</code> is first |
| checked, followed by <code>globalXsltFile</code>, then default |
| behaviors takes place. |
| </p> |
| |
| <p> |
| Format: |
| </p> |
| <source><![CDATA[ <listing> |
| <entries> |
| <entry type='file|dir' urlPath='aPath' size='###' date='gmt date'> |
| fileName1 |
| </entry> |
| <entry type='file|dir' urlPath='aPath' size='###' date='gmt date'> |
| fileName2 |
| </entry> |
| ... |
| </entries> |
| <readme></readme> |
| </listing>]]></source> |
| <ul> |
| <li>size will be missing if <code>type='dir'</code></li> |
| <li>Readme is a CDATA entry</li> |
| </ul> |
| |
| <p> |
| The following is a sample xsl file which mimics the default tomcat behavior: |
| </p> |
| <source><![CDATA[<?xml version="1.0" encoding="UTF-8"?> |
| |
| <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" |
| version="3.0"> |
| |
| <xsl:output method="html" html-version="5.0" |
| encoding="UTF-8" indent="no" |
| doctype-system="about:legacy-compat"/> |
| |
| <xsl:template match="listing"> |
| <html> |
| <head> |
| <title> |
| Sample Directory Listing For |
| <xsl:value-of select="@directory"/> |
| </title> |
| <style> |
| h1 {color : white;background-color : #0086b2;} |
| h3 {color : white;background-color : #0086b2;} |
| body {font-family : sans-serif,Arial,Tahoma; |
| color : black;background-color : white;} |
| b {color : white;background-color : #0086b2;} |
| a {color : black;} HR{color : #0086b2;} |
| table td { padding: 5px; } |
| </style> |
| </head> |
| <body> |
| <h1>Sample Directory Listing For |
| <xsl:value-of select="@directory"/> |
| </h1> |
| <hr style="height: 1px;" /> |
| <table style="width: 100%;"> |
| <tr> |
| <th style="text-align: left;">Filename</th> |
| <th style="text-align: center;">Size</th> |
| <th style="text-align: right;">Last Modified</th> |
| </tr> |
| <xsl:apply-templates select="entries"/> |
| </table> |
| <xsl:apply-templates select="readme"/> |
| <hr style="height: 1px;" /> |
| <h3>Apache Tomcat/<version-major-minor/></h3> |
| </body> |
| </html> |
| </xsl:template> |
| |
| |
| <xsl:template match="entries"> |
| <xsl:apply-templates select="entry"/> |
| </xsl:template> |
| |
| <xsl:template match="readme"> |
| <hr style="height: 1px;" /> |
| <pre><xsl:apply-templates/></pre> |
| </xsl:template> |
| |
| <xsl:template match="entry"> |
| <tr> |
| <td style="text-align: left;"> |
| <xsl:variable name="urlPath" select="@urlPath"/> |
| <a href="{$urlPath}"> |
| <pre><xsl:apply-templates/></pre> |
| </a> |
| </td> |
| <td style="text-align: right;"> |
| <pre><xsl:value-of select="@size"/></pre> |
| </td> |
| <td style="text-align: right;"> |
| <pre><xsl:value-of select="@date"/></pre> |
| </td> |
| </tr> |
| </xsl:template> |
| |
| </xsl:stylesheet>]]></source> |
| |
| </section> |
| |
| <section anchor="secure" name="How do I secure directory listings?"> |
| Use web.xml in each individual webapp. See the security section of the |
| Servlet specification. |
| |
| </section> |
| |
| </body> |
| |
| </document> |