Default Servlet Reference

Table of Contents

What is the DefaultServlet

缺省的Servlet是既提供静态资源又提供目录列表的Servlet(如果启用了目录列表).

Where is it declared?

. 它在全局声明. 默认情况下,它是声明:

  <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> 
因此,默认情况下,默认servlet在webapp启动时加载,并且目录列表被禁用,调试被关闭.

What can I change?

DefaultServlet允许以下initParamters:

Property Description
debug 调试级别. 除非您是tomcat开发人员,否则它不是很有用. 在撰写本文时,有用的值为0、1、11、1000.[0]
listings 如果没有欢迎文件,是否可以显示目录列表? 值可以是true或false [false]
欢迎文件是servlet API的一部分.
警告:包含许多条目的目录清单很昂贵. 大型目录列表的多个请求会消耗大量服务器资源.
precompressed 如果存在文件的预压缩版本(在原始文件旁边的文件名后附加了.br.gz的文件),并且如果用户代理支持匹配的内容编码(br或gzip),则Tomcat将提供该预压缩文件.此选项已启用. [假]
如果直接请求,则可以访问带有.br.gz扩展名的预压缩文件,因此,如果原始资源受到安全约束的保护,则预压缩版本也必须受到类似的保护.
也可以配置预压缩格式的列表. 语法是[content-encoding]=[file-extension]对的逗号分隔列表. 例如: br=.br,gzip=.gz,bzip2=.bz2 . 如果指定了多种格式,则客户端支持多个格式,并且客户端不表达首选项,格式列表的顺序将被视为服务器的首选项顺序,并用于选择返回的格式.
readmeFile 如果提供了目录列表,则自述文件也可能与列表一起提供. 该文件按原样插入,因此可能包含HTML.
globalXsltFile 如果您希望自定义目录列表,则可以使用XSL转换. 该值是一个相对文件名(到$ CATALINA_BASE / conf /或$ CATALINA_HOME / conf /),将用于所有目录列表. 可以按上下文和/或每个目录覆盖. 请参阅下面的contextXsltFilelocalXsltFile . xml的格式如下所示.
contextXsltFile 您还可以通过配置contextXsltFile通过上下文来自定义目录列表. 这必须是扩展名为.xsl.xslt的文件的上下文相关路径(例如: /path/to/context.xslt ). 这将覆盖globalXsltFile . 如果存在此值,但文件不存在,则将使用globalXsltFile . 如果globalXsltFile不存在,则将显示默认目录列表.
localXsltFile 您还可以通过配置localXsltFile按目录自定义目录列表. 该目录必须是目录所在目录中的文件,扩展名为.xsl.xslt . 这将覆盖globalXsltFilecontextXsltFile . 如果此值存在但文件不存在,则将使用contextXsltFile . 如果contextXsltFile不存在,则将使用globalXsltFile . 如果globalXsltFile不存在,则将显示默认目录列表.
input 读取要服务的资源时的输入缓冲区大小(以字节为单位). [2048]
output 写入要服务的资源时的输出缓冲区大小(以字节为单位). [2048]
readonly 此上下文是"只读"的,因此拒绝了HTTP命令(例如PUT和DELETE)? [真正]
fileEncoding File encoding to be used when reading static resources. [platform default]
sendfileSize 如果使用的连接器支持sendfile,则这表示将使用sendfile的最小文件大小(以KB为单位). 使用负值可始终禁用发送文件. [48]
useAcceptRanges 如果为true,则在适合响应时将设置Accept-Ranges标头. [真正]
showServerInfo 启用目录列表后,应在发送给客户端的响应中显示服务器信息. [真正]
sortListings 服务器应将目录中的列表排序. [假]
sortDirectoriesFirst 服务器应在所有文件之前列出所有目录. [假]

How do I customize directory listings?

您可以使用自己的实现覆盖DefaultServlet,并在web.xml声明中使用它. 如果您能理解所讲的内容,我们将假定您可以阅读DefaultServlet servlet的代码并进行适当的调整. (如果没有,那么该方法不适合您)

您可以使用localXsltFileglobalXsltFile ,DefaultServlet将创建一个xml文档,并根据localXsltFileglobalXsltFile提供的值通过xsl转换运行它. localXsltFile首先检查,其次是globalXsltFile ,则默认行为发生.

Format:

    <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>
  • 如果type='dir'大小将丢失
  • 自述文件是CDATA条目

以下是模拟默认tomcat行为的示例xsl文件:

<?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/8.5</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>

How do I secure directory listings?

在每个单独的Web应用程序中使用web.xml. 请参阅Servlet规范的安全性部分.

by  ICOPY.SITE