27
10. 에러 처리 10

10장 에러처리 - link.koreatech.ac.krlink.koreatech.ac.kr/wp-content/uploads/2014/08/Chapter10.pdf · 1. page 지시문을활용한에러처리 errorPage와isErrorPage 속성예제

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 10장 에러처리 - link.koreatech.ac.krlink.koreatech.ac.kr/wp-content/uploads/2014/08/Chapter10.pdf · 1. page 지시문을활용한에러처리 errorPage와isErrorPage 속성예제

10장. 에러 처리

제10장

Page 2: 10장 에러처리 - link.koreatech.ac.krlink.koreatech.ac.kr/wp-content/uploads/2014/08/Chapter10.pdf · 1. page 지시문을활용한에러처리 errorPage와isErrorPage 속성예제

1. page 지시문을 활용한 에러 처리page 지시문의 errorPage와 isErrorPage 속성 errorPage 속성

이 속성이 지정된 JSP 페이지 내에서 Exception이발생하는 경우 새롭게실행할 페이지를 지정하기 위하여 사용

isErrorPage 속성 isErrorPage는 위와같은 방법으로 새롭게 실행되는 페이지에 지정할속성으로 현재 페이지가 Exception 처리를 위한 페이지임을 지정하기위하여 사용

errorPage와 isErrorPage 속성 사용 목적 1) 발생하는 오류를 조금 더 일관성 있고 체계적으로 처리하기 위함 2) 개발 당시의 Exception 처리와 서비스를 운영할 때의 Exception 처리방법을 바꾸기 위함

실제 서비스를 운영할 때에는 일종의 안내 메시지를 보여주어 이용자가사이트를 더욱 신뢰할 수 있도록 하는 것이 좋다.

제10장2/27

Page 3: 10장 에러처리 - link.koreatech.ac.krlink.koreatech.ac.kr/wp-content/uploads/2014/08/Chapter10.pdf · 1. page 지시문을활용한에러처리 errorPage와isErrorPage 속성예제

1. page 지시문을 활용한 에러 처리errorPage와 isErrorPage 속성 예제

제10장3/27

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

<%@ page contentType="text/html;charset=utf-8" %>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html;charset=utf-8">

<title>나누기 폼</title>

</head>

<body>

정수만 입력하세요. <br/>

<form action="divide.jsp" method="get">

<input type="text" name="num1" size="3" /> /

<input type="text" name="num2" size="3" /> = <br/>

<input type="submit" value="Submit" />

<form>

</body>

</html>

[예제 10.1-1] jspbook\ch10\divide_form.html

Page 4: 10장 에러처리 - link.koreatech.ac.krlink.koreatech.ac.kr/wp-content/uploads/2014/08/Chapter10.pdf · 1. page 지시문을활용한에러처리 errorPage와isErrorPage 속성예제

1. page 지시문을 활용한 에러 처리errorPage와 isErrorPage 속성 예제

제10장4/27

[예제 10.1-2] jspbook\ch10\divide.jsp01

02

03

04

05

06

07

08

09

10

11

12

13

14

<%@ page contentType="text/html;charset=utf-8" %>

<%

int num1 = Integer.parseInt(request.getParameter("num1"));

int num2 = Integer.parseInt(request.getParameter("num2"));

%>

<html>

<head>

<title>나누기 처리</title>

</head>

<body>

<%= num1 %> / <%= num2 %> = <%= (double)num1 / (double)num2 %> <br/>

<a href="divide_form.html">back</a>

</body>

</html>

Page 5: 10장 에러처리 - link.koreatech.ac.krlink.koreatech.ac.kr/wp-content/uploads/2014/08/Chapter10.pdf · 1. page 지시문을활용한에러처리 errorPage와isErrorPage 속성예제

1. page 지시문을 활용한 에러 처리errorPage와 isErrorPage 속성 예제 정수를 입력하여야 할 텍스트 창에 문자, 예를 들어 "a"를 입력하였을때 출력되는 Exception 정보

