2012-02-13 5 views
2

Tomcat 7에 배포 된 웹 응용 프로그램이 있고 거기에 트랜잭션 중 하나가 응용 프로그램에 텍스트 파일을로드하면 응용 프로그램에서 한 줄씩 읽은 다음 모든 레코드를 데이터베이스에 삽입합니다.Tomcat에서 요청 취소

큰 파일을 업로드 할 때 특히 거래를 취소하고 싶은지 사용자가 결정할 수 있도록 취소 버튼을 넣고 싶습니다. 다른 페이지로 이동하여 취소 버튼 역할을하는 링크를 넣으려고합니다. 이게 효과가 있니?

클라이언트가 15MB 파일을 업로드하면 처리가 10 분 정도 걸리며 스레드를 계속 진행 한 다음 취소 버튼으로 제공 한 링크를 클릭하여 취소할까요?

답변

1

일단 파일이 서버에 업로드되면 처리를 수행 할 스레드를 시작하고 어딘가에 (Hashtable과 같은) 참조를 저장하고 고유 한 ID를 지정하십시오. 그런 다음 취소 단추를 사용하여 페이지를 사용자에게 다시 렌더링하고 이전에 사용한 ID를 저장하여 페이지의 스레드에 대한 참조를 유지합니다.

취소를 클릭하면 해시 테이블로 돌아가서 ID가있는 스레드를 가져온 다음 가져 오기를 중지하라는 메시지를 보냅니다.

물론 데이터를 가져 오지 못하도록하는 방법은 현재 데이터베이스 트랜잭션을 고려하여 데이터베이스를 잘못된 상태로 두지 않아야합니다.

+0

그래서 사용자가 내가 제공 한 링크를 클릭하면 스레드가 취소되지 않습니까? – JZares

+0

@ Jf Beaulac이 암시하는 바는 Servlet/Endpoint에서 매개 변수로 ID를 사용하는 추가 메서드 (취소 메서드)를 작성한다는 것입니다. 사용자가 ID를 사용하여 해당 메소드를 호출하면 트랜잭션을 취소합니다. – blong

0

서버로 전송중인 요청을 중지 할 수 없다고 생각합니다. 업로드를 클릭하면 HTTP 요청을하고 프로세스가 시작되어 나중에 "취소/연결 u 제공됨"을 클릭하면 다른 HTTP 요청이되고 HTTP는 상태가 없으므로 이전에 어떤 일이 발생했는지 또는 어떤 일이 발생했는지 알 수 없습니다 그만하다. 예상대로 암묵적으로 가능하지 않습니다. 그러나 내가 이것을 알지 못하는 이것을 할 수있는 무언가가있을 수 있습니다. 하지만 "esc"키를 누르면 서버로 전송 된 요청이 종료됩니다. 이 유일한 해결책이 UI에 후 지금까지이기 때문에 당신이 자바 스크립트 코드를 작성할 수 있습니다 : IE에서 작동하지 않습니다

$('.your_link').click(function(){ 
     window.stop(); 
    }); 

window.stop을(). IE의 경우 다음을 사용할 수 있습니다 :

document.execCommand("Stop"); 
관련 문제