2009-08-19 5 views
0

다음과 같은 문제가 있습니다. 내 자바 스크립트 응용 프로그램에서 아약스 요청에 응답 자바 서블릿을 프로그래밍. 자바 서블릿의 대답은 xml 인코딩 된 메시지입니다. 일반적으로 모든 것이 잘 작동하지만, "너무 많이"(나는 생각한다) Ajax가 필요하다면, 더 많은 응답이 하나의 Ajax 응답 내에 있고 결과적으로 파이어 폭스는 "루트 문서 이후의 정크"라는 오류 메시지로 불평한다. 예 :AJAX 응답 문제

<root> 
<node1></node1> 
</root> 

<root> 
<node1></node1> 
</root> 

및 그 (두 번 하나의 메시지에 <root>)를 사용할 수 없습니다. 왜 이런 일이 생길까요? 나는 항상 각 Ajax 호출에 대해 새로운 서블릿 인스턴스가 시작될 것이라고 생각했다. 그게 잘못 됐니?

답변

0

앞의 대답은 맞습니다. "writer"라는 PrintWriter 멤버 변수가 문제입니다. Tomcat (또는 다른 서블릿 컨테이너)은 하나의 인스턴스가 하나 이상의 요청 을 동시에 처리 할 수 ​​있습니다.. 이것은 서블릿 프로그래밍의 문제의 공통 원인입니다. 여기

은 일부 의사 코드 무엇 Tomcat이 일을 할 수있다 ( 유효하고 쉽게 문제를 일으킬 수 있지만, 서블릿 예상) :
Servlet servlet = new ServletTest(); 

// in thread 1: 
servlet.doPost(request1, response1); 

// in thread 2: 
servlet.doPost(request2, response2); 

그래서 모두 request1 및 request2가

을 실행 할 수 있습니다 동시에, 작가 변수를 공유 할 수 있습니다. request1이 작성자를 설정하면 request2가 작성자를 설정하고 request1이 XML을 작성한 다음 request2가 XML을 작성하면 질문에 표시되는 출력이 표시됩니다.

+0

감사합니다. 시험해보고 결과를 알려 드리겠습니다. –

+0

이제 작동합니다, 감사합니다. –

1

서블릿 인스턴스는 컨테이너에 의해 관리되며 어떤 인스턴스가 들어오는 아약스 호출을 관리 할 것인지를 추측 할 수 없습니다. 따라서 인스턴스 변수를 사용하는 경우 문제가 발생할 수 있습니다. 따라서 하나의 서블릿 인스턴스가 하나의 요청 만 관리한다고 가정 할 수는 없습니다.

서블릿 코드를 게시 할 수 있으면 정확한 오류를 찾을 수 있습니다.