Как обработать несогласованный / нежелательный или действительный запрос на Java HTTP Server? - PullRequest
0 голосов
/ 15 января 2019

У меня есть приложение Java HTTPServer, которое прослушивает POST-запросы в формате JSON-RPC на localhost: 9090 следующим образом;

 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 ());

Весь URL-адрес почтового запроса является localhost: 9090 /.

Есть только 2 запроса GET. Один из них показывает состояние сервера. и его URL localhost:9090/serverStatus

Моя проблема в том, Когда пользователь отправляет нежелательный запрос, дайте ему соответствующий ответ. например, он может вызвать localhost:9090/status вместо вызова localhost:9090/serverStatus, чтобы узнать состояние сервера.

Я бы хотел дать правильный ответ в этом случае.

Как мне справиться с этой задачей?

Ответы [ 2 ]

0 голосов
/ 15 января 2019

URL-адрес всех нежелательных или не определенных контекстом запросов действует как базовый URL-адрес. Поэтому я добавил несколько элементов управления в EchoPostHandler, чтобы решить мою проблему.

0 голосов
/ 15 января 2019

Вам нужен соответствующий URL для каждого /<something>, который вы хотите обработать. В этом отношении /status и /serverstatus весьма различны.

Одним из решений может быть определение обоих 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();
...