Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Java
- JavaScript
- IntelliJ
- Security
- aws
- 오라클
- 코틀린
- db
- Eclipse
- 함수
- Git
- jquery
- 알고리즘
- 프로그래머스
- Vue
- error
- 시큐리티
- 생성
- mybatis
- 스프링
- JPA
- oracle
- 넥사크로
- 쿼리
- 자바
- kotlin
- Spring
- GitHub
- 방법
- 에러
Archives
- Today
- Total
송민준의 개발노트
404 에러, Exception 처리 본문
404에러의 경우 DispatcherServlet에 의해 처리된다. @ControllerAdvice에서 익셉션 처리를 할수 있도록 설정함
404 에러 페이지로 넘기지 않고, 익셉션을 발생 시키는 설정
ExceptionController.java
package com.naver.myhome5.controller;
import javax.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.NoHandlerFoundException;
/* @ControllerAdvice 어노테이션을 통해서 이 클래스의 객체가 컨트롤러에서 발생하는
* Exception을 처리하는 클래스라는 것을 명시합니다.
*
* 방식은 다음과 같다.
*
* 1. 클래스에 @ControllerAdvice 라는 어노테이션 처리
* 2. 각 메소드에 @ExceptionHandler를 이용해서 적절한 타입의 Exception을 작성
* */
@ControllerAdvice
public class ExceptionController {
private static final Logger logger = LoggerFactory.getLogger(ExceptionController.class);
@ExceptionHandler(NoHandlerFoundException.class)
public ModelAndView handleError404(HttpServletRequest request, Exception e) {
ModelAndView mav = new ModelAndView();
mav.setViewName("error/404");
mav.addObject("message", "404오류");
mav.addObject("url", request.getRequestURL());
return mav;
}
/* common 메소드는 Exception 타입으로 처리하는 모든 예외를 처리하도록 설정*/
@ExceptionHandler(Exception.class)
public ModelAndView common(Exception e, HttpServletRequest request) {
logger.info(e.toString());
ModelAndView mav = new ModelAndView();
mav.setViewName("error/common");
mav.addObject("exception", e); //예외를 뷰에 넘깁니다.
mav.addObject("url", request.getRequestURL());
return mav;
}
}
web.xml ( init-param 추가)
<!-- Processes application requests -->
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
</init-param>
<init-param>
<param-name>throwExceptionIfNoHandlerFound</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
common.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<style>
body{background-color:#f7bfbf; text-align:center}
</style>
<meta charset="UTF-8">
<title>error 페이지</title>
</head>
<body>
죄송합니다.<br>
요청하신 <b>${url}</b> 처리에 오류가 발생했습니다.
<hr>
${exception}
</body>
</html>
404.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<style>
body{background-color:#f7bfbf; text-align:center}
</style>
<meta charset="UTF-8">
<title>error 페이지</title>
</head>
<body>
<img src="resources/Image/remove.png" width='100px'><br>
죄송합니다.<br>
요청하신 <b>${url}</b> 이 존재하지 않습니다.
<hr>
${message}
</body>
</html>
'웹 > Spring Framework' 카테고리의 다른 글
AOP(Aspect Oriented Programming) (0) | 2020.01.02 |
---|---|
email 서비스(네이버) (2) | 2019.12.31 |
Spring lombok 설치(이클립스, STS) (0) | 2019.12.25 |
Spring 간단 정리 (0) | 2019.12.22 |
Spring MVC 로그인(간단)-AJAX JSON 활용 (0) | 2019.12.19 |