[SPRING] 봄 부팅 및 맞춤 404 오류 페이지
SPRING봄 부팅 및 맞춤 404 오류 페이지
Spring Boot 애플리케이션에서 사용자 정의 오류 페이지를 구성하려고합니다. 예를 들어 404의 경우 다음 Bean을 내 애플리케이션 구성에 추가했습니다.
@Bean
public EmbeddedServletContainerCustomizer containerCustomizer() {
return new EmbeddedServletContainerCustomizer() {
@Override
public void customize(ConfigurableEmbeddedServletContainer container) {
container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/404.html"));
}
};
}
또한 다음 간단한 Thymeleaf 템플릿을 만들었습니다.
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head>
<title>404 Not Found</title>
<meta charset="utf-8" />
</head>
<body>
<h3>404 Not Found</h3>
<h1 th:text="${errorCode}">404</h1>
<p th:utext="${errorMessage}">Error java.lang.NullPointerException</p>
<a href="/" th:href="@{/}">Back to Home Page</a>
</body>
</html>
/ resources / templates / 폴더에 추가했습니다. 404 오류가 발생하면 흰색 화면 만 볼 수 있습니다.
내가 뭘 잘못하고 내 404 페이지를 올바르게 설정하는 방법? 또한 사용자 정의 오류 페이지에 정적 페이지가 아닌 템플릿을 사용할 수 있습니까?
해결법
-
==============================
1.Spring Boot 1.4.x에서는 다음과 같이 사용자 정의 오류 페이지를 추가 할 수 있습니다.
Spring Boot 1.4.x에서는 다음과 같이 사용자 정의 오류 페이지를 추가 할 수 있습니다.
-
==============================
2.Thymeleaf를 사용 중이며 Thymeleaf는 컨트롤러없이 오류를 처리 할 수 있습니다.
Thymeleaf를 사용 중이며 Thymeleaf는 컨트롤러없이 오류를 처리 할 수 있습니다.
일반 오류 페이지의 경우이 Thymeleaf 페이지의 이름을 error.html로 지정해야합니다. src / main / resources> templates> error.html 아래에 위치해야합니다.
특정 오류 페이지의 경우 http 오류 코드로 이름 지정된 파일을 src / main / resources / templates / error / 404.html과 같은 error 폴더에 만들어야합니다.
-
==============================
3./404.html은 템플릿 이름이 아닌 리디렉션 할 URL 경로를 나타냅니다. 템플릿을 사용하기를 원한다면 /404.html을 처리하고 404.html을 src / main / resources / templates에 렌더링하는 컨트롤러를 만들어야합니다.
/404.html은 템플릿 이름이 아닌 리디렉션 할 URL 경로를 나타냅니다. 템플릿을 사용하기를 원한다면 /404.html을 처리하고 404.html을 src / main / resources / templates에 렌더링하는 컨트롤러를 만들어야합니다.
@Controller public class NotFoundController { @RequestMapping("/404.html") public String render404(Model model) { // Add model attributes return "404"; } }
View Controller로 렌더러 컨트롤러를 바꿀 수도 있습니다.
@Configuration public class WebConfig extends WebMvcConfigurerAdapter { @Override public void addViewControllers(ViewControllerRegistry registry) { registry.addViewController("/404.html").setViewName("404"); } }
예, 가능합니다. 그러나 발견되지 않은 페이지는 일반적으로 정적이며 일반 텍스트 대신 서식 파일을 사용합니다. 오래된 HTML은 그다지 의미가 없습니다.
-
==============================
4.질문에서 제안한 것과 같이 Thymeleaf를 사용하는 경우 이전 응답의 것과 유사한 템플리트를 사용할 수 있지만 Freemarker가 아닌 Thymeleaf에 적합합니다. 나는 또한 스타일링을위한 부트 스트랩을 추가했다.
질문에서 제안한 것과 같이 Thymeleaf를 사용하는 경우 이전 응답의 것과 유사한 템플리트를 사용할 수 있지만 Freemarker가 아닌 Thymeleaf에 적합합니다. 나는 또한 스타일링을위한 부트 스트랩을 추가했다.
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <title>Error Page</title> <link href="/webjars/bootstrap/3.3.7-1/css/bootstrap.min.css" rel="stylesheet" media="screen"/> <script src="/webjars/jquery/3.2.1/jquery.min.js"></script> <script src="/webjars/bootstrap/3.3.7-1/js/bootstrap.min.js"></script> </head> <body> <div class="container"> <div class="jumbotron alert-danger"> <h1>Oops... something went wrong.</h1> <h2 th:text="${status + ' ' + error}"></h2> </div> </div> </body> </html>
이 코드를 error.html이라는 파일에 넣고 thymeleaf templates 디렉토리에 넣어야합니다. 작동시키기 위해 컨트롤러를 추가 할 필요가 없습니다.
-
==============================
5.EmbeddedServletContainerCustomizer 빈은 필요하지 않습니다. 공용 디렉토리에 해당 오류 페이지 (404의 경우 404.html 등)를 넣기 만하면됩니다 (@brunoid가 가리키는 것처럼).
EmbeddedServletContainerCustomizer 빈은 필요하지 않습니다. 공용 디렉토리에 해당 오류 페이지 (404의 경우 404.html 등)를 넣기 만하면됩니다 (@brunoid가 가리키는 것처럼).
또한 응용 프로그램에 오류나 예외가 발생할 때마다 표시되는 일반 error.html 페이지를 삽입 할 수도 있습니다.
간단한 예 (Freemarker에서) -
<html lang="en"> <head> </head> <body> <div class="container"> <div class="jumbotron alert-danger"> <h1>Oops. Something went wrong</h1> <h2>${status} ${error}</h2> </div> </div> </body> </html>
그러면 적절한 오류 상태와 해당 오류 메시지가 표시됩니다. Spring Boot를 사용하고 있기 때문에 오류 페이지에 표시되는 상태 및 오류 메시지를 항상 무시할 수 있습니다.
-
==============================
6.Thymeleaf는 컨트롤러없이 오류를 처리 할 수 있습니다. 리소스 폴더에 error.html을 작성하십시오.
Thymeleaf는 컨트롤러없이 오류를 처리 할 수 있습니다. 리소스 폴더에 error.html을 작성하십시오.
-
==============================
7.우리는 새로운 것을 추가해야한다.
우리는 새로운 것을 추가해야한다.
@Controller public class MyErrorController implements ErrorController { @RequestMapping("/error") public String handleError(HttpServletRequest request) { Object status = request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE); if (status != null) { Integer statusCode = Integer.valueOf(status.toString()); if(statusCode == HttpStatus.NOT_FOUND.value()) { return "error404"; } else if(statusCode == HttpStatus.INTERNAL_SERVER_ERROR.value()) { return "error500"; } } return "error"; } @Override public String getErrorPath() { return "/error"; } }
from https://stackoverflow.com/questions/37398385/spring-boot-and-custom-404-error-page by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] spring restTemplate을 사용한 REST API의 기본 인증 (0) | 2018.12.24 |
---|---|
[SPRING] Spring MVC에서 web.xml에 ContextLoaderListener 추가하기 (0) | 2018.12.24 |
[SPRING] 동적 속성 목록을 스프링 관리 빈으로 읽기 (0) | 2018.12.23 |
[SPRING] 두 컨텍스트에 빈이 포함되도록 Java-config 클래스를 XML-config로 가져 오는 방법은 무엇입니까? (0) | 2018.12.23 |
[SPRING] Spring 3.0 MVC 바인딩 Enums 대 / 소문자 구분 (0) | 2018.12.23 |