제10장5/27

Page 6: 10장 에러처리 - link.koreatech.ac.krlink.koreatech.ac.kr/wp-content/uploads/2014/08/Chapter10.pdf · 1. page 지시문을활용한에러처리 errorPage와isErrorPage 속성예제

1. page 지시문을 활용한 에러 처리errorPage와 isErrorPage 속성 예제 Exception Stack Trace (예외 스택 자취)

실제 서비스가 개시된 응용에서는 이러한 Exception Stack Trace 가보이는 화면이 사용자에게 보여지면 서비스 신뢰성에 큰 타격을 준다.

제10장6/27

[Note] Exception Stack Trace (예외 스택 자취)

Exception Stack Trace란 Exception이 발생한 메소드 호출을발생한 순서의 역순으로 나열한다. 즉 가장 최근의 메소드 호출이먼저 리스트 되고 그 다음 줄에 이전의 메소드 호출이 리스트된다. 이 리스트를 사용해서 내부적으로 메소드들이 어떠한과정으로 호출되었는지를 알 수 있으며 디버깅에 중요한 정보로활용할 수 있다.

Page 7: 10장 에러처리 - link.koreatech.ac.krlink.koreatech.ac.kr/wp-content/uploads/2014/08/Chapter10.pdf · 1. page 지시문을활용한에러처리 errorPage와isErrorPage 속성예제

1. page 지시문을 활용한 에러 처리errorPage와 isErrorPage 속성

제10장7/27

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

<%@ page contentType="text/html;charset=utf-8" %>

<%@ page errorPage="error/errorHandler.jsp" %> // page 지시문의 errorPage를 "errorHandler.jsp"로 설정

<%

int num1 = Integer.parseInt(request.getParameter("num1"));

int num2 = Integer.parseInt(request.getParameter("num2"));

%>

<html>

<body>

<title>나누기 처리</title>

</head>

<body>

<%= num1 %> / <%= num2 %> = <%= (double)num1 / (double)num2 %> <br/>

<a href="divide_form.jsp">back</a>

<form>

</body>

</html>

[예제 10.1-3] jspbook\ch10\divide2.jsp

기존: <form action="divide.jsp" method="get">

==>

수정: <form action="divide2.jsp" method="get">

divide_form.html의변경내용

Page 8: 10장 에러처리 - link.koreatech.ac.krlink.koreatech.ac.kr/wp-content/uploads/2014/08/Chapter10.pdf · 1. page 지시문을활용한에러처리 errorPage와isErrorPage 속성예제

1. page 지시문을 활용한 에러 처리errorPage와 isErrorPage 속성

제10장8/27

[예제 10.1-4] jspbook\ch10\error\errorHandler.jsp01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

<%@ page contentType="text/html;charset=utf-8" %>

<%@ page isErrorPage="true" %> // 현재 페이지가 error가 발생했을 때 출력되는 페이지임을 알려줌.

<html>

<head>

<title>divide 에러 처리</title>

</head>

<body>

<H2 align="center">나누기 처리 중 에러가 발생했습니다.</H2>

<hr>

<table align="center" width="80%">

<tr bgcolor="yellow">

<td>빠른 시일내에 올바르게 복구하겠습니다. 문의는 관리자에게 해주세요.</td>

</tr>

<tr bgcolor="yellow">

<td>관리자 E-MAIL: [email protected]</td>

</tr>

</table>

</body>

</html>

Page 9: 10장 에러처리 - link.koreatech.ac.krlink.koreatech.ac.kr/wp-content/uploads/2014/08/Chapter10.pdf · 1. page 지시문을활용한에러처리 errorPage와isErrorPage 속성예제

1. page 지시문을 활용한 에러 처리사용자 입력 오류와 Javascript

제10장9/27

[Note] 사용자 입력 오류와 Javascript

