작성
·
671
3
sendError(400) 를 호출했기 때문에 WAS에서 다시 오류 페이지( /error )를 내부 요청한다.
라는 의미는 WAS에서 다시 디스패쳐 서블릿을 통해서 해당 에러를 요청하는 컨트롤러까지 다시 호출된다는 의미로 이해가됩니다.
그런데, sendError를 하면서 return ModelAndView를 하게 되면 이 에러는 resolve되어서 WAS에서는 정상적인 response로 처리된다고 이해를 했습니다.
ResponseStatusExceptionResolver.applyStatusAndReason
여기를 보면 이렇게 처리되어있습니다.
하지만 위 글의 첫 문장처럼 sendError를 하게되면 WAS에서는 내부적인 처리를 다시한다고 써있습니다 (dispacterType == ERROR)
ModelAndView를 반환해도, sendError를 같이 리턴하게 되면 다시 WAS 내부적으로 호출된다고 이해하면 되나요?
답변 1
5
뒤에 있는 강의를 보니 답이 있네요!!
ExceptionResolver는 Error를 해결할 '기회'가 주어집니다.
Resolver에서 HttpServletResponse.sendError()를 사용하지 않고 ModelAndView를 정상적으로 리턴한다면, WAS 내부적인 호출 없이 바로 Http 응답을 리턴합니다.
하지만 Resolver에서 sendError를 발생시키게 된다면, WAS가 dispatcherType == ERROR 형식으로 다시 내부적인 요청을 하게 됩니다. (이것을 BasicErrorController가 처리)
이렇게 이해하면 될까요?
김선도님 스스로 잘 해결하셨습니다.