我有一个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
来了解服务器状态。
在这种情况下,我想返回一个正确的答案。
如何处理此任务?
答案 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中添加了许多控件来解决我的问题。