JWEBSERVER(1)
π JWEBSERVER β launch the Java Simple Web Server
okay bestie, so this is the jwebserver page from the JDK Commands manual, and it's genuinely one of the cutest little tools in the whole JDK. it's a baby HTTP server. it serves files. it does not do drama. let's get into it π
β¨ NAME β¨
jwebserver β launch the Java Simple Web Server π¦
πΈ SYNOPSIS πΈ
jwebserver [options]
options β the command-line options, obviously π and if you want the full tea on each one, scroll down to Options.
π«Ά DESCRIPTION π«Ά
so jwebserver gives you a minimal HTTP server, and it was literally made for prototyping, testing, and debugging. that's the vibe. it serves a single directory hierarchy, and only serves static files. no cap.
Only HTTP/1.1 is supported. HTTP/2 and HTTPS are not supported β so don't come looking for a padlock icon, it's not that kind of party π
Only idempotent HEAD and GET requests get served. Any other request gets a 501 - Not Implemented or a 405 - Not Allowed response. periodt. GET requests are mapped to the directory being served like this:
- If the requested resource is a file, its content is served. π
- If the requested resource is a directory that contains an index file, the content of the index file is served.
- Otherwise, the names of all files and subdirectories of the directory are listed. Symbolic links and hidden files are not listed or served. π (they're lowkey in witness protection)
MIME types are configured automatically using the built-in table. for example, .html files are served as text/html and .java files are served as text/plain. it just knows. iykyk β¨
jwebserver is located in the jdk.httpserver module, and can alternatively be started with java -m jdk.httpserver. It is based on the web server implementation in the com.sun.net.httpserver package. And the com.sun.net.httpserver.SimpleFileServer class provides a programmatic way to retrieve the server and its components for reuse and extension β so yes you can absolutely take it apart and rebuild it, main character energy π
π USAGE π
jwebserver [-b bind address] [-p port] [-d directory]
[-o none|info|verbose] [-h to show options]
[-version to show version information]
π OPTIONS π
-hor-?or--helpβ prints the help message and exits. cute, quick, done π-baddr or--bind-addressaddr β specifies the address to bind to. Default:127.0.0.1or::1(loopback). For all interfaces use-b 0.0.0.0or-b ::. π¦-ddir or--directorydir β specifies the directory to serve. Default: current directory.-olevel or--outputlevel β specifies the output format.none|info|verbose. Default:info.-pport or--portport β specifies the port to listen on. Default:8000.-versionor--versionβ prints the version information and exits. β
To stop the server, press Ctrl + C. π«Ά
π STARTING THE SERVER π
the following command starts the Simple Web Server:
$ jwebserver
If startup is successful, the server prints a message to System.out listing the local address and the absolute path of the directory being served. For example:
$ jwebserver
Binding to loopback by default. For all interfaces use "-b 0.0.0.0" or "-b ::".
Serving /cwd and subdirectories on 127.0.0.1 port 8000
URL http://127.0.0.1:8000/
look at it go πβ¨
π§ CONFIGURATION π§
By default, the server runs in the foreground and binds to the loopback address and port 8000. This can be changed with the -b and -p options. For example, to bind the Simple Web Server to all interfaces, use:
$ jwebserver -b 0.0.0.0
Serving /cwd and subdirectories on 0.0.0.0 (all interfaces) port 8000
URL http://123.456.7.891:8000/
β οΈ note that this makes the web server accessible to all hosts on the network. Do not do this unless you are sure the server cannot leak any sensitive information. fr fr, do not be out here exposing your whole filesystem because it seemed fun π
As another example, use the following command to run on port 9000:
$ jwebserver -p 9000
By default, the files of the current directory are served. A different directory can be specified with the -d option.
By default, every request is logged on the console. The output looks like this:
127.0.0.1 - - [10/Feb/2021:14:34:11 +0000] "GET /some/subdirectory/ HTTP/1.1" 200 -
Logging output can be changed with the -o option. The default setting is info. The verbose setting additionally includes the request and response headers as well as the absolute path of the requested resource. it's giving receipts π
π₯ STOPPING THE SERVER π₯
Once started successfully, the server runs until it is stopped. On Unix platforms, the server can be stopped by sending it a SIGINT signal (Ctrl+C in a terminal window). bye bestie π
π HELP OPTION π
The -h option displays a help message describing the usage and the options of the jwebserver. when in doubt, -h it out πΈ
and that's the whole page, bestie πβ¨ this was the JWEBSERVER(1) page from the JDK 22 docs, dated 2024 β go forth and serve some static files, you iconic little sysadmin π«Άπ
π¦ where this page comes from
- opensuse-leap 16.0: java-22-openjdk-devel 22.0.2.0-160000.1.1 Β· Apache-1.1 AND Apache-2.0 AND GPL-1.0-or-later AND GPL-2.0-only AND GPL-2.0-only WITH Classpath-exception-2.0 AND LGPL-2.0-only AND MPL-1.0 AND MPL-1.1 AND SUSE-Public-Domain AND W3C
- opensuse-leap 16.0: java-22-openjdk-devel 22.0.2.0-160000.1.1 Β· Apache-1.1 AND Apache-2.0 AND GPL-1.0-or-later AND GPL-2.0-only AND GPL-2.0-only WITH Classpath-exception-2.0 AND LGPL-2.0-only AND MPL-1.0 AND MPL-1.1 AND SUSE-Public-Domain AND W3C
- opensuse-leap 16.0: java-22-openjdk-devel 22.0.2.0-160000.1.1 Β· Apache-1.1 AND Apache-2.0 AND GPL-1.0-or-later AND GPL-2.0-only AND GPL-2.0-only WITH Classpath-exception-2.0 AND LGPL-2.0-only AND MPL-1.0 AND MPL-1.1 AND SUSE-Public-Domain AND W3C
- opensuse-leap 16.0: java-22-openjdk-devel 22.0.2.0-160000.1.1 Β· Apache-1.1 AND Apache-2.0 AND GPL-1.0-or-later AND GPL-2.0-only AND GPL-2.0-only WITH Classpath-exception-2.0 AND LGPL-2.0-only AND MPL-1.0 AND MPL-1.1 AND SUSE-Public-Domain AND W3C
- Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms