0
언더 토우를 사용하려고합니다. 여기 간단한 예 :언더 토우 다중 처리기 호출
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()");
}
}
}
작동합니다. 브라우저에 브라우저를 입력하고 처리기에서 creategreate를 실행하여 답변을 받으려면
http://localhost:3333/
을 입력하십시오. 그러나 핸들러는 2 번 반복됩니다! 콘솔에서 이러한 결과를 얻었습니다.
---------------------------------------------
start handleRequest()
cnt = 12rs = [email protected]
msg = msgPrev = 0; msgCur = 1
end connectToPg()
end handleRequest()
---------------------------------------------
start handleRequest()
cnt = 12rs = [email protected]
msg = msgPrev = 1; msgCur = 2
end connectToPg()
end handleRequest()
왜 2 번이라고 부르죠?
"/"& "/ something"을 다른 HttpHandler 인스턴스로 라우팅하기 위해 PathHandler를 사용했습니다. 이제 다음 코드에 대해 비슷한 결과가 나타납니다. 'undertow.getListenerInfo(). forEach (listenerInfo -> logger.info ("시도 {} :/{}", listenerInfo.getProtcol(), listenerInfo.getAddress()))'. 나는 'Try http : //127.0.0.1 : 8080'과 같이 두 번 인쇄 된 응답을받습니다. 관련이있는 것 같습니다. – dexter2305