2016-11-14 5 views
0

인턴 과정에 문제가 있습니다. 서블릿에 Ajax POST를 실행해야합니다. 서블릿은 미래를 통해 액터에게 메시지를 보내고 미래가 끝나면 응답을 반환합니다. 이것이 가능한가?선물 완료 후 Ajax 응답을 반환하십시오.

예 :

public void resultRetrieveAsync(HttpServletRequest request, HttpServletResponse response) throws Exception {  

    ActorRef sender = i create this sender someway; 
    Future<Object> future = Patterns.ask(sender, "HELLO", 5000); 
    //Let's imagine another actor has to respond "Hello Sender" 

    String hello = (String)Await.result(future, new Timeout(5000).duration()); 

    PrintWriter out = response.getWriter(); 
    out.print(hello); 
} 

어떻게 현명하게 그 "기다리고 있습니다"의 사용을 피할 수있다? 대기 시간을 서버에서 멀리 "이동"하고 액터 기반 응용 프로그램에서 훨씬 더 많은 것을 상상해보십시오.

"Ajax"의 경우 가장 간단한 Ajax 게시물을 상상해보십시오.

나는 이것을 수행하는 방법을 알 수 없다! 미리 감사드립니다.

답변

1

future.get() 다시 와서 결과를 제공하기 위해 응답을 기다릴 것입니다 SYNCHRONOUS.

String hello = (String) future.get(); 

참고 : .get() 메서드는 호출을 동기식으로 만듭니다.

ASYNC

이가 올바른 방향으로 포인트

CompletableFuture.supplyAsync(/* call your AJAX endpoint here */) 
       .thenAccept(/* display your HELLO String here */); 

희망을 사용할 수 있습니다! 그 후

function myFunction() {  
    $.ajax({ 
     type: 'POST', 
     url: 'SOME_URL', //Make sure you put the correct endpoint URL here!     
     data: MY_DATE, //form data, or whatever here    
     contentType: 'application/json', 
     success: function(data) { 
        //DO SOMETHING HERE AFTER YOU GET THE RESPONSE       
       }, 
     error: function(jqXHR, textStatus, errorThrown) { 
        //Do something on ERROR here        
       } 
    }); 

} 

단지 click 경우이든에 myFunction()를 호출

EDIT 여기

는 AJAX POST 할 것이다 일례 JS 함수이다.

+0

답장을 보내 주셔서 감사합니다. @Mechkov, 시간이 있으시면 스크립트 예제를 제공해 주시겠습니까? –

+0

많은 감사합니다! 필자는 좀 더 자세히 설명 하겠지만 ComparableFuture는 Java 8 기능이며 Java 7을 사용해야합니다. –

+0

다음은 사용할 수 없습니다. 그것은 Java 8 기능입니다. – Mechkov