SimpleMappingExceptionResolver를 이용한 방식(전역)
1 . NullPointerException 테스트
main.jsp 에 버튼 클릭시 이동할 경로 설정
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1 align="center">Exception Handler 사용하기</h1>
<h3> SimpleMappingExceptionResolver를 이용한 방식(전역)</h3>
<button onclick="location.href='simple-null'"> NullPointerException 테스트 </button>
<button onclick="location.href='simple-user'"> 사용자 정의 Exception 테스트 </button>
</body>
</html>
nullPointer.jsp에 오류시 나타나는 메세지 작성
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1 align="center"> ♥ 널 위하여 NullPointerException 발생 ♥</h1>
</body>
</html>
Controller파일의 핸드메소드에 테스트를 위해 일부러 오류 만들기
@Controller
public class ExceptionHandlerController {
@GetMapping("/simple-null")
public String simpleNullPointerExceptionTest() {
String str = null;
System.out.println(str.charAt(0));
return "main";
}
root-context.xml에 SimpleMappingExceptionResolver bean 등록
: SimpleMappingExceptionResolver는 requestScope에 값을 담아주기 때문에 addAttribute하지 않아도 됨
key - 예외 클래스명 작성 (풀 클래스명을 작성해도 되고 클래스명만 작성해도 된다)
value -경로 작성
(view resolver가 해석 시 InternalResourceViewResolver를 이용하기 떄문에 prefix/suffix 고려해서 경로를 작성한다.)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd">
빈등록
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<prop key="java.lang.NullPointerException"> error/nullPointer </prop>
=> error/nullPointer.jsp
</props>
</property>
</bean>
화면 결과
2. 사용자 정의 Exception 테스트
memberRegist.jsp에 오류시 나타나는 메세지를 requestScope로 꺼내올 수 있도록 작성
ㄴ<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- requestScope가 exception값에 접근할 수 있음. -->
<h1 align="center">${ requestScope.exception.message }</h1>
</body>
</html>
root-context.xml에 SimpleMappingExceptionResolver bean 등록
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd">
빈등록
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<prop key="MemberRegistException"> error/memberRegist </prop>
</props>
</property>
</bean>
핸들러 메소드 작성
@Controller
public class ExceptionHandlerController {
@GetMapping("/simple-user")
public String simpleUserExceptionTest() throws MemberRegistException {
boolean check = true;
if(check) {
throw new MemberRegistException("당신 같은 사람은 회원으로 받을 수 없습니다!");
throw 했기 떄문에 클래스 생성시 자동으로 Exception 상속받게 작성됨
}
return "main";
}
}
MemberRefistException 클래스 생성
public class MemberRegistException extends Exception {
public MemberRegistException() {}
public MemberRegistException(String msg) {
super(msg); //Exception생성자에 전달->throwable에 전달
}
}
화면 결과
=> addAttribute하지 않아도 SimpleMappingExceptionResolver가 requestScope에 값을 담아주어 메세지 출력 가능
@ExceptionHandler 어노테이션을 이용한 방식(클래스별)
1. NullPointerException 테스트
nullPointer.jsp에 오류시 나타나는 메세지 작성
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1 align="center"> ♥ 널 위하여 NullPointerException 발생 ♥</h1>
</body>
</html>
@ExceptionHandler사용하여 핸들러 메소드 작성
@Controller
public class ExceptionHandlerController {
전역과 지역적인 메소드가 있을때 누가 동작될까? =>지역적인 메소드가 우선
@GetMapping("annotation-null")
public String annotationNullPonterException() {
String str = null;
System.out.println(str.charAt(0));
return "main";
}
@ExceptionHandler(NullPointerException.class)
public String nullPointerExceptionHandler(NullPointerException exception) {
System.out.println("@ExceptionHandler 메소드 호출");
System.out.println(exception.getMessage());
return "error/nullPointer";
}
2. 사용자 정의 Exception 테스트
: 지역적인 메소드는 메소드 안에 구문만 동작하기 때문에 root-context에 설정 한 값에 영향받지 않음.
model.addAttribute로 requestScope에 담아야함!!
memberRegist.jsp에 오류시 나타나는 메세지를 requestScope로 꺼내올 수 있도록 작성
ㄴ<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- requestScope가 exception값에 접근할 수 있음. -->
<h1 align="center">${ requestScope.exception.message }</h1>
</body>
</html>
@ExceptionHandler사용하여 핸들러 메소드 작성
@Controller
public class ExceptionHandlerController {
@GetMapping("annotation-user")
public String annotationUserExceptionTest() throws MemberRegistException {
boolean check = true;
if(check) {
throw new MemberRegistException("당신 같은 사람은 회원으로 받을 수 없어~~~");
}
return "main";
}
@ExceptionHandler(MemberRegistException.class)
public String userExceptionHandler(MemberRegistException exception, Model model) {
System.out.println("@ExceptionHandler 메소드 호출");
System.out.println(exception.getMessage());
model.addAttribute("exception", exception);
return "error/memberRegist";
}
}
화면 결과
'프로그래밍 > Spring & Spring boot' 카테고리의 다른 글
[Spring/스프링] jQuery ajax , Fetch ajax(Simple string, JSON) (0) | 2022.09.20 |
---|---|
[Spring/스프링] 파일 업로드 (single file , multi file ) (0) | 2022.09.11 |
[Spring/스프링] redirect / RedirectAttribute - flashAttribute / ModelAndView (0) | 2022.09.07 |
[Spring / 스프링] @RequestBody (0) | 2022.09.06 |
[Spring/스프링] @SessionAttributes를 이용하여 session에 값 담기 (0) | 2022.09.06 |