Сервлет по умолчанию (Default Servlet)#
Сервлет по умолчанию — это сервлет, который обслуживает статические ресурсы, а также предоставляет список содержимого каталогов (если включено отображение списка каталогов). Он глобально объявлен в файле $CATALINA_BASE/conf/web.xml.
Вид по умолчанию:
<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>
В данном примере загрузка происходит при запуске веб-приложения. Отображение списка каталогов отключено, а отладка выключена.
Изменение настроек#
Если требуется изменить настройки DefaultServlet для конкретного приложения, переопределите конфигурацию по умолчанию, повторно объявив DefaultServlet в файле /WEB-INF/web.xml. Однако это может вызвать проблемы при попытке развернуть приложение на другом контейнере, так как класс DefaultServlet не будет распознан. Чтобы обойти эту проблему, можно использовать специфичный для Tomcat файл дескриптора развертывания /WEB-INF/tomcat-web.xml. Его формат идентичен /WEB-INF/web.xml. Он переопределяет настройки по умолчанию, но не те, что указаны в /WEB-INF/web.xml, и будет обработан только при развертывании приложения на Tomcat.
DefaultServlet позволяет настраивать следующие параметры инициализации:
Параметр |
Описание |
|---|---|
|
Уровень отладки |
|
Отображение списка каталогов, если файл приветствия отсутствует. Возможные значения - |
|
Tomcat загружает сжатый файл, если пользовательский агент поддерживает соответствующее кодирование содержимого ( |
|
Отображение файла |
|
Настройка отображения списка каталогов |
|
Настройка XSL-преобразования для |
|
Настройка XSL-преобразования для каталога |
|
Размер буфера ввода (в байтах) при чтении ресурсов |
|
Размер буфера вывода (в байтах) при записи ресурсов |
|
Установка значения для |
|
Кодировка файла, используемая при чтении статических ресурсов |
|
Использование метки порядка байтов (BOM) для определения кодировки файла вместо |
|
Минимальный размер файла в КиБ, для которого будет использоваться |
|
Установка заголовка Accept-Ranges |
|
Вывод информации о сервере в ответе, если включено отображение списка каталогов |
|
Сортировка списка каталогов |
|
Отображение всех каталогов перед файлами |
|
Обработка HTTP PUT-запроса с заголовком Content-Range как частичный PUT |
Настройка отображения списка каталогов#
Для настройки отображения списка каталогов выполните следующие действия:
Замените
DefaultServletсобственной реализацией и используйте ее вweb.xml.Используйте
localXsltFile,contextXsltFileилиglobalXsltFile.DefaultServletсоздаст XML-документ, который будет преобразован с помощью XSLT на основе значений, указанных в XSLT-файле.
Формат XML:
<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>
Пример XSLT-файла, имитирующего поведение Tomcat по умолчанию:
<?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/9.0</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>