Как я могу изменить этот код, чтобы при вводе localhost:9080/?say=hello выводился hello?

#java #serversocket

#java — язык #serversocket #java

Вопрос:

Я пытаюсь вывести привет, когда ввожу enter localhost:9080/?say=привет. Но я понятия не имею, как это сделать

 public class MyServer {
    public static void main(String args[])throws Exception{
        ServerSocket ss=new ServerSocket(9080);
        Socket client = ss.accept();
        Scanner in =new Scanner(client.getInputStream());
        // running infinite loop for getting
        // client request
        while (true){
            String s = in.nextLine();
            if (s==null || s.trim().length()==0)
                break;
            System.out.println(s);
        }
        PrintWriter out = new PrintWriter(client.getOutputStream(),true);
        String document = "<html><body>Salem</body></html>";
        String response = "HTTP/1.1 200 OKrn"  
                "Server: YarServer/2009-09-09rn"  
                "Content-Type: text/htmlrn"  
                "Content-Length: "   document.length()   "rn"  
                "Connection: closernrn";
        out.println(response document);

    }
}
  

Комментарии:

1. Вы можете взглянуть на rest, Spring boot напрямую выдает код plug and play с rest

2. Может быть, вам следует ознакомиться с протоколом передачи гипертекста при попытке реализовать HTTP-сервер с нуля?

3. У Java есть свой собственный HttpServer класс. Не используйте ServerSocket напрямую для реализации HTTP вручную.

Ответ №1:

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

Значительно упрощая, протокол HTTP обменивается текстовыми строками между клиентом и сервером. Ваш код уже печатает строки, которые браузер отправляет на ваш сервер; взгляните на первую строку: там говорится

  GET /?say=hello HTTP/1.1
  

«GET» — это «HTTP-метод«, за ним следует путь к запрошенному вами серверному ресурсу (в данном случае просто косая черта) плюс любой параметр запроса (часть после вопросительного знака) и версия протокола.

Чтобы выполнить определенное действие для определенного пути / параметра, запрошенного клиентом, ваш код должен проверить первую строку текста, отправленного браузером (например, вы должны проверить наличие /?say=hello ).

Кроме того, обычно HTTP-сервер не завершает работу после первого запроса, поэтому ваш код должен содержать еще один бесконечный цикл для ожидания другого соединения после обслуживания первого. Ваш код также должен close() попадать в клиентский сокет после того, как вы отправили ответ в браузер.

Комментарии:

1. В коде приложения клиент отключался после первого запроса, когда он отправлял connection: close

2. @Ferrybig: клиент ДОЛЖЕН отключиться. Смотрите также serverfault.com/questions/790197 /…