Inflearn brand logo image

인프런 커뮤니티 질문&답변

장주윤님의 프로필 이미지
장주윤

작성한 질문수

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

서블릿 예외 처리 - 오류 화면 제공

오류페이지 404 화면 안나옴

작성

·

215

0

package hello.exception.servlet;

import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

import java.io.IOException;

@Slf4j
@Controller
public class ServletExController {

    @GetMapping("/error-ex")
    public void errorEx() {
        throw new RuntimeException("예외발생");
    }

    @GetMapping("/error-404")
    public void send404Error(HttpServletResponse response) throws IOException {
        response.setStatus(404); // 상태 코드 설정
        response.getWriter().write("404 오류 발생");
    }

    @GetMapping("/error-500")
    public void send500Error(HttpServletResponse response) throws IOException {
        response.setStatus(500); // 상태 코드 설정
        response.getWriter().write("500 오류 발생");
    }
}

image.png

이렇게 400오류일 때 페이지를 설정해도 error-404로 들어가면 오류가 발생하고 error-400에 들어가면 404 화면이 나옵니다.

image.pngimage.pngimage.pngimage.png

application.properties는 이렇게 구성되어있고, html파일은 수업 자료 코드 그대로 가져왔습니다.

확인 한번 해주시면 감사하겠습니다.

답변 2

1

장주윤님의 프로필 이미지
장주윤
질문자

네 질문작성하고 addErrorPage()에 errorPage400를 추가하지 않은것을 발견해 해당코드를 추가한 뒤에 404페이지 열어보아도 여전히 '404 ?? ??'가 떠요. 확인해야 될 다른 코드가 있을까요?

아 제가 질문을 잘못 이해했습니다. 죄송합니다

말씀하신 것과 캡처본을 종합해봤을 때 /error-404 url을 호출했을 때 강의 화면과 다른 화면이 뜨는 것이 문제로 보입니다.

제가 전에 말씀드린 errorPage400을 추가하는 것은 문제 해결에 도움이 되지 않습니다!

잘못된 답변을 드려 죄송합니다.

 

그보다는 기존 ServletExController 수정과 ErrorPageController를 강의와 똑같이 구현해주시는 게 중요합니다.

예를 들어 지금 ServletExController 에서 해주신 구현은 response.getWriter().write()를 통해 응답을 그대로 조작해버리기 때문에 강의화면과 다릅니다!

ServletExController에서는 강의와 같이 response.sendError() 만 해주시고, ErrorPageController를 추가해주십쇼!

@GetMapping("/error-404")
public void error500(HttpServletResponse response) throws IOException {
    response.sendError(404);
}

 

 

장주윤님의 프로필 이미지
장주윤
질문자

네 말씀해주신 대로 코드 수정하니 오류 없이 잘 작동합니다! 감사합니다.

0

안녕하세요. 장주윤님, 공식 서포터즈 y2gcoder입니다.

첫번째 캡처화면에서 addErrorPage() 내에 errorPage400을 추가한 후에 실행해보신 것일까요?

factory.addErrorPage(errorPage400, errorPage500, errorPage404, errorPageEx);

 

감사합니다.

장주윤님의 프로필 이미지
장주윤

작성한 질문수

질문하기