sitelink1 http://www.java-forums.org/advanced-java...-ajax.html 
sitelink2  
sitelink3  
sitelink4 http://1 
extra_vars4 ko 
extra_vars5  
extra_vars6 sitelink1 

Question : flush data from servlet to jsp with ajax

I've a servlet that process a file and reports the number of line which has processed. In the other side, I have a JSP, wit a div. This jsp uses Ajax to call the servlet.

The intended result, is that Ajax receives all the out.print of the Servlet and with javascript update an html table in the jsp.

I've been able to update the table and all that, but only after the servlet finish, all the lines that is printing, are not received in the ajax (or printed in the page) until this servlet finishes.

I understand that Ajax can monitor the status of the servlet, and as I can see, it finishes when status is 4 (completed) and result is 200 (OK). I'm sending from the servlet the out.print("text"), but as I said, the jsp process it when both 4 state and 200 status are received, nothing is received while the servlet is processing.

Can you help me with this please?

These are some code snippets:
Ajax

Java Code:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

var dinformacion = document.getElementById("informacion");

            var isIE;

            function XMLHttp(url) {

                return XMLHttp(url, null);

            }

            function XMLHttp(url, callback, callbackprocess) {

                var req = init();

                req.onreadystatechange = processRequest;

                function init() {

                    if (window.XMLHttpRequest) {

                        return new XMLHttpRequest();

                    } else {

                        if (window.ActiveXObject) {

                            isIE = true;

                            return new ActiveXObject("Microsoft.XMLHTTP");

                        }

                    }

                }

                function processRequest() {

                    //dinformacion.innerHTML = req.readyState + "/" + req.status;

                 

                    if ((req.readyState == 4) && (req.status == 200) && (callback)) {

                        var a = req;

                        callback(req.responseText);

                    }

                    else {

                        //HERE IT FAILS ALL THE TIME

                        callbackprocess(req.responseText);

                    }

                }

                this.doGet = function () {

                    req.open("GET", url, true);

                    req.send(null);

                };

                this.doPost = function (body) {

                    req.open("POST", url, true);

                    req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

                    req.send(body);

                };

            }

            function getElementY(element) {

                var targetTop = 0;

                if (element.offsetParent) {

                    while (element.offsetParent) {

                        targetTop += element.offsetTop;

                        element = element.offsetParent;

                    }

                } else {

                    if (element.y) {

                        targetTop += element.y;

                    }

                }

                return targetTop;

            }

 

 

         

            var req = new XMLHttp("../servlet/ConsultaServlet",onServerResponse,onServerProcess);

            req.doPost();

             

            function onServerResponse(responseXML){

                responseXML = trim(responseXML);

                alert(responseXML);

            }

            var dproc = document.getElementById("process");

             

            function onServerProcess(responseXML){

                responseXML = trim(responseXML);

                dproc.innerHTML = responseXML;

                 

            }

And my servlet snippet:

Java Code:

1

2

3

4

5

6

7

...

for(int i=1;i<20;i++){

                 

                out.print(i);

                out.flush();

            }  

...

 

 

 

 

Answer : Reply t flush data from servlet to jsp with ajax

I think you yourself gave the answer to it....
 

I understand that Ajax can monitor the status of the servlet, and as I can see, it finishes when status is 4 (completed) and result is 200 (OK). I'm sending from the servlet the out.print("text"), but as I said, the jsp process it when both 4 state and 200 status are received, nothing is received while the servlet is processing.

You don't receive the XmlHttpRequest object and so the responseText until the servlet you're calling via AJAX completes its execution! You might get a better view of it if u put a Thread.sleep(2000)....i.e., a delay of 2secs in your "for" loop
 

Java Code:

1

2

3

4

5

6

for(int i=1;i<20;i++){

                 

                out.print(i);

                out.flush();

                                Thread.sleep(2000);

            }

So, you cannot get any responseText while the servlet is processing. To achieve something like this, people tend to use a 'server push' method. You might like to see topics like 'Comet' also called Reverse Ajax, pushlets to get responses from the servlet to the client and u can use them your own way to achieve your goal!

good luck!! :)

 

 

 

번호 제목 글쓴이 날짜 조회 수
166 XMLHttpRequest.setRequestHeader 황제낙엽 2013.09.30 407
165 HTTP Content-Type 정리 황제낙엽 2013.09.30 431
164 getBoundingClientRect in FF3 file 황제낙엽 2013.01.11 409
» 연속해서 스트림 받기 (flush data from servlet to jsp with ajax) 황제낙엽 2013.01.04 2815
162 Stack (스택) 예제 프로그램 황제낙엽 2012.12.27 387
161 상속과 Super 로의 접근 황제낙엽 2012.09.18 380
160 inherits() 를 이용한 상속 황제낙엽 2012.07.18 412
159 Javascript delete 황제낙엽 2012.06.11 421
158 delete 연산자에 대한 고찰 황제낙엽 2012.06.11 438
157 자바스크립트의 쉬프트 연산자 (Shift Operator) 와 음수 (Negative) 이야기 황제낙엽 2012.05.31 1052
156 연산자 (===, ==, >=, <=) 황제낙엽 2012.05.30 391
155 XMLHttpRequest 의 이벤트 onreadystatechange 황제낙엽 2012.05.30 673
154 JavaScript 재입문 황제낙엽 2012.05.29 373
153 진행 상황 추적하기(XMLHttpRequest.readyState) file 황제낙엽 2012.05.23 637
152 JavaScript Touch and Gesture Events iPhone and Android 황제낙엽 2012.04.12 750
151 Javascript ArrayBuffer ? Binary handling in javascript 황제낙엽 2012.03.19 724
150 오류:호출자(서버 응용 프로그램이 아닌 서버)가 사용될 수 없어서 사라졌습니다. file 황제낙엽 2012.03.14 2190
149 Alert 에서의 개행처리 황제낙엽 2012.03.09 397
148 env.js 사용시 부족한 부분 file 황제낙엽 2012.02.15 334
147 Rhino 와 env.js 를 사용해서 자바 서버에서 javascript 를 구동해보자 file 황제낙엽 2012.02.15 398