예외 처리를 위한 방법으로 XML과 어노테이션을 사용할 수있다.
Annotation 기반
LoginController
로그인 할 때 아이디가 null이거나 입력값이 없다면 오류가 나도록 처리했다.
로그인 아이디를 공백으로 로그인 하면 뜨는 오류 페이지.
그러나 내부의 정보를 보여주는 것은 보안상 좋지 않다.
namespaces - mvc 추가
예외의 종류에 따라 적절한 예외 화면이 서비스될수 있도록 예외 처리 클래스를 만들었다.
CommonExceptionHandler
package com.springbook.view.common;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.ModelAndView;
// "com.springbook.view" 패키지 아래에서 일어나는 예외를 처리한다.
@ControllerAdvice("com.springbook.view")
public class CommonExceptionHandler {
@ExceptionHandler(ArithmeticException.class)
public ModelAndView handlerArithmeticException(Exception e) {
ModelAndView mav = new ModelAndView();
mav.addObject("exception",e);
mav.setViewName("/common/arithmeticError.jsp");
return mav;
}
@ExceptionHandler(NullPointerException.class)
public ModelAndView handleNullPointerException(Exception e) {
ModelAndView mav = new ModelAndView();
mav.addObject("exception",e);
mav.setViewName("/common/nullPointerError.jsp");
return mav;
}
@ExceptionHandler(Exception.class)
public ModelAndView handleException(Exception e) {
ModelAndView mav = new ModelAndView();
mav.addObject("exception",e);
mav.setViewName("/common/error.jsp");
return mav;
}
}
예외에 대한 화면을 만든다.
Error.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page isErrorPage="true" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>기본 에러 화면</title>
</head>
<body bgcolor="#ffffff" text="#000000">
<!-- 타이틀 시작 -->
<table width="100%" border="1" cellspacing="0" cellpadding="0">
<tr>
<td align="center" bgcolor="orange">
<b>기본 에러 화면입니다</b>
</td>
</tr>
</table>
<br>
<!-- 에러 메시지 -->
<table width="100%" border="1" cellspacing="0" cellpadding="0" align="center">
<tr>
<td align="center">
<br><br><br><br><br>
// e (exception) 안의 getmessage라는 메서드를 호출한 것.
Message : ${exception.message }
<br><br><br><br><br>
</td>
</tr>
</table>
</body>
</html>
화면
XML 기반
xml파일에 설정 코드 추가