프로그래밍

[Spring] day70 : 예외 발생 처리 페이지 본문

자바/Spring

[Spring] day70 : 예외 발생 처리 페이지

시케 2023. 8. 18. 23:36
728x90
반응형

2023.08.18.금

예외 발생 처리 페이지

예외 발생시 처리하는데에는 대표적으로 2가지 방식이 있다

첫 번째로는 JAVA 로직으로 예외 발생시 화면이 넘어가지 않도록 하는 것이고

두 번째로는 NULL을 VIEW에서 보여줘야한다면 JSTL을 활용하여 특정 문구가 나오게 처리하는 것이다 

 

기존에 JSP 방식으로 예뢰 발생 처리 페이지를 작성하였었는데

이를 Spring 방식으로 작성해보자

 

JSP 에러페이지 방식

2023.07.31 - [Web] - [Web] day38 : 에러페이지

 

[Web] day38 : 에러페이지

2023.06.28.수 에러페이지 웹 페이지를 개발하고 실행시키다보면 예상치않은 오류를 맞닥뜨릴 수 있다 오류를 전부 예상할 수 없으며 오류 발생시 예상치 못한 종료를 막으며 사용자에게 안내가

dev-9rm.tistory.com

 

Spring 방식으로 예외 발생 처리 페이지 구현하기

.xml (설정파일) 방식과 @(어노테이션) 방식 중

.xml 방식으로 구현해보도록 하자

 

Spring에서는 예외발생시 자동으로 처리해서

특정 페이지까지 사용자에게 도달할 수 있게 해주는 객체가 존재한다
해당 객체를 "ExceptionResolver"라고 한다
DispatcherServlet의 멤버변수이기 때문에 의존주입(DI)을 필요로 한다

 

DispatcherServlet-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd">
	
	<context:component-scan base-package="com.spring.view.controller" />
	
	<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<property name="maxUploadSize" value="-1" />
	</bean>
	
	<bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
		<property name="exceptionMappings">
			<props>
				<prop key="java.lang.ArithmeticException">error/error.jsp</prop>
				<prop key="java.lang.NullPointerException">error/error.jsp</prop>
			</props>
		</property>
		<property name="defaultErrorView" value="error/error.jsp" />
	</bean>
	
</beans>

 

위의 코드를 보면 HandlerMapping과 유사한 것을 볼 수 있다

HandlerMapping: 어떤 요청에 대해 어떤 C를 반환할지 결정
	> 팩토리패턴
ExceptionResolver: 어떤 예외에 대해 어떤 페이지로 가야할지 결정
	> 팩토리패턴

error.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" isErrorPage="true" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>에러페이지</title>
</head>
<body>

<h1>${exception}</h1>
<h3>${exception.message}</h3>

<hr>

<a href="main.do">메인으로 돌아가기</a>

</body>
</html>

isErrorPage="true" 로 설정할시 내장객체 "exception"사용이 가능하게 된다
EL 표현식으로 해당 에러 내용을 꺼내 쓰기 위해서는 미리 등록해놔야 한다

 

실행화면

더보기

@으로 설정을 잘 안하는 이유?
예외 처리에 대한 어노테이션을 하려면
1. 에외를 잡아줄 클래스.java
2. 특정 페이지까지 전달을 위한 Controller 역할의 클래스 .java
2개가 필요하다
HM처럼 한번에 맵핑까지 하는게 아니라 자바를 더 많이 필요하게 된다

 

728x90
반응형
Comments