【问题标题】:Use if statement in HttpServer handler在 HttpServer 处理程序中使用 if 语句
【发布时间】:2014-08-12 18:49:57
【问题描述】:

当用户想要http://localhost:8000/a 时,我希望I am A response 消息应该显示,(并正确显示)

但我想在使用时需要http://localhost:8000/b I am B response 消息显示。

httpServer handler中的if语句如何使用?

public class httpServerTest {

public static void main(String[] args) throws Exception {
    HttpServer server = HttpServer.create(new InetSocketAddress(8000), 0);
    server.createContext("/a", new MyHandler());
    server.createContext("/b", new MyHandler());
    server.setExecutor(null); // creates a default executor
    server.start();
}

public static class MyHandler implements HttpHandler {

    @Override
    public void handle(HttpExchange t) throws IOException { // How use if here?
        String aResponse = "I am A response";
        String bResponse = "I am B response";
        t.sendResponseHeaders(200, aResponse.getBytes().length);
        OutputStream os = t.getResponseBody();
        os.write(aResponse.getBytes());
        os.close();
    }
}
}

它只显示I am A response 消息。

【问题讨论】:

    标签: java httphandler httpserver


    【解决方案1】:
    HttpServer server = HttpServer.create(new InetSocketAddress(8000), 0);
    server.createContext("/a", new MyHandler("A"));
    server.createContext("/b", new MyHandler("B"));
    
    public static class MyHandler implements HttpHandler {
    
        private String identity;
    
        public MyHandler(String identity) {
            this.identity = identity;
        }
    
        @Override
        public void handle(HttpExchange t) throws IOException { // How use if here?
            String response = "I am " + identity + " response";
            t.sendResponseHeaders(200, response.getBytes().length);
            OutputStream os = t.getResponseBody();
            os.write(response.getBytes());
            os.close();
        }
    }
    

    【讨论】:

      【解决方案2】:

      您似乎在引用 com.sun.* 私有类,因此将来可能无法使用。话虽如此,您似乎想要getRequestURI

      然后你可以说if (t.getRequestURI().getPath().startsWith("/a")) { ... } else {... }

      【讨论】:

      • 如何获取客户端IP地址?我用这个:t.getRemoteAddress().getAddress() 但显示:[/0:0:0:0:0:0:0:1]
      • 这是正确的调用——该地址是 IPv6 中的环回地址(即您正在对自己的计算机进行测试或使用通过 localhost 连接的代理)
      猜你喜欢
      • 1970-01-01
      • 2013-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-22
      • 2017-02-17
      • 2012-02-09
      • 1970-01-01
      相关资源
      最近更新 更多