如何更改此代码,以便在输入localhost:9080 /?say = hello时输出hello?

问题描述 投票:1回答:1

当我输入enter localhost:9080 /?say = hello时,我正在尝试输出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);

    }
}
java serversocket
1个回答
1
投票

当然这是一项学校工作,所以我不会给你一个现成的工作解决方案,只是一些提示。

HTTP协议简化了许多,在客户端和服务器之间交换文本字符串。您的代码已经打印出浏览器发送给您服务器的字符串;看看第一行:它说

 GET /?say=hello HTTP/1.1

“GET”是一个“HTTP method”,它后跟你请求的服务器端资源的路径(在这种情况下只是一个斜杠)加上任何请求参数(问号后面的部分)和协议版本。

要对客户端请求的特定路径/参数执行特定操作,您的代码应检查浏览器提交的第一行文本(例如,您应检查是否存在/?say=hello)。

此外,通常HTTP服务器在第一次请求后不会关闭,因此您的代码应包含另一个无限循环,以便在服务第一个请求后等待另一个连接。在将响应发送到浏览器后,您的代码也应该close()客户端套接字。

© www.soinside.com 2019 - 2024. All rights reserved.