inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

정리

스프링 부트가 errorPage 자동으로 등록할 때 질문입니다.

304

비가싫어요

작성한 질문수 87

1

스프링부트가 제공하는 기능 중 errorPage를 자동으로 등록해주고 /error 라는 경로로 기본 오류 페이지를 설정한다는 부분에서 이해가 되지 않는 것이 있습니다.

이 때 /error라는 경로는 URL 경로를 의미하는 것인가요 아니면 에러 페이지가 있는 파일 경로를 의미하는 것인가요?

spring MVC

답변 1

4

OMG

안녕하세요.JUNN 님, 공식 서포터즈 OMG입니다.

-
"스프링부트 - 오류페이지1" 에서 영한님이 설명해주시는데요, 실제 스프링부트가 구현한 클래스의 코드와 같이 보시면 이해하시는 데에 도움이 됩니다.

  • 메뉴얼을 보시면 아래와 같이 ErrorMvcAutoConfiguration 클래스에서 오류 페이지를 자동 등록해준다고 나와있습니다.

imageimage에러페이지를 등록하는 registerErrorPages를 보면 new ErrorPage(인자) 코드에서 인자로 URL경로를 받는 것을 확인하실 수 있습니다.

여기서 인자는 this.dispatcherServletPath.getRelativePath(this.properties.getError().getPath())

dispatcherServletPath에서 상대경로를 가져오는데, 여기서 상대경로란 설정파일에서 에러 경로로 지정한 (/error 겠죠?) 값을 가져옵니다.

그러면 강의에서 설명한 아래 내용에 대해 확인해 보았습니다.

image

다음으로 BasicErrorController를 보면 마찬가지로 강의에서 설명하시는데,

image

2분 45초 설명을 보시면 "외부에서 경로를 설정할 수 있는데 없으면 /error로" 간다고 설명하십니다.

@RequestMapping에서 분기처리로 별도의 에러경로가 없으면 "/error"에 대한 처리를 받도록 되어있습니다.

image클래스 레벨에서 경로를 받고, 메서드 레벨에서는 두 가지 경우에 대해서 처리하고 있는데요, 여기서 봐야 할 것은 위에 있는

@RequestMapping(produces = MediaType.TEXT_HTML_VALUE)
public ModelAndView errorHtml(HttpServletRequest request, HttpServletResponse response) {
   HttpStatus status = getStatus(request);
   Map<String, Object> model = Collections
         .unmodifiableMap(getErrorAttributes(request, getErrorAttributeOptions(request, MediaType.TEXT_HTML)));
   response.setStatus(status.value());
   ModelAndView modelAndView = resolveErrorView(request, response, status, model);
   return (modelAndView != null) ? modelAndView : new ModelAndView("error", model);
} 

이 코드입니다.

 ModelAndView modelAndView = resolveErrorView(request, response, status, model);
 return (modelAndView != null) ? modelAndView : new ModelAndView("error", model);

별도로 생성될 ModelAndView(에러 페이지)가 있다면 해당 뷰를 반환하고 그렇지 않은 경우

viewName이 error인 화면을 생성해서 반환합니다.

image

영한님 설명, 제 설명, 실제 코드, 자료 등을 다시 한번 곱씹으면서 보시면 이해 되실꺼에요 ^^

-
감사합니다.

이미지 업로드와 db 트랜잭션 묶는법

0

43

1

Could not resolve org.springframework.boot:spring-boot-starter-validation:2.4.4

0

53

2

MessageSourceTest 코드

0

49

1

인터셉터 에러 설정

0

48

1

resolveArgument()메서드 질문

0

57

1

43강 검증1 에서 실패 로직 관련 질문있습니다.

0

58

2

타임리프 3.X 버전 rendering, serializer 에러 해결 방법

2

133

3

스프링 빈에 등록이 안되는거 같은데 어떻게 하면 좋을까요?ㅠㅠ

0

90

3

pdf 오타 문의

0

57

1

ItemUpdateForm 검증 관련 질문입니다.

0

49

1

22page 링크 주소 변경

0

59

2

특정 데이터와 파일을 함께 저장 시, 테이블 구조 질문

0

53

1

섹션3번 수업에 대한 질문입니다.

0

80

2

@Autowired 보다 더 좋은 방법이 어떤 걸까요?

0

85

2

타입컨버터 가 람다랑 비슷해 보이는데 저의 생각이 맞는지?.

0

66

1

자바스크립트 인라인에서 객체 직렬화 시 오류가 납니다

0

142

3

스프링부트 - 오류페이지2 에서 500.html 에서 쓰인 객체 질문

0

63

1

톰캣 에러 페이지가 안보입니다.

0

104

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