본문 바로가기
프로젝트/세미프로젝트-병원 종합정보시스템 사이트

[오류] 응답이 이미 커밋된 후에는, sendRedirect()를 호출할 수 없습니다.

by moca7 2024. 9. 27.

 

 

- "응답이 이미 커밋된 후에는, sendRedirect()를 호출할 수 없습니다."라는 오류가 뜬다.

 

 

 

 

ㅁ 원인

- 서블릿이 이미 클라이언트에게 응답을 보낸 후에 sendRedirect()를 호출했을 때 발생.

클라이언트에게 HTTP 응답이 완료된 이후에 추가적인 응답을 보내려고 할 때 발생하는 문제.

 

 

 

- 조건문으로 나누긴 했지만 하나의 if~else문이 아닌 2개의 if문에 sendRedirect 메소드가 있다.

- 회원정보를 제대로 입력하면 오류가 뜨지 않지만, 잘못 입력하면 아까 같은 오류가 뜬다.

 

- 그 이유는 response.sendRedirect()는 한 번만 호출되어야 하는데, 2번 호출되기 때문이다.

- sendRedirect()는 즉시 메소드 실행을 종료하는 것이 아니기 때문에, 메소드 내에서 다른 코드가 계속 실행될 수 있다.

 

- redirect 후에 System.out.println으로 콘솔에 찍어보니 redirect 후의 구문도 실행되어서 출력이 된다!

 

 

 

 

ㅁ 해결

 

 

- 첫번째 if문에 return;으로 redirect하면서 서블릿의 doGet 메소드를 종료한다.

- void 타입의 메소드도 사실 JVM이 끝에 return;을 붙여서 메소드를 종료시킨다.