Package fi.iki.elonen
Class NanoHTTPD
java.lang.Object
fi.iki.elonen.NanoHTTPD
- Direct Known Subclasses:
DebugServer
,HelloServer
,NanoWSD
,RouterNanoHTTPD
,SimpleWebServer
A simple, tiny, nicely embeddable HTTP server in Java
NanoHTTPD
Copyright (c) 2012-2013 by Paul S. Hawke, 2001,2005-2013 by Jarno Elonen, 2010 by Konstantinos Togias
Features + limitations:- Only one Java file
- Java 5 compatible
- Released as open source, Modified BSD licence
- No fixed config files, logging, authorization etc. (Implement yourself if you need them.)
- Supports parameter parsing of GET and POST methods (+ rudimentary PUT support in 1.25)
- Supports both dynamic content and file serving
- Supports file upload (since version 1.2, 2010)
- Supports partial content (streaming)
- Supports ETags
- Never caches anything
- Doesn't limit bandwidth, request time or simultaneous connections
- Default code serves files and shows all HTTP parameters and headers
- File server supports directory listing, index.html and index.htm
- File server supports partial content (streaming)
- File server supports ETags
- File server does the 301 redirection trick for directories without '/'
- File server supports simple skipping for files (continue download)
- File server serves also very long files without memory overhead
- Contains a built-in list of most common MIME types
- All header names are converted to lower case so they don't vary between browsers/clients
- Subclass and implement serve() and embed to your own program
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic interface
Pluggable strategy for asynchronously executing requests.class
The runnable that will be used for every new client connection.protected static class
static class
class
Provides rudimentary support for cookies.static class
Default threading strategy for NanoHTTPD.static class
Creates a normal ServerSocket for TCP connectionsstatic class
Default strategy for creating and cleaning up temporary files.static class
Default strategy for creating and cleaning up temporary files.private class
Default strategy for creating and cleaning up temporary files.protected class
static interface
Handles one session, i.e.static enum
HTTP Request methods, with the ability to decode aString
back to its enum value.static class
HTTP response.static final class
static class
Creates a new SSLServerSocketclass
The runnable that will be used for the main listening thread.static interface
Factory to create ServerSocketFactories.static interface
A temp file.static interface
Temp file manager.static interface
Factory to create temp file managers. -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected NanoHTTPD.AsyncRunner
Pluggable strategy for asynchronously executing requests.private static final Pattern
private static final String
private static final Pattern
private static final String
private static final Pattern
private static final String
private final String
private static final Logger
logger to log to.static final String
Common MIME type for dynamic content: htmlstatic final String
Common MIME type for dynamic content: plain textHashtable mapping (String)FILENAME_EXTENSION -> (String)MIME_TYPEprivate final int
private ServerSocket
private Thread
private static final String
Pseudo-Parameter to use to store the actual query string in the parameters map for later re-processing.private NanoHTTPD.ServerSocketFactory
static final int
Maximum time to wait on Socket.getInputStream().read() (in milliseconds) This is required as the Keep-Alive HTTP connections would otherwise block the socket reading thread forever (or as long the browser is open).private NanoHTTPD.TempFileManagerFactory
Pluggable strategy for creating and cleaning up temporary files. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoid
Forcibly closes all connections that are open.protected NanoHTTPD.ClientHandler
createClientHandler
(Socket finalAccept, InputStream inputStream) create a instance of the client handler, subclasses can return a subclass of the ClientHandler.protected NanoHTTPD.ServerRunnable
createServerRunnable
(int timeout) Instantiate the server runnable, can be overwritten by subclasses to provide a subclass of the ServerRunnable.decodeParameters
(String queryString) Decode parameters from a URL, handing the case where a single parameter name might have been supplied several times, by return lists of values.decodeParameters
(Map<String, String> parms) Decode parameters from a URL, handing the case where a single parameter name might have been supplied several times, by return lists of values.protected static String
decodePercent
(String str) Decode percent encodedString
values.final int
static String
getMimeTypeForFile
(String uri) Get MIME type from file name extension, if possiblefinal boolean
isAlive()
private static void
loadMimeTypes
(Map<String, String> result, String resourceName) void
makeSecure
(SSLServerSocketFactory sslServerSocketFactory, String[] sslProtocols) Call before start() to serve over HTTPS instead of HTTPstatic SSLServerSocketFactory
makeSSLSocketFactory
(String keyAndTrustStoreClasspathPath, char[] passphrase) Creates an SSLSocketFactory for HTTPS.static SSLServerSocketFactory
makeSSLSocketFactory
(KeyStore loadedKeyStore, KeyManager[] keyManagers) Creates an SSLSocketFactory for HTTPS.static SSLServerSocketFactory
makeSSLSocketFactory
(KeyStore loadedKeyStore, KeyManagerFactory loadedKeyFactory) Creates an SSLSocketFactory for HTTPS.static NanoHTTPD.Response
newChunkedResponse
(NanoHTTPD.Response.IStatus status, String mimeType, InputStream data) Create a response with unknown length (using HTTP 1.1 chunking).static NanoHTTPD.Response
newFixedLengthResponse
(NanoHTTPD.Response.IStatus status, String mimeType, InputStream data, long totalBytes) Create a response with known length.static NanoHTTPD.Response
newFixedLengthResponse
(NanoHTTPD.Response.IStatus status, String mimeType, String txt) Create a text response with known length.static NanoHTTPD.Response
Create a text response with known length.private static final void
serve
(NanoHTTPD.IHTTPSession session) Override this to customize the server.serve
(String uri, NanoHTTPD.Method method, Map<String, String> headers, Map<String, String> parms, Map<String, String> files) Deprecated.void
setAsyncRunner
(NanoHTTPD.AsyncRunner asyncRunner) Pluggable strategy for asynchronously executing requests.void
setServerSocketFactory
(NanoHTTPD.ServerSocketFactory serverSocketFactory) void
setTempFileManagerFactory
(NanoHTTPD.TempFileManagerFactory tempFileManagerFactory) Pluggable strategy for creating and cleaning up temporary files.void
start()
Start the server.void
start
(int timeout) Starts the server (in setDaemon(true) mode).void
start
(int timeout, boolean daemon) Start the server.void
stop()
Stop the server.protected boolean
final boolean
-
Field Details
-
CONTENT_DISPOSITION_REGEX
- See Also:
-
CONTENT_DISPOSITION_PATTERN
-
CONTENT_TYPE_REGEX
- See Also:
-
CONTENT_TYPE_PATTERN
-
CONTENT_DISPOSITION_ATTRIBUTE_REGEX
- See Also:
-
CONTENT_DISPOSITION_ATTRIBUTE_PATTERN
-
SOCKET_READ_TIMEOUT
public static final int SOCKET_READ_TIMEOUTMaximum time to wait on Socket.getInputStream().read() (in milliseconds) This is required as the Keep-Alive HTTP connections would otherwise block the socket reading thread forever (or as long the browser is open).- See Also:
-
MIME_PLAINTEXT
Common MIME type for dynamic content: plain text- See Also:
-
MIME_HTML
Common MIME type for dynamic content: html- See Also:
-
QUERY_STRING_PARAMETER
Pseudo-Parameter to use to store the actual query string in the parameters map for later re-processing.- See Also:
-
LOG
logger to log to. -
MIME_TYPES
Hashtable mapping (String)FILENAME_EXTENSION -> (String)MIME_TYPE -
hostname
-
myPort
private final int myPort -
myServerSocket
-
serverSocketFactory
-
myThread
-
asyncRunner
Pluggable strategy for asynchronously executing requests. -
tempFileManagerFactory
Pluggable strategy for creating and cleaning up temporary files.
-
-
Constructor Details
-
NanoHTTPD
public NanoHTTPD(int port) Constructs an HTTP server on given port. -
NanoHTTPD
Constructs an HTTP server on given hostname and port.
-
-
Method Details
-
mimeTypes
-
loadMimeTypes
-
makeSSLSocketFactory
public static SSLServerSocketFactory makeSSLSocketFactory(KeyStore loadedKeyStore, KeyManager[] keyManagers) throws IOException Creates an SSLSocketFactory for HTTPS. Pass a loaded KeyStore and an array of loaded KeyManagers. These objects must properly loaded/initialized by the caller.- Throws:
IOException
-
makeSSLSocketFactory
public static SSLServerSocketFactory makeSSLSocketFactory(KeyStore loadedKeyStore, KeyManagerFactory loadedKeyFactory) throws IOException Creates an SSLSocketFactory for HTTPS. Pass a loaded KeyStore and a loaded KeyManagerFactory. These objects must properly loaded/initialized by the caller.- Throws:
IOException
-
makeSSLSocketFactory
public static SSLServerSocketFactory makeSSLSocketFactory(String keyAndTrustStoreClasspathPath, char[] passphrase) throws IOException Creates an SSLSocketFactory for HTTPS. Pass a KeyStore resource with your certificate and passphrase- Throws:
IOException
-
getMimeTypeForFile
Get MIME type from file name extension, if possible- Parameters:
uri
- the string representing a file- Returns:
- the connected mime/type
-
safeClose
-
closeAllConnections
public void closeAllConnections()Forcibly closes all connections that are open. -
createClientHandler
create a instance of the client handler, subclasses can return a subclass of the ClientHandler.- Parameters:
finalAccept
- the socket the cleint is connected toinputStream
- the input stream- Returns:
- the client handler
-
createServerRunnable
Instantiate the server runnable, can be overwritten by subclasses to provide a subclass of the ServerRunnable.- Parameters:
timeout
- the socet timeout to use.- Returns:
- the server runnable.
-
decodeParameters
Decode parameters from a URL, handing the case where a single parameter name might have been supplied several times, by return lists of values. In general these lists will contain a single element.- Parameters:
parms
- original NanoHTTPD parameters values, as passed to theserve()
method.- Returns:
- a map of
String
(parameter name) toList<String>
(a list of the values supplied).
-
decodeParameters
Decode parameters from a URL, handing the case where a single parameter name might have been supplied several times, by return lists of values. In general these lists will contain a single element.- Parameters:
queryString
- a query string pulled from the URL.- Returns:
- a map of
String
(parameter name) toList<String>
(a list of the values supplied).
-
decodePercent
Decode percent encodedString
values.- Parameters:
str
- the percent encodedString
- Returns:
- expanded form of the input, for example "foo%20bar" becomes "foo bar"
-
useGzipWhenAccepted
- Returns:
- true if the gzip compression should be used if the client accespts it. Default this option is on for text content and off for everything. Override this for custom semantics.
-
getListeningPort
public final int getListeningPort() -
isAlive
public final boolean isAlive() -
getServerSocketFactory
-
setServerSocketFactory
-
getHostname
-
getTempFileManagerFactory
-
makeSecure
Call before start() to serve over HTTPS instead of HTTP -
newChunkedResponse
public static NanoHTTPD.Response newChunkedResponse(NanoHTTPD.Response.IStatus status, String mimeType, InputStream data) Create a response with unknown length (using HTTP 1.1 chunking). -
newFixedLengthResponse
public static NanoHTTPD.Response newFixedLengthResponse(NanoHTTPD.Response.IStatus status, String mimeType, InputStream data, long totalBytes) Create a response with known length. -
newFixedLengthResponse
public static NanoHTTPD.Response newFixedLengthResponse(NanoHTTPD.Response.IStatus status, String mimeType, String txt) Create a text response with known length. -
newFixedLengthResponse
Create a text response with known length. -
serve
Override this to customize the server. (By default, this returns a 404 "Not Found" plain text error response.)- Parameters:
session
- The HTTP session- Returns:
- HTTP response, see class Response for details
-
serve
@Deprecated public NanoHTTPD.Response serve(String uri, NanoHTTPD.Method method, Map<String, String> headers, Map<String, String> parms, Map<String, String> files) Deprecated.Override this to customize the server. (By default, this returns a 404 "Not Found" plain text error response.)- Parameters:
uri
- Percent-decoded URI without parameters, for example "/index.cgi"method
- "GET", "POST" etc.headers
- Header entries, percent decodedparms
- Parsed, percent decoded parameters from URI and, in case of POST, data.- Returns:
- HTTP response, see class Response for details
-
setAsyncRunner
Pluggable strategy for asynchronously executing requests.- Parameters:
asyncRunner
- new strategy for handling threads.
-
setTempFileManagerFactory
Pluggable strategy for creating and cleaning up temporary files.- Parameters:
tempFileManagerFactory
- new strategy for handling temp files.
-
start
Start the server.- Throws:
IOException
- if the socket is in use.
-
start
Starts the server (in setDaemon(true) mode).- Throws:
IOException
-
start
Start the server.- Parameters:
timeout
- timeout to use for socket connections.daemon
- start the thread daemon or not.- Throws:
IOException
- if the socket is in use.
-
stop
public void stop()Stop the server. -
wasStarted
public final boolean wasStarted()
-