본문 바로가기
Spring/Spring

day72) 에러페이지 처리

by code_learner 2022. 4. 12.

[에러페이지의 필요성]

사이트 내에서 404, 500같은 에러페이지가 직접적으로 사용자에게 노출 되면 그 사이트는 사용자들에게 좋은 신뢰를 쌓기 어려워진다. 모든 에러에 대한 처리가 어렵다면 에러가 발생되었을 때 안내페이지를 제공해 주어야 한다. 

개발자가  Spring을 활용하여 에러페이지 처리를 하는 방법은 @( 어노테이션과) .xml 설정파일로 처리하는 방법 2가지가 있다. 이중 .xml이 더 이점이 있지만 이번 포스팅에서는 두 방법 다 알아보자.


[에러 상황 만들기]

로그인시 ID를 입력하지 않는다면 예외를 발생시킨다.

@RequestMapping(value="/login.do",method=RequestMethod.POST)
	public String login(MemberVO vo,HttpSession session) {
		System.out.println(" POST로 login.do요청");
		if(vo.getId()==null||vo.getId().equals("")) {
        	//아이디 입력이 없이 login을 시도 할시 예외처리
			throw new IllegalArgumentException("아이디 입력없이 login.do를 요청하였습니다.");
		}
		
		vo=memberService.getMember(vo);
		if(vo==null){
			return "redirect:login.jsp";
		}
		session.setAttribute("member", vo);
		return "redirect:main.do";
	}

[방법1-어노테이션]

에러가 발생시에 어디로 가야하는가에 대한 설정(viewResolver설정)이므로 DispatcherServlet-servlet.xml설정 파일을 이용한다.

1. DispatcherServlet-servlet.xml의 네임스페이스-> mvc 추가

2. 해당 어노테이션을 감지할 태그 추가

<mvc:annotation-driven></mvc:annotation-driven>

3. 예외에 대한 에러페이지를 매핑하는 클래스 추가

공통패키지에 관리할 예정, 클래스명을 ExceptionHandler로 한다면 어노테이션 명과 충돌을 일으키기에 클래스명은 ExceptionHandlerCommon로 생성.

package com.test.app.common;

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.ModelAndView;

@ControllerAdvice("com.test.app")
//Component를 상속받음(객체화)(예외처리용)
//해당 클래스에서 발생하는 에러들을 가져온다
public class ExceptionHandlerCommon {
	@ExceptionHandler(IllegalArgumentException.class)//()내부의 에러에대해서
	public ModelAndView a(Exception e) {//이 메서드를 수행해 주세요(HandlerMapping과 비슷한 역할)
		ModelAndView mav=new ModelAndView();
		mav.addObject("excep", e);
	      mav.setViewName("/error/error2.jsp");
	      return mav;

	}
	@ExceptionHandler(Exception.class)
	public ModelAndView b(Exception e) {
		ModelAndView mav=new ModelAndView();
		mav.addObject("excep", e);
	      mav.setViewName("/error/error.jsp");
	      return mav;

	}
}

4. 경로에 맞는 에러에 대한 안내페이지 생성

-wepapp/error/error.jsp

-클래스에서 정의한 에러에대한 이름 설정을 통해 ${excep.message}로 에러 문구를 볼 수 있다.

 

 

[방법2 - .xml]

1. DispatcherServlet-servlet.xml에서 에러페이지 xml설정

<!-- 에러페이지 xml설정 -->
<bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
	<property name="exceptionMappings">
		<props>
			<prop key="java.lang.IllegalArgumentException">
				error/error2.jsp
			</prop>
			<prop key="java.lang.NullPointerException">
				error/error2.jsp
			</prop>
		</props>
	</property>
	<!-- default 에러 -->
	<property name="defaultErrorView" value="error/error2.jsp" />
</bean>

2. 경로에 맞는 에러에 대한 안내페이지 생성

-wepapp/error/error.jsp

-클래스에서 정의한 에러에 대한 이름을 설정하지 않았으므로 ${exception.message}로 에러 문구를 볼 수 있다.

-isErrorPage="true"처리를 해 주어야 한다.

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isErrorPage="true"%>

 

 

댓글