[그림 10-4]과 [그림 10-5]에서 보여주는 예제가 실제 서비스 되는웹페이지에 적용될 때에 대개는 사용자가 잘못된 입력을 하지못하도록 Javascript를 이용하여 클라이언트 측 스크립팅 코드를 함께넣는다 . 즉 , a를 입력하고 Submit 버튼을 누르면 Javascript를활용해서 대화창을 띄우고 입력이 잘못되었다는 경고 메시지를보여주는 것이 좋다. 이로써 쓸데없이 서버로의 잘못된 트래픽을유발하는 것을 방지하는 것이 올바른 개발방법이다.

Page 10: 10장 에러처리 - link.koreatech.ac.krlink.koreatech.ac.kr/wp-content/uploads/2014/08/Chapter10.pdf · 1. page 지시문을활용한에러처리 errorPage와isErrorPage 속성예제

1. page 지시문을 활용한 에러 처리exception 기본 객체 사용하기 exception 기본 객체

page 지시문에서 오류 페이지 (isErrorPage="true") 로 지정된 JSP 페이지에서 예외가 발생할 때 전달되는 java.lang.Throwable의인스턴스에대한 참조 변수

page 지시문에서 isErrorPage="true" 로 지정을 해야 exception 기본객체를 활용할 수 있음

exception 기본 객체의 주요 메소드

제10장10/27

메소드 리턴 타입 설명

getMessage() String 문자열로 된 오류 메시지를 리턴한다.

printStackTrace() void표준 출력 스트림으로 스택 추적 정보를 출력한

다.

printStackTrace(PrintWriter pw) voidPrintWriter 객체스트림으로 스택 추적 정보를

출력한다.

toString() String예외 클래스 이름과 함께 오류 메시지를 리턴 한

다.

Page 11: 10장 에러처리 - link.koreatech.ac.krlink.koreatech.ac.kr/wp-content/uploads/2014/08/Chapter10.pdf · 1. page 지시문을활용한에러처리 errorPage와isErrorPage 속성예제

1. page 지시문을 활용한 에러 처리exception 기본 객체 사용하기 예제

제10장11/27

01

02

03

04

05

06

07

08

09

10

11

12

13

<html>

<head>

<meta http-equiv="Content-Type" content="text/html;charset=utf-8">

<title>exception 기본 객체 활용</title>

</head>

<body>

<form action="errformhandler.jsp" method="post">

나이를 입력하세요 :

<input type="text" name="age" />

<input type="submit" value="Submit" />

</form>

</body>

</html>

[예제 10.2-1] jspbook\errform.html

Page 12: 10장 에러처리 - link.koreatech.ac.krlink.koreatech.ac.kr/wp-content/uploads/2014/08/Chapter10.pdf · 1. page 지시문을활용한에러처리 errorPage와isErrorPage 속성예제

1. page 지시문을 활용한 에러 처리exception 기본 객체 사용하기 예제

제10장12/27

[예제 10.2-2] jspbook\ch10\errformhandler.jsp

01

02

-

03

04

05

06

07

08

09

10

11

12

<%@ page contentType="text/html;charset=utf-8"%>

<%@ page errorPage="error/errorHandler2.jsp" %> // page 지시문의 errorPage를

// "errhandler2.jsp"로 설정

<html>

<head><title>exception 기본 객체 활용</title></head>

<body>

<%

int age = Integer.parseInt(request.getParameter("age"));

%>

<p>Your age is : <%= age %> years.</p>

<p><a href="errform.html">Back</a>.</p>

</body>

</html>

Page 13: 10장 에러처리 - link.koreatech.ac.krlink.koreatech.ac.kr/wp-content/uploads/2014/08/Chapter10.pdf · 1. page 지시문을활용한에러처리 errorPage와isErrorPage 속성예제

1. page 지시문을 활용한 에러 처리exception 기본 객체 사용하기 예제

