首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Undertow多处理程序调用

Undertow多处理程序调用
EN

Stack Overflow用户
提问于 2014-09-29 22:17:59
回答 1查看 1.5K关注 0票数 0

尝试使用Undertow。下面是一个简单的例子:

代码语言:javascript
复制
public class MyExample {

private static int SIMPLE_HANDLER_CALL = 0;
private static int LIBRE_OFFICE_CALL = 0;

public static void main(String[] args) {

    Undertow server = Undertow.builder()
            .addHttpListener(3333, "localhost")
            .setHandler(new SimpleHttpHandler())
            .build();

    server.start();
}

private static class SimpleHttpHandler implements HttpHandler{
    @Override
    public void handleRequest(HttpServerExchange exchange) throws Exception {
        System.out.println("---------------------------------------------");
        System.out.println("start handleRequest()");
        exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "text/plain");
        connectToPg(exchange, "msgPrev = " + Integer.toString(SIMPLE_HANDLER_CALL) + "; msgCur = " + Integer.toString(++SIMPLE_HANDLER_CALL));
        System.out.println("end handleRequest()");
    }
}

private static void connectToPg(HttpServerExchange exchange, String msg){
    try(
            Connection connection = DriverManager.getConnection("jdbc:postgresql://10.10.2.158:5432/myDb", "myUser", "myPass");
            Statement st = connection.createStatement();
    )
    {
        ResultSet rs = st.executeQuery("select count(*) as CNT from event.event");

        java.util.Date now = new java.util.Date();
        while(rs.next()){
            int cnt = rs.getInt("CNT");
            System.out.print("cnt = " + cnt);
            exchange.getResponseSender().send("Date = " + now + "; cnt = " + cnt);
        }

        System.out.println("rs = " + rs.toString());
        System.out.println("msg = " + msg);
    }
    catch (Exception ex){
        System.out.println(ex.getMessage());
    }
    finally {
        System.out.println("end connectToPg()");
    }
}
}

它起作用了。I类型

代码语言:javascript
复制
http://localhost:3333/

在浏览器和处理程序中创建对Postgres的查询并接收应答。但是,处理程序会重复2次!我在控制台中得到这样的输出:

代码语言:javascript
复制
---------------------------------------------
start handleRequest()
cnt = 12rs = org.postgresql.jdbc4.Jdbc4ResultSet@12eeffa4
msg = msgPrev = 0; msgCur = 1
end connectToPg()
end handleRequest()
---------------------------------------------
start handleRequest()
cnt = 12rs = org.postgresql.jdbc4.Jdbc4ResultSet@17b98b20
msg = msgPrev = 1; msgCur = 2
end connectToPg()
end handleRequest()

为什么会调用2次?

EN

回答 1

Stack Overflow用户

发布于 2014-10-02 20:28:58

我建议打印(或注销)交换参数,看看正在处理的是哪种类型的请求。

System.out.println(exchange.getRequestURL());

一种选择是第二个请求是针对/favicon.ico的。你也可以尝试以更有控制力的方式发出请求。使用REST客户端之一,甚至curl。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26102064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档