스프링부트가 아닌, 스프링 프레임워크일 경우 BasicErrorController
안녕하세요,
스프링 부트일 경우, BasicErrorController 가 자동적으로 등록되어 사용된다고 하셨는데, 부트가 아닌 일반 스프링 프레임워크일 경우, BasicErrorController 와 비슷한 역할을 해주는 Controller 가 자동적으로 등록되지는 않는 것인지요?
부트가 아닌 스프링 프레임워크에서는 개발자가 예외나 response.sendError(); 에 대해서 아무런 대비/대처 설정 (예와나 sendError 를 처리해주는 코드를 작성하지 않았을 경우) 을 해주지 않았을 경우에는 어떤 default 설정을 따라가는지 궁금합니다.
스프링 부트일 경우,
WebServerFactoryCustomizer<ConfigurableWebServerFactory>를 구현한 클래스를 작성해서 ErrorPage를 지정해주고 있는데, 부트가 아닌 스프링 프레임워크에서는 어떻게WebServerFactoryCustomizer<ConfigurableWebServerFactory>를 구현한 것과 동일하게 custom 을 해줄 수 있는지 궁금합니다.
감사합니다.
답변 1
1
안녕하세요. kjoooo님
스프링 프레임워크와
BasicErrorController:스프링 부트에서는
BasicErrorController가 기본적으로 제공되어 예외 상황을 처리합니다. 이 컨트롤러는/error경로에 매핑되어 있으며, 애플리케이션에서 발생하는 대부분의 예외를 캐치하고 적절한 응답을 반환합니다.반면, 일반 스프링 프레임워크에서는
BasicErrorController와 같은 기본적으로 제공되는 에러 처리 컨트롤러가 없습니다. 따라서 개발자는 직접 예외 처리 로직을 구현해야 합니다. 이를 위해서는@ControllerAdvice와@ExceptionHandler를 사용하여 예외 처리 클래스를 만들 수 있습니다.
일반 스프링 프레임워크에서의 기본 에러 처리:
스프링 프레임워크에서 개발자가 별도의 에러 처리를 구현하지 않았을 경우, 서블릿 컨테이너(예: 톰캣)의 기본 에러 페이지가 사용됩니다. 이는 일반적으로 사용자에게 기술적인 세부 정보를 보여주는 것이 아니라, 간단한 에러 메시지나 상태 코드를 보여줍니다.
response.sendError()메소드를 호출할 때, 서블릿 컨테이너는 해당 상태 코드에 대응하는 기본 에러 페이지를 보여줍니다.
스프링 프레임워크에서의 커스텀 에러 페이지 설정:
스프링 부트에서는
WebServerFactoryCustomizer인터페이스를 구현하여 커스텀 에러 페이지를 설정할 수 있습니다. 그러나 일반 스프링 프레임워크에서는 이런 방식을 직접 구현할 필요가 있습니다.일반 스프링 프레임워크에서는 웹 서버의 설정(예: 톰캣)을 직접 조작하여 에러 페이지를 지정할 수 있습니다. 이는 보통 서블릿 컨테이너의 설정을 통해 이루어집니다. 여기서 각각의 에러 코드나 예외 타입에 대한 에러 페이지를 지정할 수 있습니다.
관련해서 스프링 부트 - 핵심원리와 활용 강의에서 스프링 없이 내장 톰캣이 어떻게 작동하는지 설명하고 있으니 참고해주세요.
1
답변 감사드립니다.
말씀해주신 3번 답변에 대해 추가적인 질문 사항이 있습니다.
서블릿 컨테이너의 설정을 통해 이루어진다고 하셨는데,
그럼 web.xml 에 (강의 노트에도 잠깐 언급되어 있는...)
<error-page>
<error-code>404</error-code>
<location>/error404</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/error500</location>
</error-page>
이 방식이랑, 말씀해주신 톰캣을 직접 조작하여 에러 페이지를 지정하는 것이랑은 완전히 다른 것인지요?
감사합니다.
이미지 업로드와 db 트랜잭션 묶는법
0
42
1
Could not resolve org.springframework.boot:spring-boot-starter-validation:2.4.4
0
52
2
MessageSourceTest 코드
0
47
1
인터셉터 에러 설정
0
48
1
resolveArgument()메서드 질문
0
57
1
43강 검증1 에서 실패 로직 관련 질문있습니다.
0
55
2
타임리프 3.X 버전 rendering, serializer 에러 해결 방법
2
133
3
스프링 빈에 등록이 안되는거 같은데 어떻게 하면 좋을까요?ㅠㅠ
0
90
3
pdf 오타 문의
0
57
1
ItemUpdateForm 검증 관련 질문입니다.
0
48
1
22page 링크 주소 변경
0
59
2
특정 데이터와 파일을 함께 저장 시, 테이블 구조 질문
0
53
1
섹션3번 수업에 대한 질문입니다.
0
80
2
@Autowired 보다 더 좋은 방법이 어떤 걸까요?
0
85
2
타입컨버터 가 람다랑 비슷해 보이는데 저의 생각이 맞는지?.
0
65
1
자바스크립트 인라인에서 객체 직렬화 시 오류가 납니다
0
142
3
스프링부트 - 오류페이지2 에서 500.html 에서 쓰인 객체 질문
0
63
1
톰캣 에러 페이지가 안보입니다.
0
102
2
apiEceptionController에서 센드 에러 호출하면 안되는지?
0
81
1
세션 타임아웃시 쿠키 삭제 방법이 없나요?
0
118
2
ApiExceptionController 질문드립니다.
0
64
1
셀렉박스 챕터에서 option value에 ==배송 방식 선택== 이것을 넣은 이유가 궁금함, 이렇게 구상해도 되는지?
0
66
1
MemberRepository 필드의 fianl 선언 유무
0
85
2
혹시 index.html 에서는 fragment 사용이 안되는건가요
0
58
1





