❗ 자주 햇갈리는 것 !!
✅ 에러처리 : 에러 자체가 발생되지 않게 선처리 (유효성 검사)
에러가 발생하더라도, 넘어갈 수 있게(try-catch) 처리
✅ 에러 페이지 설정 : 에러는 발생할 수 있다.
에러발생 시, 왜 발생했는지 -1
어디로 가야하는지 안내 -2 해주는 페이지
ex) 웹툰에서 유료화의 링크로 가려하면 메인으로 돌려주는 방식
설정방법
공통 : 에러페이지 만들기
${exception.message } 으로 에러상태 확인 가능
1) @ 어노테이션으로 설정
@을 앞으로 사용할 예정이라고 설정파일(.xml)에게 알려줘야함
DispatcherServlet-servlet.xml 에 네임스페이스 mvc추가
바디에 <mvc:annotation-driven /> 추가
복잡함(@으로 사용하려면 예외처리 클래스를 1개 이상 만들어줘야함)
@ControllerAdvice
어느 범위에서 예외가 일어날지 설정한다.
@ExceptionHandler
어떠한 예외가 발생했을 때 어떠한 행동을 취할지 매핑해준다. ( 에러페이지로 이동을 시킴 )
2) XML으로 설정
간편함(별도로 예외처리 클래스를 만들지 않아도 괜찮음)
DispatcherServlet-servlet.xml에 하단과 같이 exceptionResolver을 등록해주고,
property 의존성 주입을 해주면 된다.
key에 어떠한 오류가 발생했을 때 body에 오류페이지의 경로를 작성해주면 된다.
소스코드
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"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
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.kim.biz" />
<!-- 예외 페이지 설정 (어노테이션 방식 )
<mvc:annotation-driven /> -->
<!-- 예외 처리 페이지 설정 (XML 방식) -->
<bean id="exceptionResolver"
class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<prop key="java.lang.NullPointerException">error/error.jsp</prop>
<prop key="java.lang.ArithmeticException">error/error.jsp</prop>
<prop key="java.lang.Exception">error/error.jsp</prop>
</props>
</property>
</bean>
<!-- 파일 업로드 관련 설정 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="100000" />
</bean>
<!--
HM 등록
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/login.do">login</prop>
<prop key="/main.do">main</prop>
<prop key="/board.do">board</prop>
<prop key="/logout.do">logout</prop>
</props>
</property>
</bean>
<bean id="login" class="com.kim.biz.controller.LoginController" />
<bean id="main" class="com.kim.biz.controller.MainController" />
<bean id="board" class="com.kim.biz.controller.BoardController" />
<bean id="logout" class="com.kim.biz.controller.LogoutController" />
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/view/" />
<property name="suffix" value=".jsp" />
</bean>
-->
</beans>
CommonExceptionHandler.java
package com.kim.biz.common;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.ModelAndView;
@ControllerAdvice("com.kim.biz") // CommonExceptionHandler를 개체화해주는 @
// 횡단관심처럼 만들어주는 @
// 예외잡는 범위
public class CommonExceptionHandler {
@ExceptionHandler(NullPointerException.class) // nullpointer
public ModelAndView aException(Exception e) {
ModelAndView mav=new ModelAndView();
mav.addObject("exception",e);
mav.setViewName("/error/error.jsp");
return mav;
}
@ExceptionHandler(ArithmeticException.class) // 수학적인 문제
public ModelAndView bException(Exception e) {
ModelAndView mav=new ModelAndView();
mav.addObject("exception",e);
mav.setViewName("/error/error.jsp");
return mav;
}
@ExceptionHandler(Exception.class)
public ModelAndView cException(Exception e) { // 그 외 모든 예외
ModelAndView mav=new ModelAndView();
mav.addObject("exception",e);
mav.setViewName("/error/error.jsp");
return mav;
}
}
'개발자노트 > Spring' 카테고리의 다른 글
프로젝트 중 만난 오류 - Crawling NosuchElementException (1) | 2022.10.07 |
---|---|
Spring - 다국어처리(국제화) (0) | 2022.09.29 |
Spring 작동순서 개인적인 정리 (0) | 2022.09.24 |
Spring - 컨트롤러, 리퀘스트 매핑 @Controller / @RequestMapping , Spring에서 매핑하는법 (0) | 2022.09.21 |
Spring - 디스패쳐서블릿 (DispatcherServlet) / 핸들러 매핑 (HandlerMapping) / 뷰 리졸버 (ViewResolver) (2) | 2022.09.19 |