2010-03-14 5 views
1

저는 Java Servlets과 Ajax를 가지고 놀았으며, 상황에 대해 조언 해 주시면 감사하겠습니다.자바 서블릿에서 doGet/dopost 중지 중?

의 내가 시작으로 HTML 페이지가 버튼을 중지하고 있다고 가정 해 봅시다 시작 버튼을 클릭 한 결과,
무시 완료하는 데 시간이 오래 걸리는 것을 계산의 doGet (또는의 doPost) 서블릿에 방법 호출 . (예 : 거대한 루프 또는 무한 루프)은 중요하지 않습니다. 개념에 관심이 많습니다. 그래서

, 난 당신을 부탁 해요 :

1.What는 죽일 내 옵션이 될 것입니다/종료 다운/정지/종료 의 doGet 방법 whan 내가 웹 페이지에 정지 버튼을 누르면? 여기에 스레딩을 사용합니까, 아니면 더 간단한 방법이 있습니까? 시스템 종료를 사용하는 것이 그리 좋은 생각이 아닙니다. ;)

2. 그렇다면 doGet 메서드를 중지하기위한 코드를 구현한다고 가정 해 봅시다. 무슨 일이 일어날 지 하나의 브라우저 (예 : IE)에서 시작 버튼을 클릭하고이 길이가 길어질 때 (예 : Firefox) 새 탭이나 다른 브라우저 (예 : Firefox)를 열어 동일한 URL을 열고 을 누르십시오. 원래의 계산을 멈출 수 있습니까? 이것을 피할 수있는 쉬운 방법이 있습니까?

저는 서버 측에서부터 시작하기 때문에 약간의 질문이 있다는 것을 알고 있습니다. :)

의견을 보내 주시면 대단히 감사하겠습니다.

답변

2

stop 처리기는 세션 컨텍스트에 플래그를 설정할 수 있습니다.이 플래그는 장기 실행 스레드가 때때로 확인하고 필요한 경우 종료됩니다.

페이지가로드 될 때마다 고유 한 작업 ID를 생성하여 여러 브라우저 문제를 피할 수 있습니다. 특정 작업 만 시작하거나 중지 할 수 있습니다. 이 ID는 세션의 키가 될 수 있습니다.

+0

고정 세션이없는 클러스터 환경을 제외하고는 정확합니다. 거기에는 분산 캐시 나 데이터베이스 같은 공유 객체를 사용하여 플래그를 전달해야합니다. –

0

요청을 제출 한 후 시작된 새로운 프로세스가 필요하다고 생각합니다.이 프로세스는 런타임 중에 응답을해야합니다 (예 : AJAX를 통한 진행 상황 표시). 또한 stop 명령으로 새로운 요청이 있는지 확인해야합니다. 페이지는 진행/결과/중지 버튼이있는 AJAX 여야합니다.

관련 문제