Class FileHandler
- All Implemented Interfaces:
Handler
The following configuration parameters are used:
- root
- property for document root (.) Since the document root is common to many handlers, if no root property is found with the supplied prefix, then the root property with the empty prefix ("") is used instead. This allows many handlers to share the common property.
- default
- The document to deliver if the URL ends in "/". (defaults to index.html.)
- prefix
- Only url's that start with this are allowed.
defaults to "". The prefix is removed from the
url before looking it up in the file system.
So, if prefix is
/foothen the the file[root]/foo/bar.htmlwill be delivered in response to the url/bar.html. - mime
- property for mime type For each file suffix .XX, the property mime.XX is used to determine the mime type. If no property exists (or its value is "unknown", the document will not be delivered.
- mimePatterns
- List of glob patterns that match file name suffixes
for matching mime types. For example:
mimePatterns=.x* .a? mime.x*=text/xml mime.a?=application/octet-streamThe types corrosponding to mime patterns are searched for in mimePattern order, first looking forprefix.mime.patternthenmime.pattern. If neither property exists, then the type is invalid. - getOnly
- If defined, only "GET" requests will be processed. By default, all request types are handled. (Note: this is the inverse of the previous policy, defined by the undocumented "allow" parameter).
The FileHandler sets the following entries in the request properties as a side-effect:
- fileName
- The absolute path of the file that couldn't be found.
- DirectoryName
- If the URL specified is a directory name, its absolute path is placed here.
- lastModified
- The Time stamp of the last modified time
This handler supports a subset of the http range
header of the form
range bytes=[start]-[end], where start and end
are byte positions in the file, starting at zero. A large or
missing end value is treated as the end of the file. If a valid
rangeheader is found, the appropriate
content-range header is returned, along with the partial
contents of the file.
- Version:
- 2.8
- Author:
- Stephen Uhler
-
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic StringgetMimeType(String name, Properties props, String prefix) Get the mime type based on the suffix of a String.booleanInitialize the file handler.booleanFind, read, and deliver via http the requested file.static voidSend a file as a response.static voidsetModified(Properties props, long mod) Set the "lastModified" request property.static StringHelper function to convert an url into a pathname.
-
Field Details
-
MIME
- See Also:
-
UNKNOWN
- See Also:
-
ROOT
- See Also:
-
urlPrefix
-
-
Constructor Details
-
FileHandler
public FileHandler()
-
-
Method Details
-
init
Initialize the file handler.- Specified by:
initin interfaceHandler- Parameters:
server- The HTTP server that created thisHandler. TypicalHandlers will useServer.propsto obtain run-time configuration information.prefix- The handlers name. The string thisHandlermay prepend to all of the keys that it uses to extract configuration information fromServer.props. This is set (by theServerandChainHandler) to help avoid configuration parameter namespace collisions.- Returns:
- The file handler always returns true.
-
respond
Find, read, and deliver via http the requested file. The server propertyrootis used as the document root. The document root is recalculated for each request, so an upstream handler may change it for that request. For URL's ending with "/", the server propertydefault(normally index.html) is automatically appended. If the file suffix is not found as a server propertymime.suffix, the file is not delivered.- Specified by:
respondin interfaceHandler- Parameters:
request- TheRequestobject that represents the HTTP request.- Returns:
trueif the request was handled. A request was handled if a response was supplied to the client, typically by callingRequest.sendResponse()orRequest.sendError.- Throws:
IOException- if there was an I/O error while sending the response to the client. Typically, in that case, theServerwill (try to) send an error message to the client and then close the client's connection.The
IOExceptionshould not be used to silently ignore problems such as being unable to access some server-side resource (for example getting aFileNotFoundExceptiondue to not being able to open a file). In that case, theHandler's duty is to turn thatIOExceptioninto a HTTP response indicating, in this case, that a file could not be found.
-
getMimeType
Get the mime type based on the suffix of a String. The suffix (e.g. text after the last ".") is used to lookup the entry "prefix.mime.[suffix]" then "mime.[suffix]" inprops. If neither entry is found, then mime glob pattern are used, if available. If there is no suffix, then the empty string is used.If the mime type is set to the special string "unknown", then the type is unknown. This allows specific types to be undefined when glob patterns are used.
If the property "prefix.mimePatterns" (or "mimePatterns") exists, then it specifies a white-space delimited set of glob style patterns for matching file suffixes to types. If a match for a specific file suffix fails, then the property "mime.[pattern]" is used for type comparisons.
The entries:
mimePatterns=*ml mime.*ml=text/xml
would associate the type "text/xml" with the file foo.html, foo.xml and foo.dhtml. The entries:mimePatterns=* mime*=application/octet-stream mime.config=unknown
Would set the types for all file types not otherwise defined to be "application/octet-stream", except that files ending in ".config" would have no type (e.g. they would generate a file not found error).- Parameters:
name- The string to compute the mime type forprops- The properties to look up the mime types in.- Returns:
- The type (or null if not found).
-
urlToPath
Helper function to convert an url into a pathname.- Collapse all %XX sequences.
- Ignore missing initial "/".
- Collapse all "/..", "/.", and "//" sequences.
URL(String)collapses all "/.." (and "/.") sequences, except for a trailing "/.." (or "/."), which would lead to the possibility of escaping from the document root.File.getPathin jdk-1.1 leaves all the "//" constructs in, but it collapses them in jdk-1.2, so we have to always take it out ourselves, just to be sure.- Parameters:
url- The file path from the URL (that is, minus the "http://host" part). May benull.- Returns:
- The path that corresponds to the URL. The returned value begins with "/". The caller can concatenate this path onto the end of some document root.
-
sendFile
Send a file as a response.- Parameters:
request- The request objecttype- The mime type of the filefileHandle- The file to output- Throws:
IOException
-
setModified
Set the "lastModified" request property. If already set, use the most recent value.- Parameters:
props- Where to find the "lastModified" propertymod- The modidied time, in ms since the epoch
-