• 티스토리 홈
starryeye
  • 프로필사진
    starryeye
    • 분류 전체보기 (189)
      • C++ (17)
      • Java (24)
      • OOP (5)
      • Spring Reactive Stack (12)
        • Reactive Streams (3)
        • Netty (4)
        • Reactor (1)
        • Webflux (3)
        • DB, Cache 연동 (1)
      • Spring (90)
        • Core (17)
        • MVC (33)
        • Client (2)
        • Security (4)
        • DB, Cache 연동 (33)
      • DataBase (12)
        • RDBMS (2)
        • NoSQL (10)
      • Message Broker (6)
      • Web (4)
      • Network (4)
      • 대규모 시스템 설계 (15)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • Spring MVC 마스터하기 예외처리 2
        2022년 06월 11일
        • starryeye
        • 작성자
        • 2022.06.11.오후07:46

        예외처리 1번 포스팅에서는

        서블릿 컨테이너에서 처리 할 수 있는 예외를 알아보았다.. (혹은,, 예외가 발생 했다고 알아볼 수 있는.. 플래그..?)

        1. 일반 Exception

        2. sendError 메서드

         

        근데.. 톰캣 or 스프링에서 기본적으로 보여주는 뷰를 사용자에게 직접 보여준다는건 좀.. 아니다..

        에러페이지가 너무 성의없는 페이지로 보인다.

        개발자가 만들어놓은 에러페이지를 보여주는 방법을 알아보자..

         

        <참고>

        과거에는 web.xml이라는 파일에 에러페이지를 등록했다..

         

        서블릿 에러페이지 등록해보기 (스프링 부트가 제공하는 기능을 사용)

        스프링 빈으로 해당 객체를 등록해준다.

        WebServerFactoryCustomizer 를 상속받아 구현하면 된다.

        ErrorPage 객체를 생성하여 factory에 담아준다.

         

        컨트롤러에서 response.sendError(404) 를 호출 했다면..

        위 케이스에서는 /error-page/400 컨트롤러를 호출 하게 되며..

         

        컨트롤러에서 RuntimeException 또는 그 자식타입의 예외가 발생했었다면...

        /error-page/500 컨트롤러가 호출 된다.

         

        -> 결국 WAS까지 예외가 던져 지거나 정상적으로 return 된 경우엔 WAS sendError가 호출된 사실을 파악한 후,

        WebServerCustomizer 클래스에서 정의한 컨트롤러를 다시 호출 하게된다..

        -> 그러면.. 개발자는 /error-page/500 과 같은 url 을 처리할 컨트롤러를 만들어주고

        그 컨트롤러에서 개발자가 보여주고 싶은 에러페이지 뷰를 응답 할 수 있도록 하면 된다!

         

         

        개발자가 만든 에러페이지가 호출 되기까지의 흐름

        1. WAS -> 필터 -> DispatcherServlet(서블릿) -> 인터셉터 -> 컨트롤러
        2. 컨트롤러에서 sendError 호출 또는 일반 예외가 발생
        3. 컨트롤러 -> 인터셉터 -> 서블릿 -> 필터 -> WAS
        4. WAS에서 개발자가 정의한 url로 요청이 온것처럼 한다.
        5. WAS -> 필터 -> 서블릿 -> 인터셉터 -> 컨트롤러 -> 개발자가 정의한 에러페이지 뷰 응답!

        참고로 클라이언트는 서버 내부에서, WAS -> 컨트롤러, 컨트롤러 -> WAS로 왔다 갔다하는걸 모른다...

         

        WAS는 예외를 처리할때 단순히 새로운 컨트롤러를 호출하는게 아니라..

        request.attribute에 다양한 정보를 추가 해준다..

        아래는 key 이며, 개발자가 정의한 에러페이지를 보여주기 위한

        컨트롤러에서 request.getAttribute(key) 로 받을 수 있다.

         

        <key>

        "javax.servlet.error.exception" //예외 (sendError의 경우 null)

        "javax.servlet.error.exception_type" //예외 타입 (sendError의 경우 null)

        "javax.servlet.error.message" //오류 메세지

        "javax.servlet.error.request_uri" //클라이언트의 요청 URI (최초)

        "javax.servlet.error.servlet_name" //오류가 발생한 서블릿 이름 (컨트롤러에서 발생했다면 DispatcherServlet이다.)

        "javax.servlet.error.status_code" //Http status

        'Spring > MVC' 카테고리의 다른 글

        Spring MVC 마스터하기 예외처리 4  (0) 2022.06.11
        Spring MVC 마스터하기 예외처리 3  (0) 2022.06.11
        Spring MVC 마스터하기 예외처리 1  (0) 2022.06.11
        Spring MVC 마스터하기 5  (0) 2022.06.04
        Spring MVC 마스터하기 인터셉터 1  (0) 2022.06.04
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바

        단축키

        내 블로그

        내 블로그 - 관리자 홈 전환
        Q
        Q
        새 글 쓰기
        W
        W

        블로그 게시글

        글 수정 (권한 있는 경우)
        E
        E
        댓글 영역으로 이동
        C
        C

        모든 영역

        이 페이지의 URL 복사
        S
        S
        맨 위로 이동
        T
        T
        티스토리 홈 이동
        H
        H
        단축키 안내
        Shift + /
        ⇧ + /

        * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.