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

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

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 OK\r\n" +
                "Server: YarServer/2009-09-09\r\n" +
                "Content-Type: text/html\r\n" +
                "Content-Length: " + document.length() + "\r\n" +
                "Connection: close\r\n\r\n";
        out.println(response+document);

    }
}

1 Ответ

1 голос
/ 26 марта 2019

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

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

 GET /?say=hello HTTP/1.1

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

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

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

...