제10장13/27

[예제 10.2-3] jspbook\ch10\errorhandler2.jsp

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

<%@ page contentType="text/plain;charset=utf-8" %>

<%@ page isErrorPage="true" import="java.io.*" %> // 현재 페이지가 error가 발생했을 때 출력되는 페이지임을 알

려줌

<html>

<head><title>exception 기본 객체 활용</title></head>

<body>

<%= exception.toString() %><br> // exception의 정보를 보여줌

<%

out.println("<!--");

StringWriter sw = new StringWriter();

PrintWriter pw = new PrintWriter(sw);

exception.printStackTrace(pw);

out.print(sw.toString());

sw.close();

pw.close();

out.println("-->");

%>

</body>

</html>

// 자세한 exception 정보를 주석으로만 출력함

Page 14: 10장 에러처리 - link.koreatech.ac.krlink.koreatech.ac.kr/wp-content/uploads/2014/08/Chapter10.pdf · 1. page 지시문을활용한에러처리 errorPage와isErrorPage 속성예제

1. page 지시문을 활용한 에러 처리exception 기본 객체 사용하기 예제 errhandler.jsp의 동작과정

제10장14/27

Page 15: 10장 에러처리 - link.koreatech.ac.krlink.koreatech.ac.kr/wp-content/uploads/2014/08/Chapter10.pdf · 1. page 지시문을활용한에러처리 errorPage와isErrorPage 속성예제

2. HTTP 에러 코드별 에러 페이지 지정하기404 에러 발생 시 페이지 출력 예 디폴트 출력 화면

Time 지 웹 사이트의 출력 화면

제10장15/27

Page 16: 10장 에러처리 - link.koreatech.ac.krlink.koreatech.ac.kr/wp-content/uploads/2014/08/Chapter10.pdf · 1. page 지시문을활용한에러처리 errorPage와isErrorPage 속성예제

2. HTTP 에러 코드별 에러 페이지 지정하기HTTP 에러 발생 시 출력할 페이지의 URL 지정 web.xml 에 다음과 같이 지정

제10장16/27

<?xml version="1.0" encoding="utf-8"?>

<web-app ...>

...

<error-page>

<error-code>에러 코드</error-code>

<location>에러 페이지의 URL</location>

</error-page>

</web-app>

Page 17: 10장 에러처리 - link.koreatech.ac.krlink.koreatech.ac.kr/wp-content/uploads/2014/08/Chapter10.pdf · 1. page 지시문을활용한에러처리 errorPage와isErrorPage 속성예제

2. HTTP 에러 코드별 에러 페이지 지정하기404, 500 에러 발생 시 출력할 페이지 설정 예

제10장17/27

<?xml version="1.0" encoding="utf-8"?>

<web-app xmlns="http://java.sun.com/xml/ns/javaee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

version="2.5">

...

<!-- 다음 내용을 삽입 -->

<error-page>

<error-code>404</error-code>

<location>/ch10/error/404errorHandler.jsp</location>

</error-page>

<error-page>

<error-code>500</error-code>

<location>/ch10/error/500errorHandler.jsp</location>

</error-page>

<!-- 삽입 끝 -->

</web-app>

[예제 10.3-1] jspbook\ch10\WEB-INF\web.xml

Page 18: 10장 에러처리 - link.koreatech.ac.krlink.koreatech.ac.kr/wp-content/uploads/2014/08/Chapter10.pdf · 1. page 지시문을활용한에러처리 errorPage와isErrorPage 속성예제

2. HTTP 에러 코드별 에러 페이지 지정하기404 에러 발생 시 출력할 페이지 구성 예

제10장18/27

[예제 10.3-2] jspbook\ch10\error\404errorHandler.jsp

01

02

03

04

05

06

07

08

09

10

11

12

13

<%@ page contentType="text/html;charset=utf-8" %>

<%

response.setStatus(HttpServletResponse.SC_OK);

