Server : Apache/2.4.43 (Win64) OpenSSL/1.1.1g PHP/7.4.6 System : Windows NT USER-PC 6.1 build 7601 (Windows 7 Professional Edition Service Pack 1) AMD64 User : User ( 0) PHP Version : 7.4.6 Disable Function : NONE Directory : C:/xampp/tomcat/webapps/docs/funcspecs/ |
<html><head><META http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><title>Catalina Functional Specifications (7.0.103) - Default Servlet</title><meta name="author" content="Craig McClanahan"><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="https://tomcat.apache.org/"><img src="../images/tomcat.gif" align="right" alt=" Catalina Functional Specifications " border="0"></a></td><td><h1><font face="arial,helvetica,sanserif">Apache Tomcat 7</font></h1><font face="arial,helvetica,sanserif">Version 7.0.103, Mar 16 2020</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="index.html">Functional Specs</a></li><li><a href="https://wiki.apache.org/tomcat/FAQ">FAQ</a></li><li><a href="#comments_section">User Comments</a></li></ul><p><strong>Administrative Apps</strong></p><ul><li><a href="fs-admin-apps.html">Overall Requirements</a></li><li><a href="mbean-names.html">Tomcat MBean Names</a></li><li><a href="fs-admin-objects.html">Administered Objects</a></li><li><a href="fs-admin-opers.html">Supported Operations</a></li></ul><p><strong>Internal Servlets</strong></p><ul><li><a href="fs-default.html">Default Servlet</a></li></ul><p><strong>Realm Implementations</strong></p><ul><li><a href="fs-jdbc-realm.html">JDBC Realm</a></li><li><a href="fs-jndi-realm.html">JNDI Realm</a></li><li><a href="fs-memory-realm.html">Memory Realm</a></li></ul></td><!--RIGHT SIDE MAIN BODY--><td width="80%" valign="top" align="left" id="mainBody"><h1>Default Servlet</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="#Overview">Overview</a><ol><li><a href="#Introduction">Introduction</a></li><li><a href="#External_Specifications">External Specifications</a></li><li><a href="#Implementation_Requirements">Implementation Requirements</a></li></ol></li><li><a href="#Dependencies">Dependencies</a><ol><li><a href="#Environmental_Dependencies">Environmental Dependencies</a></li><li><a href="#Container_Dependencies">Container Dependencies</a></li></ol></li><li><a href="#Functionality">Functionality</a><ol><li><a href="#Initialization_Functionality">Initialization Functionality</a></li><li><a href="#Per-Request_Functionality">Per-Request Functionality</a></li><li><a href="#Finalization_Functionality">Finalization Functionality</a></li></ol></li><li><a href="#Testable_Assertions">Testable Assertions</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="Overview"><strong>Overview</strong></a></font></td></tr><tr><td><blockquote> <table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#828DA6"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Introduction"><strong>Introduction</strong></a></font></td></tr><tr><td><blockquote> <p>The purpose of the <strong>Default Servlet</strong> is to serve static resources of a web application in response to client requests. As the name implies, it is generally configured as the "default" servlet for a web application, by being mapped to a URL pattern "/".</p> </blockquote></td></tr></table> <table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#828DA6"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="External Specifications"><!--()--></a><a name="External_Specifications"><strong>External Specifications</strong></a></font></td></tr><tr><td><blockquote> <p>The following external specifications have provisions which partially define the correct behavior of the default servlet:</p> <ul> <li><a href="http://java.sun.com/products/servlet/download.html"> Servlet Specification</a> (Version 2.3 PFD2)</li> <li><a href="https://www.rfc-editor.org/rfc/rfc2046.txt">Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types</a></li> <li><a href="https://www.rfc-editor.org/rfc/rfc2616.txt">Hypertext Transfer Protocol -- HTTP/1.1</a></li> </ul> </blockquote></td></tr></table> <table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#828DA6"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Implementation Requirements"><!--()--></a><a name="Implementation_Requirements"><strong>Implementation Requirements</strong></a></font></td></tr><tr><td><blockquote> <p>The implementation of this functionality shall conform to the following requirements:</p> <ul> <li>Must be implemented as a servlet.</li> <li>Must support configurable parameters for debugging detail level, input buffer size, output buffer size, whether or not to produce directory listings when no welcome file is present, and whether or not modifications are supported via DELETE and PUT.</li> <li>Log debugging and operational messages (suitably internationalized) via the <code>getServletContext().log()</code> method.</li> </ul> </blockquote></td></tr></table> </blockquote></td></tr></table><table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Dependencies"><strong>Dependencies</strong></a></font></td></tr><tr><td><blockquote> <table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#828DA6"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Environmental Dependencies"><!--()--></a><a name="Environmental_Dependencies"><strong>Environmental Dependencies</strong></a></font></td></tr><tr><td><blockquote> <p>The following environmental dependencies must be met in order for the default servlet to operate correctly:</p> <ul> <li>The default servlet must be registered in the application deployment descriptor (or the default deployment descriptor in file <code>$CATALINA_BASE/conf/web.xml</code>) using a "default servlet" servlet mapping, signified by URL pattern "/".</li> </ul> </blockquote></td></tr></table> <table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#828DA6"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Container Dependencies"><!--()--></a><a name="Container_Dependencies"><strong>Container Dependencies</strong></a></font></td></tr><tr><td><blockquote> <p>Correct operation of the default servlet depends on the following specific features of the surrounding container:</p> <ul> <li>The container shall provide a servlet context attribute that lists the welcome file names that have been defined for this web application.</li> <li>The container shall provide a servlet context attribute that contains a <code>javax.naming.directory.DirContext</code> implementation representing the static resources of this web application.</li> </ul> </blockquote></td></tr></table> </blockquote></td></tr></table><table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Functionality"><strong>Functionality</strong></a></font></td></tr><tr><td><blockquote> <table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#828DA6"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Initialization Functionality"><!--()--></a><a name="Initialization_Functionality"><strong>Initialization Functionality</strong></a></font></td></tr><tr><td><blockquote> <p>The following processing must be performed when the <code>init()</code> method of the default servlet is called:</p> <ul> <li>Process and sanity check configuration parameters.</li> </ul> </blockquote></td></tr></table> <table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#828DA6"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Per-Request Functionality"><!--()--></a><a name="Per-Request_Functionality"><strong>Per-Request Functionality</strong></a></font></td></tr><tr><td><blockquote> <p>For all HTTP request methods, the resource path is determined from the path information provided to this request, either as request attribute <code>javax.servlet.include.path_info</code> (for a request dispatcher access to a static resource) or by calling <code>request.getPathInfo()</code> directly.</p> <p>On each HTTP DELETE request processed by this servlet, the following processing shall be performed:</p> <ul> <li>If modifications to the static resources are not allowed (set by a configuration parameter), return HTTP status 403 (forbidden).</li> <li>If an attempt is made to delete a resource from <code>/META-INF</code> or <code>/WEB-INF</code>, return HTTP status 403 (forbidden).</li> <li>If the requested resource does not exist, return HTTP status 404 (not found)</li> <li>Unbind the resource from the directory context containing the static resources for this web application. If successful, return HTTP status 204 (no content). Otherwise, return HTTP status 405 (method not allowed).</li> </ul> <p>On each HTTP GET request processed by this servlet, the following processing shall be performed:</p> <ul> <li>If the request is for a resource under <code>/META-INF</code> or <code>/WEB-INF</code>, return HTTP status 404 (not found).</li> <li>If the requested resource does not exist, return HTTP status 404 (not found).</li> <li>If the requested resource is not a directory, but the resource path ends in "/" or "\", return HTTP status 404 (not found).</li> <li>If the requested resource is a directory: <ul> <li>If the request path does not end with "/", redirect to a corresponding path with "/" appended so that relative references in welcome files are resolved correctly.</li> <li>If one of the specified welcome files exists, redirect to the path for that welcome file so that it will be served explicitly. </li> </ul></li> <li>If the request being processed contains an <code>If-Range</code> header, perform the processing described in the HTTP/1.1 specification to determine whether the client's information is up to date.</li> <li>Determine the content type of the response, by looking up the corresponding MIME type in our servlet context.</li> <li>If the requested resource is a directory: <ul> <li>If directory listings are suppressed, return HTTP status 404 (not found).</li> <li>Set the content type to <code>text/html</code>.</li> </ul></li> <li>Determine the range(s) to be returned, based on the existence of any <code>If-Range</code> and <code>Range</code> headers.</li> <li>If the requested resource is a directory, include an <code>ETag</code> header in the response, with the value calculated based on the content of the directory.</li> <li>Include a <code>Last-Modified</code> header in the response documenting the date/time that the resource was last modified.</li> <li>Unless we are processing a HEAD request, include the appropriate content (or content ranges) in the response.</li> </ul> <p>On each HTTP HEAD request processed by this servlet, the following processing shall be performed:</p> <ul> <li>Processed identically to an HTTP GET request, except that the data content is not transmitted after the headers.</li> </ul> <p>On each HTTP POST request processed by this servlet, the following processing shall be performed:</p> <ul> <li>Processed identically to an HTTP GET request.</li> </ul> <p>On each HTTP PUT request processed by this servlet, the following processing shall be performed:</p> <ul> <li>If modifications to the static resources are not allowed (set by a configuration parameter), return HTTP status 403 (forbidden).</li> <li>If an attempt is made to delete a resource from <code>/META-INF</code> or <code>/WEB-INF</code>, return HTTP status 403 (forbidden).</li> <li>Create a new resource from the body of this request.</li> <li>Bind or rebind the specified path to the new resource (depending on whether it currently exists or not). Return HTTP status as follows: <ul> <li>If binding was unsuccessful, return HTTP status 409 (conflict). </li> <li>If binding was successful and the resource did not previously exist, return HTTP status 201 (created).</li> <li>If binding was successful and the resource previously existed, return HTTP status 204 (no content).</li> </ul></li> </ul> </blockquote></td></tr></table> <table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#828DA6"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Finalization Functionality"><!--()--></a><a name="Finalization_Functionality"><strong>Finalization Functionality</strong></a></font></td></tr><tr><td><blockquote> <p>No specific processing is required when the <code>destroy()</code> method is called:</p> </blockquote></td></tr></table> </blockquote></td></tr></table><table border="0" cellspacing="0" cellpadding="2"><tr><td bgcolor="#525D76"><font color="#ffffff" face="arial,helvetica.sanserif"><a name="Testable Assertions"><!--()--></a><a name="Testable_Assertions"><strong>Testable Assertions</strong></a></font></td></tr><tr><td><blockquote> <p>In addition to the assertions implied by the functionality requirements listed above, the following additional assertions shall be tested to validate the behavior of the default servlet:</p> <ul> <li>Requests for resources that do not exist in the web application must return HTTP status 404 (not found).</li> <li>The default servlet must operate identically for web applications that are run out of a WAR file directly, or from an unpacked directory structure.</li> <li>If the web application is running out of an unpacked directory structure, the default servlet must recognize cases where the resource has been updated through external means.</li> </ul> </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 © 1999-2020, Apache Software Foundation </em></font></div></td></tr></table></body></html>