SPRING/접했던 오류

HttpServletRequest - sendError()

고민말고생각하는사람 2024. 8. 21. 23:11
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    String requestURI = req.getRequestURI();
    ControllerV2 controller = controllerMap.get(requestURI);
    if (controller == null) {
        resp.sendError(HttpServletResponse.SC_NOT_FOUND);
    }
    MyView view = controller.process(req, resp);
    view.render(req, resp);
}

 

상황

이상한 uri로 요청이 들어왔을 때 해당 요청을 처리할 객체가 없음을 바로 알리기 위해 sendError() 사용.

 

그러나,

500 server 에러와 함께 에러 페이지로 이동됨.

 

해결

return; 으로 메서드 종료 시켰더니 해결됨.

protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    String requestURI = req.getRequestURI();
    ControllerV2 controller = controllerMap.get(requestURI);
    if (controller == null) {
        resp.sendError(HttpServletResponse.SC_NOT_FOUND);
        return;
    }
    MyView view = controller.process(req, resp);
    view.render(req, resp);
}

 

원인

문제가 된 코드(최상단)는 찾는 controller가 null 이면 에러를 보내지만, 결국 아래 코드들이 실행됨.

controller 는 null 이므로, NPE가 터지면서, NPE가 터졌을 때의 후속처리(페이지 이동, 오류메세지 노출 등)가 없어 

갈 곳 잃은 NPE가 클라이언트(브라우저)까지 돌아가며 500 에러 발생

java.lang.NullPointerException

 

====

예외 처리에 대한 학습 심화 필요