-
[JSP/Servlet] 익셉션 처리(1/2) - 에러 페이지 처리, JSP/Servlet에서 에러 페이지 호출IT/Spring-JSP&Servlet 2020. 10. 28. 00:33
■ 들어가기
- 뇌를 자극하는 JSP&Servlet (김윤명/한빛미디어). 을 공부하며 정리하는 블로그
■ 목차
1. 일반적인 에러처리 : try ~ catch
2. JSP 페이지에서 에러 페이지 호출하기
3. 서블릿 클래스에서 에러 페이지 호출하기
1. 일반적인 에러처리 : try ~ catch
> 일반적으로 java 프로그램에서 try ~ catch 구문으로 에러 메시지 출력을 구현함
public class Adder { public static void main(String args[]) { try { int num1 = Integer.parseInt(args[0]) ; int num2 = Integer.parseInt(args[1]) ; int result = num1 + num2 ; System.out.printf("%d + %d = %d", num1, num2, result) ; } catch (NumberFormatException e) { System.out.println("Error: Input wrong data.") ; } } }
> 실행결과
- 그런데 서블릿 클래스와 jsp페이지에서는 어떻게 에러처리를 해야할까?
- 에러를 처리하는 에러 페이지를 별도로 만들고 에러 발생 시 에러 페이지를 호출하도록 한다!
2. JSP 페이지에서 에러 페이지 호출하기
> 두 수를 더하는 JSP 페이지 : Adder.jsp
- page 지시자에 errorPage="에러 페이지명" 설정 시,
JSP 페이지 내에서 에러 발생할 때 해당 에러 페이지가 호출됨
<!-- Adder.jsp --> <%@page contentType="text/html; charset=euc-kr" errorPage="DataError.jsp" %> <% String str1 = request.getParameter("NUM1") ; String str2 = request.getParameter("NUM2") ; int num1 = Integer.parseInt(str1) ; int num2 = Integer.parseInt(str2) ; int result = num1 + num2 ; %> <html> <head><title>덧셈 프로그램</title></head> <body> <%= num1 %> + <%= num2 %> = <%= result %> </body> </html>
> 에러 페이지 : DataError.jsp
- page 지시자에 isErrorPage="true" 설정 시,
JSP 페이지의 exception 내장 변수가 에러 페이지를 호출 한 JSP에서 던져준 익셉션 정보를 가져옴
- 익셥센 정보를 표기하기 위해서 exception 내장 변수의 getMessage() 메서드를 호출
- HTTP 상태코드값 200으로 받기 위해 setStatus(200) 설정
<!-- DataError.jsp --> <%@page contentType="text/html; charset=euc-kr" isErrorPage="true" %> <% response.setStatus(200) ; %> <html> <head><title>덧셈 프로그램 - 에러 화면</title></head> <body> 잘못된 데이터가 입력되었습니다. <br><br> 상세 에러 메시지: <%= exception.getMessage() %> </body> </html>
> 실행결과
3. 서블릿 클래스에서 에러 페이지 호출하기
- 서블릿 클래스에서는 jsp 페이지에서 사용하는 page 지시자를 사용할 수 없기 때문에
forward 메서드를 사용하여 에러 페이지를 호출
> 두 수를 더하는 서블릿 클래스 : NewAdderServlet.java
// NewAdderServlet.java import javax.servlet.http.* ; import javax.servlet.* ; import java.io.* ; public class NewAdderServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { try { String str1 = request.getParameter("NUM1") ; String str2 = request.getParameter("NUM2") ; int num1 = Integer.parseInt(str1) ; int num2 = Integer.parseInt(str2) ; int result = num1 + num2 ; response.setContentType("text/html; charset=euc-kr") ; PrintWriter out = response.getWriter() ; out.println("<html>") ; out.println("<head><title>덧셈 프로그램</title></head>") ; out.println("<body>") ; out.printf("%d + %d = %d", num1, num2, result) ; out.println("</body>") ; out.println("</html>") ; } catch (NumberFormatException e) { RequestDispatcher dispatcher = request.getRequestDispatcher("data-error") ; dispatcher.forward(request, response) ; } } }
> 에러 페이지 : DataErrorServlet.java
// DataErrorServlet.java import javax.servlet.http.* ; import javax.servlet.* ; import java.io.* ; public class DataErrorServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html; charset=euc-kr") ; PrintWriter out = response.getWriter() ; out.println("<html>") ; out.println("<head><title>덧셈 프로그램 - 에러 화면</title></head>") ; out.println("<body>") ; out.println("잘못된 데이터가 입력되었습니다.") ; out.println("</body>") ; out.println("</html>") ; } }
> 실행결과
'IT > Spring-JSP&Servlet' 카테고리의 다른 글
[java] 익셉션 타입 (0) 2020.10.28 [JSP/Servlet] 익셉션 처리(2/2) - web.xml 파일 처리 (0) 2020.10.28 웹 애플리케이션 - 서블릿& 톰캣 (0) 2020.10.12 JSP 정리 (0) 2020.04.01 [java] 쿠키와 세션 (0) 2020.03.29