%>

<html>

<head><title>404 에러 발생</title></head>

<body>

<b>

<h1>에러 코드 404</h1>

요청한 페이지는 존재하지 않습니다. URL을 다시 살펴보시기 바랍니다.

</b>

</body>

</html>

Page 19: 10장 에러처리 - link.koreatech.ac.krlink.koreatech.ac.kr/wp-content/uploads/2014/08/Chapter10.pdf · 1. page 지시문을활용한에러처리 errorPage와isErrorPage 속성예제

2. HTTP 에러 코드별 에러 페이지 지정하기500 에러 발생 시 출력할 페이지 구성 예

제10장19/27

[예제 10.3-3] jspbook\ch10\error\500errorHandler.jsp

01

02

03

04

05

06

07

08

09

10

11

12

13

<%@ page contentType="text/html;charset=utf-8" %>

<%

response.setStatus(HttpServletResponse.SC_OK);

%>

<html>

<head><title>500 에러 발생</title></head>

<body>

<b>

<h1>에러 코드 500</h1>

서비스 처리 과정에서 에러가 발생하였습니다. 조속한 시일 내로 해결하겠습니다.

</b>

</body>

</html>

Page 20: 10장 에러처리 - link.koreatech.ac.krlink.koreatech.ac.kr/wp-content/uploads/2014/08/Chapter10.pdf · 1. page 지시문을활용한에러처리 errorPage와isErrorPage 속성예제

2. HTTP 에러 코드별 에러 페이지 지정하기404 에러 발생 및 출력 화면 브라우저에서 URL 입력 예

다음과 같이 존재하지 않는 페이지에 대한 URL을 입력한다.

출력 화면

제10장20/27

http://localhost:8080/jspbook/ch10/11111.jsp

Page 21: 10장 에러처리 - link.koreatech.ac.krlink.koreatech.ac.kr/wp-content/uploads/2014/08/Chapter10.pdf · 1. page 지시문을활용한에러처리 errorPage와isErrorPage 속성예제

2. HTTP 에러 코드별 에러 페이지 지정하기500 에러 발생 및 출력 화면 divide_form.html의 09라인 수정

500에러를 발생하기 위하여 divide_form.html의 실행에서 문자를입력값으로 넣는 모습

제10장21/27

기존: <form action="divide2.jsp" method="get">

==>

수정: <form action="divide.jsp" method="get">

Page 22: 10장 에러처리 - link.koreatech.ac.krlink.koreatech.ac.kr/wp-content/uploads/2014/08/Chapter10.pdf · 1. page 지시문을활용한에러처리 errorPage와isErrorPage 속성예제

2. HTTP 에러 코드별 에러 페이지 지정하기500 에러 발생 및 출력 화면 500에러에 대한 출력 내용

제10장22/27

Page 23: 10장 에러처리 - link.koreatech.ac.krlink.koreatech.ac.kr/wp-content/uploads/2014/08/Chapter10.pdf · 1. page 지시문을활용한에러처리 errorPage와isErrorPage 속성예제

3. Java 고유의 예외 종류별 에러 페이지 지정하기

제10장23/27

Java 고유의 예외 종류에 따라서 에러 페이지 구성 예

<?xml version="1.0" encoding="utf-8"?>

<web-app xmlns="http://java.sun.com/xml/ns/javaee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

version="2.5">

...

<!-- 다음 내용을 삽입 -->

<error-page>

<exception-type>java.lang.NullPointerException</exception-type>

<location>/ch10/error/nullPointerErrorHandler.jsp</location>

</error-page>

<!-- 삽입 끝 -->

</web-app>

[예제 10.4-1] jspbook\ch10\WEB-INF\web.xml

Page 24: 10장 에러처리 - link.koreatech.ac.krlink.koreatech.ac.kr/wp-content/uploads/2014/08/Chapter10.pdf · 1. page 지시문을활용한에러처리 errorPage와isErrorPage 속성예제

