Сервер прослушивает порт с конечной точкой

Я создал сервер, использующий сокеты на Java, и он готов принимать HTTP-запросы и отправлять HTTP-ответ. Сервер находится на порту моего ПК, но я хочу слушать только «конечную точку», я имею в виду, я хочу смонтировать сервер, то есть на localhost:60802/json. Это возможно? Мой код здесь:

            PORT = Integer.parseInt(portSelection.getText());
            th =  new Thread(new Runnable() {

                //String file;
                @Override
                public void run() {
                    try{
                        server = new ServerSocket(PORT);

                        while(open) {
                            //Accept connections
                            connection = server.accept();

                            in = new BufferedReader(new InputStreamReader(connection.getInputStream())); 

                            try {
                                String line = "";

                                while ((line=in.readLine())!= null && !line.equals("")){log.append(line);}                                                              
                                in.close();
                            }catch (Exception e1) {
                            }
                        }
                    }catch (EOFException e1 ) {
                        e1.printStackTrace();
                    }catch (BindException e1) {
                        log.setText("Error. Port "+PORT+" already in use.");
                        open=false;
                    }catch (SocketException e1) {

                    }catch (IOException e1) {
                        e1.printStackTrace();
                    }
                }
            });
            th.start();

Я пропустил некоторые части, поэтому, возможно, вы обнаружите ошибку, но в настоящее время код работает идеально.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
60
3

Ответы 3

Сервер привязан к определенному TCP-порту (и интерфейсу, если он предусмотрен). Если вы хотите дать ответ только по пути / json, просто сделайте условный оператор, проверяющий URL.

Если вы используете весеннюю загрузку для монтирования вашего сервера и веб-сервиса, это будет намного проще, чем все перекодировать.

Пожалуйста, посмотрите: Создание веб-службы RESTful с помощью Spring Boot Actuator

Затем вы можете разработать приложение для каждой группы веб-сервисов, и для каждой группы веб-сервисов вы можете указать конкретный порт в файле application.properties:

server.port= 60802

I want to mount the server i.e. on localhost:60802/json. Is this possible?

Вы можете прослушивать порт 60802 localhost. Он будет принимать все соединения на этом IP / порту. Помимо этого, ваш серверный код должен:

  1. прочитать HTTP-запрос
  2. декодировать первую строку, чтобы извлечь URL-адрес запроса
  3. решить, совпадает ли путь URL-адреса с путем вашего URL-адреса "конечной точки"; то есть "/ json / *"
    • если да, то продолжайте
    • если нет, то отправьте соответствующий ответ об ошибке HTTP; например 404 Не Найдено

(В качестве альтернативы вы можете поместить свой серверный код за обратным прокси-сервером, который работает с этим материалом и также перезаписывает URL-адрес запроса. Но это может помешать вашей цели при использовании сокетов ....)


Но, честно говоря, писать HTTP-сервер с использованием сокетов - плохая идея. Много работы, и вы, скорее всего, получите сервис, который не реализует спецификации HTTP правильно. Лучше использовать существующий веб-сервер / контейнер (например, Tomcat, Jetty, Glassfish, SpringBoot и т. д.) Или библиотеку Apache HttpComponents.

Спасибо за ваш совет!

froggy_ 27.07.2018 08:48

Другие вопросы по теме