| --- | |
| # Copyright (c) 2021, 2024, Oracle and/or its affiliates. All rights reserved. | |
| # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | |
| # | |
| # This code is free software; you can redistribute it and/or modify it | |
| # under the terms of the GNU General Public License version 2 only, as | |
| # published by the Free Software Foundation. | |
| # | |
| # This code is distributed in the hope that it will be useful, but WITHOUT | |
| # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| # version 2 for more details (a copy is included in the LICENSE file that | |
| # accompanied this code). | |
| # | |
| # You should have received a copy of the GNU General Public License version | |
| # 2 along with this work; if not, write to the Free Software Foundation, | |
| # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
| # | |
| # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
| # or visit www.oracle.com if you need additional information or have any | |
| # questions. | |
| # | |
| title: 'JWEBSERVER(1) JDK @@VERSION_SHORT@@ | JDK Commands' | |
| date: @@COPYRIGHT_YEAR@@ | |
| lang: en | |
| --- | |
| ## Name | |
| jwebserver - launch the Java Simple Web Server | |
| ## Synopsis | |
| `jwebserver` \[*options*\] | |
| *options* | |
| : Command-line options. For a detailed description of the options, see [Options]. | |
| ## Description | |
| The `jwebserver` tool provides a minimal HTTP server, designed to be used | |
| for prototyping, testing, and debugging. It serves a single directory hierarchy, | |
| and only serves static files. Only HTTP/1.1 is supported; | |
| HTTP/2 and HTTPS are not supported. | |
| Only idempotent HEAD and GET requests are served. Any other requests receive | |
| a `501 - Not Implemented` or a `405 - Not Allowed` response. GET requests are | |
| mapped to the directory being served, as follows: | |
| * 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. | |
| 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`. | |
| `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. | |
| The `com.sun.net.httpserver.SimpleFileServer` class provides a programmatic | |
| way to retrieve the server and its components for reuse and extension. | |
| ## Usage | |
| ``` | |
| jwebserver [-b bind address] [-p port] [-d directory] | |
| [-o none|info|verbose] [-h to show options] | |
| [-version to show version information] | |
| ``` | |
| ## Options | |
| `-h` or `-?` or `--help` | |
| : Prints the help message and exits. | |
| `-b` *addr* or `--bind-address` *addr* | |
| : Specifies the address to bind to. | |
| Default: 127.0.0.1 or ::1 (loopback). | |
| For all interfaces use `-b 0.0.0.0` or `-b ::`. | |
| `-d` *dir* or `--directory` *dir* | |
| : Specifies the directory to serve. | |
| Default: current directory. | |
| `-o` *level* or `--output` *level* | |
| : Specifies the output format. `none` | `info` | `verbose`. | |
| Default: `info`. | |
| `-p` *port* or `--port` *port* | |
| : Specifies the port to listen on. | |
| Default: 8000. | |
| `-version` or `--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/ | |
| ``` | |
| ## 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.* | |
| 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. | |
| ## 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). | |
| ## Help Option | |
| The `-h` option displays a help message describing the usage and the options | |
| of the `jwebserver`. |