3. Java 고유의 예외 종류별 에러 페이지 지정하기

제10장24/27

[예제 10.4-2] jspbook\ch10\error\nullPointerErrorHandler.jsp

NullPointerException 에러 발생 시 출력할 페이지 구성 예

01

02

03

04

05

06

07

08

09

10

11

12

13

<%@ page contentType="text/html;charset=utf-8" %>

<%

response.setStatus(HttpServletResponse.SC_OK);

%>

<html>

<head><title>NullPointerException 예외 발생</title></head>

<body>

<h1>예외 타입 NullPointerException</h1>

서비스 처리 과정에서 예외가 발생하였습니다. 조속한 시일 내로 해결하겠습니다.

</body>

</html>

Page 25: 10장 에러처리 - link.koreatech.ac.krlink.koreatech.ac.kr/wp-content/uploads/2014/08/Chapter10.pdf · 1. page 지시문을활용한에러처리 errorPage와isErrorPage 속성예제

3. Java 고유의 예외 종류별 에러 페이지 지정하기

제10장25/27

[예제 10.4-3] jspbook\ch10\readID.jsp

NullPointerException 에러 발생 및 출력 화면

01

02

03

04

05

06

07

08

09

<%@ page contentType="text/html;charset=utf-8" %>

<html>

<head><title>파라미터 출력 및 에러 처리 페이지 지정</title></head>

<body>

ID 파라미터 값에 대한 대문자 처리: <%= request.getParameter("ID").toUpperCase() %>

</body>

</html>

Page 26: 10장 에러처리 - link.koreatech.ac.krlink.koreatech.ac.kr/wp-content/uploads/2014/08/Chapter10.pdf · 1. page 지시문을활용한에러처리 errorPage와isErrorPage 속성예제

4. 에러 페이지 지정의 일반적인 방법에러페이지를 지정 및 구성하는 3가지 방법 page 지시문 및 errorPage와 isErrorPage 속성을 활용한 에러 페이지지정하기

web.xml의 <error-code>태그를 활용한 HTTP 에러 코드별 에러 페이지지정하기

web.xml을 <exception-type>태그를 활용한 Java 고유의 예외 종류별에러 페이지 지정하기

위 방법을 중복하여 사용하였을 때 적용되는 우선순위

우선순위 ①: page 지시문의 errorPage 속성 활용 우선순위 ②: JSP 페이지에서 발생한 HTTP 에러 또는 예외 타입이

web.xml 파일의 <error-code>에서 지정한 에러 코드와 동일하거나<exception-type>에서 지정한 예외 타입과 동일한 경우 지정한 에러페이지를 보여준다.

우선순위 ③: 위의 순위 중 아무 것도 해당되지 않을 경우 Tomcat 엔진이 제공하는 기본 에러 페이지를 보여준다.

제1장26/27

Page 27: 10장 에러처리 - link.koreatech.ac.krlink.koreatech.ac.kr/wp-content/uploads/2014/08/Chapter10.pdf · 1. page 지시문을활용한에러처리 errorPage와isErrorPage 속성예제

4. 에러 페이지 지정의 일반적인 방법에러페이지를 지정 및 구성하는 일반적인 관례

일반적인 HTTP 에러 코드(404, 500 등)에 대한 에러 페이지를web.xml의 <error-code>태그를 활용하여 지정한다.

별도로 처리해 주어야 하는 Java 고유의 예외 타입에 대한 에러페이지는 web.xml에 <exception-type> 태그를 활용하여 지정한다.

특정 JSP 페이지에서 발생하는 HTTP 에러 또는 Java 고유의 예외타입을 별도로 처리하기 위해서는 관련 에러 페이지를 page 지시문의errorPage 속성을 사용해서 지정하고 에러 페이지에는 page 지시문의isErrorPage 속성에 "true"을 할당한다.

제1장27/27