송민준의 개발노트

404 에러, Exception 처리 본문

웹/Spring Framework

404 에러, Exception 처리

송민준 2019. 12. 30. 17:05

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