오늘은 예외 처리 페이지를 설정하는 법에 대해 알아보려고 한다.
우리는 예외가 발생했을 경우, 404 Error 혹은 500 Error를 사용자에게 절대 보여서는 안된다. 따라서 사용자에게 보여줄 페이지를 정해야 하는데 이것은 두가지 방법이 있다.
첫번째로, 로직(JAVA 코드)으로 예외 발생 시에 화면이 넘어가지 않게 하거나, NULL을 View(JSTL)에서 보여줘야 한다면 특정 문구가 나오게 처리한다.
* 여기서 핵심은 개발자가 처리한다는 뜻.
위의 첫번째 방법은 아래의 포스팅의 '디폴트 사진 넣어놓는 방법' 에 있으므로 넘어가고,
https://junwons.tistory.com/124
[Spring] MultipartFile을 활용한 파일 업로드
오늘은 Spring에서 제공하는 방법을 통해 파일 업로드에 대해 알아보려고 한다. 먼저 파일 업로드를 하기 위해서는 [.jar] 파일이 필요하다. 따라서 pom.xml 파일에 아래의 코드를 추가한다. pom.xml comm
junwons.tistory.com
오늘 우리는 두번째 방법인 'Spring에게 떠넘기기' 방법을 공부하려고 한다.
설정하는 방법은 두가지가 있는데, 아래의 두가지 방법이 있다.
- .xml로 설정하기
- @ (어노테이션)으로 설정하기
일반적인 경우에는 @(어노테이션)이 많이 사용되지만, 예외처리 방법에서는 .xml 방법을 더 많이 사용한다.
.xml 설정으로 하는 방법을 알아보도록 하자 !
Spring한테 예외가 발생 시에 자동으로 처리해서 특정 페이지까지 사용자가 도달할 수 있게 해주는 객체가 존재한다.
이 객체의 이름은 'ExceptionResolver' 이다.
즉, Resolver이므로 'DispatcherServlet의 멤버변수'란 뜻이다. ( <bean> 태그를 활용하여 등록 [ HandlerMapping과 비슷함] )
HandlerMapping
어떤 요청에 대해 Controller 객체를 반환할지 결정함 --> 팩토리 패턴을 말함
ExceptionResolver
어떤 예외에 대해 어떤 페이지로 가야할 지를 결정함 --> 팩토리 패턴을 말함
이래서 비슷한 느낌인거임 !
첫번째로, Resolver 이므로 DispatcherServlet-servlet.xml 에 등록을 한다.
DispatcherServlet-servlet.xml
<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>
</bean>
다음으로 WEB-INF 하위에 error 폴더를 생성하고, error를 나타낼 페이지를 한개 생성한다.
다음으로 error.jsp 파일에 아래와 같이 코드를 작성한다. 아래의 코드는 발생한 예외와 예외 메세지를 출력해주는 페이지이다.
또한 페이지 상단부에 ' isErrorPage="true" ' 를 추가해야 에러 페이지로 넘어올 수 있다.
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>
이렇게 설정을 해놓으면 완성이지만, 따로 경로를 설정하지 않을 경우, 디폴트 경로를 설정하는 방법도 있다. 그것은 아래의 코드를 DispatcherServlet에 디폴트 경로를 추가하면 된다.
<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>
그렇다면 왜 @(어노테이션)으로는 설정하지 않을까 ?
@을 사용하려면, java가 반드시 필요하다.
이유 : '예외를 잡아줄 클래스.java' 와 이것을 보내줄 특정 페이지까지 전달을 위한 'Controller 역할의 클래스.java' 가 필요하다. 그래서 자바를 더 많이 만들어야 되고, 컴파일을 해야 하기 때문에 불리해져서 잘 쓰지 않는다.
'Spring' 카테고리의 다른 글
[Spring] 다국어 처리 방법 (2) | 2023.08.24 |
---|---|
[Spring] Spring Lagacy project에서 별도의 라이브러리 없이 진행할 수 있는 비동기 처리 (0) | 2023.08.22 |
[Spring] MultipartFile을 활용한 파일 업로드 (0) | 2023.08.17 |
[Spring] NULL 업데이트 이슈 (@SessionAttributes, @ModelAttribute) (0) | 2023.08.16 |
[Spring] Spring JDBC (JDBCTemplate) (1) | 2023.08.16 |