У меня есть приложение 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("/", new EchoPostHandler());
Все URL-адреса почтового запроса - localhost: 9090 /.
Есть всего 2 GET-запроса. Один из них показывает статус сервера. и его URL-адрес: localhost:9090/serverStatus
Моя проблема в том, Когда пользователь отправляет нежелательный запрос, дайте ему соответствующий ответ. например, он может вызвать localhost:9090/status вместо вызова localhost:9090/serverStatus, чтобы узнать статус сервера.
В этом случае я хотел бы дать правильный ответ.
Как я могу справиться с этой задачей?




Вам нужен соответствующий 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();
URL-адрес всех нежелательных или неконтекстно-определенных запросов действует как базовый URL-адрес. Поэтому я добавил несколько элементов управления в EchoPostHandler, чтобы решить мою проблему.
Я не могу объяснить часть нежелательного запроса. клиент может отправить его на localhost: 9090 / serverStatuss с двойной буквой s вместо localhost: 9090 / serverStatus.