열심히 끝까지
디바이스 융합 자바(Java) day75 - 에러 페이지 설정 본문
> 예외는 언제 발생하는가?
: 없는 아이디. null값 등을 아이디에 로그인 시도 하였을 때, 에러 발생
> required로 에러를 발생하지 않도록 만드는게 에러처리
> 에러가 나도 null넣었다는 페이지를 보여주는 것이 에러 페이지 설정
>> 에러 페이지 설정 VS 에러 처리
- 에러처리
: 에러 자체가 발생되지 않게 선 처리(유효성 검사)
: 에러가 발생하더라도, 넘어갈 수 있게(try-catch) 처리
- 에러 페이지 설정
: 에러는 발생할 수 있음
: 에러 발생 시,
1. 왜 발생했는지
2. 어디로 가야하는지 안내
해주는 페이지
ex ) 웹툰 - 유료 웹툰 페이지
>> 에러 페이지 설정
1) @(어노테이션 설정)
2) xml 설정
1) @(어노테이션) 설정
: 생각보다 @으로 설정하지 않음 == 복잡하기 때문
: @으로 사용하려면 예외처리 클래스를 1개 이상 만들어야 함
> @ControllerAdvice
> @ExceptionHandler : 요청에 대한 처리를 할 때
>> 예외 클래스를 만들어서 설정해야 함
: @을 쓰려면 그렇게 해야 함
1. @을 앞으로 사용할 예정이라고 설정파일(.xml)에게 알려주어야 함(DispatcherServlet-servlet.xml)
>> namespaces에 mvc 추가
xmlns:mvc="http://www.springframework.org/schema/mvc"
com.ryo.biz의 common에 넣을 예정==공통패키지
그렇게 때문에 base-package를 com.ryo.biz로 설정
[과거에는 com.ryo.biz.controller 였음]
2. 예외 관련된 것을 보관할 페이지 작성
매핑해서 쓰려면 객체 필요!!
>> 객체화 해주는 @인 @ControllerAdvice 사용
: CommonExceptionHandler를 객체화해주는 @
: 횡단관심사처럼 처리해 줌
사용 방법 : @ControllerAdvice(오류 범위 입력)
: ExceptionHandler가 연결해 줌
CommonExceptionHandler.java-----------------
package com.ryo.biz.common;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.ModelAndView;
@ControllerAdvice("com.ryo.biz")
public class CommonExceptionHandler {
@ExceptionHandler(NullPointerException.class)
public ModelAndView aException(Exception e) { // nullpointerException
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; // 어떤 에러가 발생했는지 전달해주고 싶어서
}
}
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>Insert title here</title>
</head>
<body>
<!-- 무슨 에러가 났는지 확인하는 메시지 -->
<h1>${exception.message}</h1>
<a href="login.do">go to login</a>
</body>
</html>
2) XML 설정
: 간편하게 설정 가능
: 별도로 예외처리 클래스를 만들지 않아도 사용 가능
DispatcherServlet-servlet.xml 파일에 다음 문장 추가
<!-- 예외 페이지 설정 -->
<bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<prop key="java.lang.NullPointException">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>
'디바이스 융합 자바(Java)기반 풀스택 개발자 양성과정(수업내용)' 카테고리의 다른 글
디바이스 융합 자바(Java) day78 - Mybatis 프레임워크(설치 및 설정) (1) | 2022.10.04 |
---|---|
디바이스 융합 자바(Java) day76 - 다국어 처리(국제화) (1) | 2022.09.29 |
디바이스 융합 자바(Java) day74 - 파일 업로드 및 파일 미리보기 추가 (0) | 2022.09.27 |
디바이스 융합 자바(Java) day73 - 2-Layered 아키텍쳐 (0) | 2022.09.26 |
디바이스 융합 자바(Java) day72 - Spring MVC 관련 코드 정리(CRUD) (1) | 2022.09.23 |