微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

com.sun HttpContext 处理程序被多次调用

如何解决com.sun HttpContext 处理程序被多次调用

我正在尝试制作一个简单的 HttpServer,它可以为动态创建的网页提供服务。但是,我注意到我的 HttpServer 的 HttpContext 处理程序被多次调用,无论我使用什么浏览器。相关代码附在下面:

主类中的主方法

    public static void main(String[] args) throws ParseException {
        try {
            HttpServer server = HttpServer.create(new InetSocketAddress(80),0);
            HttpContext context = server.createContext("/");
            context.setHandler(exchange -> {
                switch (exchange.getRequestMethod()) {
                    case "GET": httpGet(exchange); break;
                    case "HEAD": httpHead(exchange); break;
                    // ... redacted for brevity
                }
            });
            server.start();
        } catch (IOException e) {
            e.printstacktrace();
        }
    }

主类中的处理程序:

    private static final void httpGet(HttpExchange exchange) throws IOException {
        System.out.println(exchange);
        String[] resource = exchange.getRequestURI().toString().substring(1).split("/");
        String page;
        if (resource.length <= 0) {
            // serve the home page
            page = "home";
        } else if (resource[0].equals("stock")) {
            if (resource.length < 2) {
                // display stock index
                page = "index";
            } else {
                String ticker = resource[1];
                if (resource.length < 3) {
                    // display stock summary
                    page = "summary";
                } else {
                    String targetPage = resource[2];
                    page = DatabaseAbstraction.getPage(ticker,targetPage);
                }
            }
        } else {
            page = DatabaseAbstraction.get404Page();    
        }
        exchange.sendResponseHeaders(200,page.getBytes().length);
        exchange.getResponseBody().write(page.getBytes());
        exchange.getResponseBody().close();
        return;
    }

DatabaseAbstraction 委托页面生成并将(在未来)处理页面缓存。我主要关心的是处理程序本身,而不是数据库方法,无论使用哪个浏览器加载它,似乎都会被调用三到五次。

我认为这可能是超时,但有没有人对导致这种情况的原因有明确的答案或经验?任何帮助表示赞赏。谢谢!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。