ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JSP/Servlet] 익셉션 처리(1/2) - 에러 페이지 처리, JSP/Servlet에서 에러 페이지 호출
    IT/Spring-JSP&Servlet 2020. 10. 28. 00:33

    출처 : unsplash

     

    ■ 들어가기

    - 뇌를 자극하는 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

    댓글

Designed by Tistory.