/*
 * Copyright 2014 Red Hat, Inc.
 *
 *  All rights reserved. This program and the accompanying materials
 *  are made available under the terms of the Eclipse Public License v1.0
 *  and Apache License v2.0 which accompanies this distribution.
 *
 *  The Eclipse Public License is available at
 *  http://www.eclipse.org/legal/epl-v10.html
 *
 *  The Apache License v2.0 is available at
 *  http://www.opensource.org/licenses/apache2.0.php
 *
 *  You may elect to redistribute this code under either of these licenses.
 */

package io.vertx.ext.web.handler;

import io.vertx.codegen.annotations.Fluent;
import io.vertx.codegen.annotations.VertxGen;
import io.vertx.core.Handler;
import io.vertx.ext.web.Http2PushMapping;
import io.vertx.ext.web.RoutingContext;
import io.vertx.ext.web.common.WebEnvironment;
import io.vertx.ext.web.handler.impl.StaticHandlerImpl;

import java.util.List;
import java.util.Set;

A handler for serving static resources from the file system or classpath.
Author:Tim Fox
/** * A handler for serving static resources from the file system or classpath. * * @author <a href="http://tfox.org">Tim Fox</a> */
@VertxGen public interface StaticHandler extends Handler<RoutingContext> {
Default value of the web-root, where files are served from
/** * Default value of the web-root, where files are served from */
String DEFAULT_WEB_ROOT = "webroot";
Default value of whether files are read -only and never will be updated
/** * Default value of whether files are read -only and never will be updated */
boolean DEFAULT_FILES_READ_ONLY = true;
Default max age for cache headers
/** * Default max age for cache headers */
long DEFAULT_MAX_AGE_SECONDS = 86400; // One day
Default of whether cache header handling is enabled
/** * Default of whether cache header handling is enabled */
boolean DEFAULT_CACHING_ENABLED = !WebEnvironment.development();
Default of whether directory listing is enabled
/** * Default of whether directory listing is enabled */
boolean DEFAULT_DIRECTORY_LISTING = false;
Default template file to use for directory listing
/** * Default template file to use for directory listing */
String DEFAULT_DIRECTORY_TEMPLATE = "META-INF/vertx/web/vertx-web-directory.html";
Default of whether hidden files can be served
/** * Default of whether hidden files can be served */
boolean DEFAULT_INCLUDE_HIDDEN = true;
Default cache entry timeout, when caching
/** * Default cache entry timeout, when caching */
long DEFAULT_CACHE_ENTRY_TIMEOUT = 30000; // 30 seconds
The default index page
/** * The default index page */
String DEFAULT_INDEX_PAGE = "/index.html";
The default max cache size
/** * The default max cache size */
int DEFAULT_MAX_CACHE_SIZE = 10000;
Default of whether async filesystem access should always be used
/** * Default of whether async filesystem access should always be used */
boolean DEFAULT_ALWAYS_ASYNC_FS = false;
Default of whether fs async/sync tuning should be used
/** * Default of whether fs async/sync tuning should be used */
boolean DEFAULT_ENABLE_FS_TUNING = true;
Default max avg serve time, in ns, over which serving will be considered slow
/** * Default max avg serve time, in ns, over which serving will be considered slow */
long DEFAULT_MAX_AVG_SERVE_TIME_NS = 1000000; // 1ms
Default of whether Range request handling support should be used
/** * Default of whether Range request handling support should be used */
boolean DEFAULT_RANGE_SUPPORT = true;
Default of whether access to the root of the file system should be allowed or just allow from the current working directory.
/** * Default of whether access to the root of the file system should be allowed or just allow from the current working * directory. */
boolean DEFAULT_ROOT_FILESYSTEM_ACCESS = false;
Default of whether vary header should be sent.
/** * Default of whether vary header should be sent. */
boolean DEFAULT_SEND_VARY_HEADER = true;
Create a handler using defaults
Returns:the handler
/** * Create a handler using defaults * * @return the handler */
static StaticHandler create() { return new StaticHandlerImpl(); }
Create a handler, specifying web-root
Params:
  • root – the web-root
Returns:the handler
/** * Create a handler, specifying web-root * * @param root the web-root * @return the handler */
static StaticHandler create(String root) { return create().setWebRoot(root); }
Enable/Disable access to the root of the filesystem
Params:
  • allowRootFileSystemAccess – whether root access is allowed
Returns:a reference to this, so the API can be used fluently
/** * Enable/Disable access to the root of the filesystem * * @param allowRootFileSystemAccess whether root access is allowed * @return a reference to this, so the API can be used fluently */
@Fluent StaticHandler setAllowRootFileSystemAccess(boolean allowRootFileSystemAccess);
Set the web root
Params:
  • webRoot – the web root
Returns:a reference to this, so the API can be used fluently
/** * Set the web root * * @param webRoot the web root * @return a reference to this, so the API can be used fluently */
@Fluent StaticHandler setWebRoot(String webRoot);
Set whether files are read-only and will never change
Params:
  • readOnly – whether files are read-only
Returns:a reference to this, so the API can be used fluently
/** * Set whether files are read-only and will never change * * @param readOnly whether files are read-only * @return a reference to this, so the API can be used fluently */
@Fluent StaticHandler setFilesReadOnly(boolean readOnly);
Set value for max age in caching headers
Params:
  • maxAgeSeconds – maximum time for browser to cache, in seconds
Returns:a reference to this, so the API can be used fluently
/** * Set value for max age in caching headers * * @param maxAgeSeconds maximum time for browser to cache, in seconds * @return a reference to this, so the API can be used fluently */
@Fluent StaticHandler setMaxAgeSeconds(long maxAgeSeconds);
Set whether cache header handling is enabled
Params:
  • enabled – true if enabled
Returns:a reference to this, so the API can be used fluently
/** * Set whether cache header handling is enabled * * @param enabled true if enabled * @return a reference to this, so the API can be used fluently */
@Fluent StaticHandler setCachingEnabled(boolean enabled);
Set whether directory listing is enabled
Params:
  • directoryListing – true if enabled
Returns:a reference to this, so the API can be used fluently
/** * Set whether directory listing is enabled * * @param directoryListing true if enabled * @return a reference to this, so the API can be used fluently */
@Fluent StaticHandler setDirectoryListing(boolean directoryListing);
Set whether hidden files should be served
Params:
  • includeHidden – true if hidden files should be served
Returns:a reference to this, so the API can be used fluently
/** * Set whether hidden files should be served * * @param includeHidden true if hidden files should be served * @return a reference to this, so the API can be used fluently */
@Fluent StaticHandler setIncludeHidden(boolean includeHidden);
Set the server cache entry timeout when caching is enabled
Params:
  • timeout – the timeout, in ms
Returns:a reference to this, so the API can be used fluently
/** * Set the server cache entry timeout when caching is enabled * * @param timeout the timeout, in ms * @return a reference to this, so the API can be used fluently */
@Fluent StaticHandler setCacheEntryTimeout(long timeout);
Set the index page
Params:
  • indexPage – the index page
Returns:a reference to this, so the API can be used fluently
/** * Set the index page * * @param indexPage the index page * @return a reference to this, so the API can be used fluently */
@Fluent StaticHandler setIndexPage(String indexPage);
Set the max cache size, when caching is enabled
Params:
  • maxCacheSize – the max cache size
Returns:a reference to this, so the API can be used fluently
/** * Set the max cache size, when caching is enabled * * @param maxCacheSize the max cache size * @return a reference to this, so the API can be used fluently */
@Fluent StaticHandler setMaxCacheSize(int maxCacheSize);
Set the file mapping for http2push and link preload
Params:
  • http2PushMappings – the mapping for http2 push
Returns:a reference to this, so the API can be used fluently
/** * Set the file mapping for http2push and link preload * * @param http2PushMappings the mapping for http2 push * @return a reference to this, so the API can be used fluently */
@Fluent StaticHandler setHttp2PushMapping(List<Http2PushMapping> http2PushMappings);
Skip compression if the media type of the file to send is in the provided mediaTypes set. Content-Encoding header set to identity for the types present in the mediaTypes set
Params:
  • mediaTypes – the set of mime types that are already compressed
Returns:a reference to this, so the API can be used fluently
/** * Skip compression if the media type of the file to send is in the provided {@code mediaTypes} set. * {@code Content-Encoding} header set to {@code identity} for the types present in the {@code mediaTypes} set * * @param mediaTypes the set of mime types that are already compressed * @return a reference to this, so the API can be used fluently */
@Fluent StaticHandler skipCompressionForMediaTypes(Set<String> mediaTypes);
Skip compression if the suffix of the file to send is in the provided fileSuffixes set. Content-Encoding header set to identity for the suffixes present in the fileSuffixes set
Params:
  • fileSuffixes – the set of file suffixes that are already compressed
Returns:a reference to this, so the API can be used fluently
/** * Skip compression if the suffix of the file to send is in the provided {@code fileSuffixes} set. * {@code Content-Encoding} header set to {@code identity} for the suffixes present in the {@code fileSuffixes} set * * @param fileSuffixes the set of file suffixes that are already compressed * @return a reference to this, so the API can be used fluently */
@Fluent StaticHandler skipCompressionForSuffixes(Set<String> fileSuffixes);
Set whether async filesystem access should always be used
Params:
  • alwaysAsyncFS – true for always async FS access
Returns:a reference to this, so the API can be used fluently
/** * Set whether async filesystem access should always be used * * @param alwaysAsyncFS true for always async FS access * @return a reference to this, so the API can be used fluently */
@Fluent StaticHandler setAlwaysAsyncFS(boolean alwaysAsyncFS);
Set whether async/sync filesystem tuning should enabled
Params:
  • enableFSTuning – true to enabled FS tuning
Returns:a reference to this, so the API can be used fluently
/** * Set whether async/sync filesystem tuning should enabled * * @param enableFSTuning true to enabled FS tuning * @return a reference to this, so the API can be used fluently */
@Fluent StaticHandler setEnableFSTuning(boolean enableFSTuning);
Set the max serve time in ns, above which serves are considered slow
Params:
  • maxAvgServeTimeNanoSeconds – max serve time, in ns
Returns:a reference to this, so the API can be used fluently
/** * Set the max serve time in ns, above which serves are considered slow * * @param maxAvgServeTimeNanoSeconds max serve time, in ns * @return a reference to this, so the API can be used fluently */
@Fluent StaticHandler setMaxAvgServeTimeNs(long maxAvgServeTimeNanoSeconds);
Set the directory template to be used when directory listing
Params:
  • directoryTemplate – the directory template
Returns:a reference to this, so the API can be used fluently
/** * Set the directory template to be used when directory listing * * @param directoryTemplate the directory template * @return a reference to this, so the API can be used fluently */
@Fluent StaticHandler setDirectoryTemplate(String directoryTemplate);
Set whether range requests (resumable downloads; media streaming) should be enabled.
Params:
  • enableRangeSupport – true to enable range support
Returns:a reference to this, so the API can be used fluently
/** * Set whether range requests (resumable downloads; media streaming) should be enabled. * * @param enableRangeSupport true to enable range support * @return a reference to this, so the API can be used fluently */
@Fluent StaticHandler setEnableRangeSupport(boolean enableRangeSupport);
Set whether vary header should be sent with response.
Params:
  • varyHeader – true to sent vary header
Returns:a reference to this, so the API can be used fluently
/** * Set whether vary header should be sent with response. * * @param varyHeader true to sent vary header * @return a reference to this, so the API can be used fluently */
@Fluent StaticHandler setSendVaryHeader(boolean varyHeader);
Set the default content encoding for text related files. This allows overriding the system settings default value.
Params:
  • contentEncoding – the desired content encoding e.g.: "UTF-8"
Returns:a reference to this, so the API can be used fluently
/** * Set the default content encoding for text related files. This allows overriding the system settings default value. * * @param contentEncoding the desired content encoding e.g.: "UTF-8" * @return a reference to this, so the API can be used fluently */
@Fluent StaticHandler setDefaultContentEncoding(String contentEncoding); }