如何处理Java HTTP Server上不匹配/不需要或有效的请求?

时间:2019-01-15 08:53:34

标签: java httpserver json-rpc

我有一个Java HTTPServer应用程序,它在localhost:9090上侦听JSON-RPC格式的POST请求,如下所示;

 HttpServer server = HttpServer.create(new InetSocketAddress(9090), 0);
            System.out.println("> Server started at port number: "+ port);          
            server.createContext("/serverStatus", new RootHandler());
            server.createContext("/newTransaction", new EchoTransactionHandler());
            server.createContext("/", new EchoPostHandler());               
            server.setExecutor(null);
            server.start();

我正在通过POST和JSON-RPC格式发送所有请求。EchoPostHandler类满足所有发出的请求。 EchoPosthandler通过查看请求正文来决定哪个功能可以工作。

  

server.createContext(“ /”,新的EchoPostHandler());

所有发布请求的网址均为localhost:9090/。

只有2个GET请求。其中之一显示服务器状态。其网址为localhost:9090/serverStatus

我的问题是;当用户发送不需要的请求时,给它适当的答案。例如,它可以调用localhost:9090/status而不是调用localhost:9090/serverStatus来了解服务器状态。

在这种情况下,我想返回一个正确的答案。

如何处理此任务?

2 个答案:

答案 0 :(得分:0)

对于每个要处理的/<something>,您都需要一个匹配的URL。在这方面,/status/serverstatus截然不同。

一种解决方案可能是定义两个URL并向两个URL添加相同的处理程序:

HttpHandler hndSystemStatus = new RootHandler();
HttpServer server = HttpServer.create(new InetSocketAddress(9090), 0);
            System.out.println("> Server started at port number: "+ port);          
            server.createContext("/serverStatus", hndSystemStatus );
            server.createContext("/status", hndSystemStatus );
            server.createContext("/newTransaction", new EchoTransactionHandler());
            server.createContext("/", new EchoPostHandler());               
            server.setExecutor(null);
            server.start();

答案 1 :(得分:0)

所有不需要的或非上下文定义的请求的URL充当基本URL。 因此,我在EchoPostHandler中添加了许多控件来解决我的问题。