본문 바로가기

프로그래밍 기초/SPRING

[Spring]custom exception만들고 사용하기 /404,500에러 처리페이지만들기

custom exception만들고 사용하기

NoDeliveryException-커스텀익셉션 클래스 만들기.

DataAccessexception을 상속받는다.

public class NoDeliveryException extends DataAccessException{
	
	//생성자의 인자로 예외메세지를 전달받아서 
	public NoDeliveryException(String msg) {
		//부모생성자에 전달하면
		super(msg);
		//message 필드에 저장된다.
	}

}

 

exception controller

NoDeliveryException이 발생되면 exception이라는 이름으로 NoDeliveryException이 전달되게하고 error/data_access로 포워드이동시킨다.

@ControllerAdvice
public class ExceptionController {
	//custom예외처리
	@ExceptionHandler(NoDeliveryException.class)
	public ModelAndView noDelivery(NoDeliveryException nde) {
		ModelAndView mView=new ModelAndView();
		mView.addObject("exception",nde);
		mView.setViewName("error/data_access");

		return mView;
	}
    
}

 

error/data_access.jsp

exception은DataAccessexception을 상속받은 NoDeliveryException이다.

.message로 exception message를 얻어올 수 있다.

DataAccessexception은 getMessage를 가지고있다. 

<div class="container">
	<h1>DB관련 예외발생!</h1>
	<p class="alert alert-danger">${exception.message }</p>
	<a href="${pageContext.request.contextPath}/home.do">인덱스로 가기</a>
</div>

 


custom exception사용하기

 

구매하기를 누르면 50퍼센트의 확률로 NoDeliveryException이 발생한다.

OrderDaoImpl

Orderdao에서 커스텀익셉션 시험해보기 위해 50프로 확률로 에러가 발생되게 만들었다.

@Repository
public class OrderDaoImpl implements OrderDao{

	@Autowired
	private SqlSession session;
	
	@Override
	public void addOrder(OrderDto dto) {
		//테스트를 위해 50%의 확률로 예외 발생시키기
		Random ran=new Random();
		int ranNum=ran.nextInt(2);
		if(ranNum==0) {
			throw new NoDeliveryException("배송이 불가능합니다.");
		}
		//주문 테이블에 주문 추가
		session.insert("shop.addOrder",dto);

	}

}

 


404(500)에러 처리 페이지 만들기

web.xml

	<!--404.500에러페이지  -->
	<error-page>
		<error-code>404</error-code>
		<location>/error/404.do</location>
	</error-page>
	<error-page>
		<error-code>500</error-code>
		<location>/error/500.do</location>
	</error-page>

 

servlet-context

/error/404.do요청이 왔을 때 /WEB-IMF/views/error/404로 포워드 이동하겠다는 내용

	<!-- web.xml에서 설정된 error관련된 요청처리 -->
	<view-controller path="/error/404.do" view-name="error/404"/>
	<view-controller path="/error/500.do" view-name="error/500"/>

/error/404.jsp

<div class="container">
	<h1>404</h1>
	<p class="alert alert-danger">
		요청하신 페이지는 존재하지 않습니다.
		<a href="${pageContext.request.contextPath}/home.do">확인</a>
	</p>
</div>