- "응답이 이미 커밋된 후에는, sendRedirect()를 호출할 수 없습니다."라는 오류가 뜬다.
ㅁ 원인
- 서블릿이 이미 클라이언트에게 응답을 보낸 후에 sendRedirect()를 호출했을 때 발생.
클라이언트에게 HTTP 응답이 완료된 이후에 추가적인 응답을 보내려고 할 때 발생하는 문제.
- 조건문으로 나누긴 했지만 하나의 if~else문이 아닌 2개의 if문에 sendRedirect 메소드가 있다.
- 회원정보를 제대로 입력하면 오류가 뜨지 않지만, 잘못 입력하면 아까 같은 오류가 뜬다.
- 그 이유는 response.sendRedirect()는 한 번만 호출되어야 하는데, 2번 호출되기 때문이다.
- sendRedirect()는 즉시 메소드 실행을 종료하는 것이 아니기 때문에, 메소드 내에서 다른 코드가 계속 실행될 수 있다.
- redirect 후에 System.out.println으로 콘솔에 찍어보니 redirect 후의 구문도 실행되어서 출력이 된다!
ㅁ 해결
- 첫번째 if문에 return;으로 redirect하면서 서블릿의 doGet 메소드를 종료한다.
- void 타입의 메소드도 사실 JVM이 끝에 return;을 붙여서 메소드를 종료시킨다.
'프로젝트 > 세미프로젝트-병원 종합정보시스템 사이트' 카테고리의 다른 글
[오류] 빈문자열을 insert하는 경우, java.sql.SQLIntegrityConstraintViolationException (0) | 2024.09.27 |
---|---|
[오답] SYSDATE로 INSERT한 데이터가 조회되지 않음 (0) | 2024.09.26 |
[오류] java.sql.SQLSyntaxErrorException (1) | 2024.09.23 |
[오답] Map 객체가 덮어씌워지는 문제 (0) | 2024.09.22 |
[오류] java.lang.Error: Unresolved compilation problem (0) | 2024.09.22 |