我有一个使用以下 java 版本运行的 java 应用程序
$ java -version
java version "11.0.3" 2019-04-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.3+12-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.3+12-LTS, mixed mode)
我正在研究使用 java 中的内置 HttpServer,并注意到带有 HttpContext 的 HttpContextpath=/foo
将接受以所述路径开头的 uri 请求,例如/foo123
/foobar
/fooxxx
.
public class IsThisABug {
public static void main(String[] args) throws IOException {
HttpServer server = HttpServer.create(new InetSocketAddress(8080), 0);
server.createContext("/context",IsThisABug::handleRequest);
server.start();
System.out.println("Server listening on " + server.getAddress());
}
private static void handleRequest(HttpExchange exchange) throws IOException {
URI requestURI = exchange.getRequestURI();
String response = "Hello From handleRequest: " + requestURI;
System.out.println(response);
exchange.sendResponseHeaders(200, response.getBytes().length);
OutputStream os = exchange.getResponseBody();
os.write(response.getBytes());
os.close();
}
}
如果我进入邮递员并向localhost:8080/context
终端窗口中观察到以下输出的 GET 请求:
Hello From handleRequest: /context
如果我向/contextBar
以下输出发送请求,则会看到
Hello From handleRequest: /contextBar
我曾简要地研究过使用import com.sun.net.httpserver.Filter
它来拒绝任何进入我的/context
端点的杂散请求,但我不明白为什么这应该是必要的。
有谁知道为什么会这样?