[에러페이지의 필요성]
사이트 내에서 404, 500같은 에러페이지가 직접적으로 사용자에게 노출 되면 그 사이트는 사용자들에게 좋은 신뢰를 쌓기 어려워진다. 모든 에러에 대한 처리가 어렵다면 에러가 발생되었을 때 안내페이지를 제공해 주어야 한다.
개발자가 Spring을 활용하여 에러페이지 처리를 하는 방법은 @( 어노테이션과) .xml 설정파일로 처리하는 방법 2가지가 있다. 이중 .xml이 더 이점이 있지만 이번 포스팅에서는 두 방법 다 알아보자.
[에러 상황 만들기]
로그인시 ID를 입력하지 않는다면 예외를 발생시킨다.
@RequestMapping(value="/login.do",method=RequestMethod.POST)
public String login(MemberVO vo,HttpSession session) {
System.out.println(" POST로 login.do요청");
if(vo.getId()==null||vo.getId().equals("")) {
//아이디 입력이 없이 login을 시도 할시 예외처리
throw new IllegalArgumentException("아이디 입력없이 login.do를 요청하였습니다.");
}
vo=memberService.getMember(vo);
if(vo==null){
return "redirect:login.jsp";
}
session.setAttribute("member", vo);
return "redirect:main.do";
}
[방법1-어노테이션]
에러가 발생시에 어디로 가야하는가에 대한 설정(viewResolver설정)이므로 DispatcherServlet-servlet.xml설정 파일을 이용한다.
1. DispatcherServlet-servlet.xml의 네임스페이스-> mvc 추가
2. 해당 어노테이션을 감지할 태그 추가
<mvc:annotation-driven></mvc:annotation-driven>
3. 예외에 대한 에러페이지를 매핑하는 클래스 추가
공통패키지에 관리할 예정, 클래스명을 ExceptionHandler로 한다면 어노테이션 명과 충돌을 일으키기에 클래스명은 ExceptionHandlerCommon로 생성.
package com.test.app.common;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.ModelAndView;
@ControllerAdvice("com.test.app")
//Component를 상속받음(객체화)(예외처리용)
//해당 클래스에서 발생하는 에러들을 가져온다
public class ExceptionHandlerCommon {
@ExceptionHandler(IllegalArgumentException.class)//()내부의 에러에대해서
public ModelAndView a(Exception e) {//이 메서드를 수행해 주세요(HandlerMapping과 비슷한 역할)
ModelAndView mav=new ModelAndView();
mav.addObject("excep", e);
mav.setViewName("/error/error2.jsp");
return mav;
}
@ExceptionHandler(Exception.class)
public ModelAndView b(Exception e) {
ModelAndView mav=new ModelAndView();
mav.addObject("excep", e);
mav.setViewName("/error/error.jsp");
return mav;
}
}
4. 경로에 맞는 에러에 대한 안내페이지 생성
-wepapp/error/error.jsp
-클래스에서 정의한 에러에대한 이름 설정을 통해 ${excep.message}로 에러 문구를 볼 수 있다.
[방법2 - .xml]
1. DispatcherServlet-servlet.xml에서 에러페이지 xml설정
<!-- 에러페이지 xml설정 -->
<bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<prop key="java.lang.IllegalArgumentException">
error/error2.jsp
</prop>
<prop key="java.lang.NullPointerException">
error/error2.jsp
</prop>
</props>
</property>
<!-- default 에러 -->
<property name="defaultErrorView" value="error/error2.jsp" />
</bean>
2. 경로에 맞는 에러에 대한 안내페이지 생성
-wepapp/error/error.jsp
-클래스에서 정의한 에러에 대한 이름을 설정하지 않았으므로 ${exception.message}로 에러 문구를 볼 수 있다.
-isErrorPage="true"처리를 해 주어야 한다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isErrorPage="true"%>
'Spring > Spring' 카테고리의 다른 글
day73) 다국어 처리(국제화) (0) | 2022.04.13 |
---|---|
day72) 파일 업로드 (0) | 2022.04.12 |
day71) Spring-Controller 설계3 : 2-layered-아키텍쳐 (0) | 2022.04.11 |
day70) [AOP] 횡단관심 - 트랜잭션 (0) | 2022.04.08 |
day69) annotation 사용하기2 - Controller관련 (0) | 2022.04.07 |
댓글