10 장. 에러처리
1. page 지시문을활용한에러처리 page 지시문의 errorpage 와 iserrorpage 속성 errorpage 속성 이속성이지정된 JSP 페이지내에서 Exception이발생하는경우새롭게실행할페이지를지정하기위하여사용 iserrorpage 속성 iserrorpage 는위와같은방법으로새롭게실행되는페이지에지정할속성으로현재페이지가 Exception 처리를위한페이지임을지정하기위하여사용 errorpage 와 iserrorpage 속성사용목적 1) 발생하는오류를조금더일관성있고체계적으로처리하기위함 2) 개발당시의 Exception 처리와서비스를운영할때의 Exception 처리방법을바꾸기위함 실제서비스를운영할때에는일종의안내메시지를보여주어이용자가사이트를더욱신뢰할수있도록하는것이좋다. 2/27
1. page 지시문을활용한에러처리 errorpage 와 iserrorpage 속성예제 [ 예제 10.1-1] jspbook\ch10\divide_form.html 01 <%@ page contenttype="text/html;charset=utf-8" %> 02 <html> 03 <head> 04 <meta http-equiv="content-type" content="text/html;charset=utf-8"> 05 <title> 나누기폼 </title> 06 </head> 07 <body> 08 정수만입력하세요. <br/> 09 <form action="divide.jsp" method="get"> 10 <input type="text" name="num1" size="3" /> / 11 <input type="text" name="num2" size="3" /> = <br/> 12 <input type="submit" value="submit" /> 13 <form> 14 </body> 15 </html> 3/27
1. page 지시문을활용한에러처리 errorpage 와 iserrorpage 속성예제 [ 예제 10.1-2] jspbook\ch10\divide.jsp 01 <%@ page contenttype="text/html;charset=utf-8" %> 02 <% 03 int num1 = Integer.parseInt(request.getParameter("num1")); 04 int num2 = Integer.parseInt(request.getParameter("num2")); 05 %> 06 <html> 07 <head> 08 <title> 나누기처리 </title> 09 </head> 10 <body> 11 <%= num1 %> / <%= num2 %> = <%= (double)num1 / (double)num2 %> <br/> 12 <a href="divide_form.html">back</a> 13 </body> 14 </html> 4/27
1. page 지시문을활용한에러처리 errorpage 와 iserrorpage 속성예제 정수를입력하여야할텍스트창에문자, 예를들어 "a" 를입력하였을때출력되는 Exception 정보 5/27
1. page 지시문을활용한에러처리 errorpage 와 iserrorpage 속성예제 Exception Stack Trace ( 예외스택자취 ) [Note] Exception Stack Trace ( 예외스택자취 ) Exception Stack Trace 란 Exception 이발생한메소드호출을발생한순서의역순으로나열한다. 즉가장최근의메소드호출이먼저리스트되고그다음줄에이전의메소드호출이리스트된다. 이리스트를사용해서내부적으로메소드들이어떠한과정으로호출되었는지를알수있으며디버깅에중요한정보로활용할수있다. 실제서비스가개시된응용에서는이러한 Exception Stack Trace 가보이는화면이사용자에게보여지면서비스신뢰성에큰타격을준다. 6/27
1. page 지시문을활용한에러처리 errorpage 와 iserrorpage 속성 [ 예제 10.1-3] jspbook\ch10\divide2.jsp 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> divide_form.html 의변경내용 기존 : <form action="divide.jsp" method="get"> ==> 수정 : <form action="divide2.jsp" method="get"> <%= num1 %> / <%= num2 %> = <%= (double)num1 / (double)num2 %> <br/> <a href="divide_form.jsp">back</a> <form> </body> </html> 7/27
1. page 지시문을활용한에러처리 errorpage 와 iserrorpage 속성 [ 예제 10.1-4] jspbook\ch10\error\errorhandler.jsp 01 <%@ page contenttype="text/html;charset=utf-8" %> 02 <%@pageiserrorpage="true"%> // 현재페이지가 error가발생했을때출력되는페이지임을알려줌. 03 <html> 04 <head> 05 <title>divide 에러처리 </title> 06 </head> 07 <body> 08 <H2 align="center"> 나누기처리중에러가발생했습니다.</H2> 09 <hr> 10 <table align="center" width="80%"> 11 <tr bgcolor="yellow"> 12 <td> 빠른시일내에올바르게복구하겠습니다. 문의는관리자에게해주세요.</td> 13 </tr> 14 <tr bgcolor="yellow"> 15 <td> 관리자 E-MAIL: jspbook@jspbook.org</td> 16 </tr> 17 </table> 8/27 18 </body> 제10장 19 </html>
1. page 지시문을활용한에러처리 사용자입력오류와 Javascript [Note] 사용자입력오류와 Javascript [ 그림 10-4] 과 [ 그림 10-5] 에서보여주는예제가실제서비스되는웹페이지에적용될때에대개는사용자가잘못된입력을하지못하도록 Javascript 를이용하여클라이언트측스크립팅코드를함께넣는다. 즉, a 를입력하고 Submit 버튼을누르면 Javascript 를활용해서대화창을띄우고입력이잘못되었다는경고메시지를보여주는것이좋다. 이로써쓸데없이서버로의잘못된트래픽을유발하는것을방지하는것이올바른개발방법이다. 9/27
1. page 지시문을활용한에러처리 exception 기본객체사용하기 exception 기본객체 page 지시문에서오류페이지 (iserrorpage="true") 로지정된 JSP 페이지에서예외가발생할때전달되는 java.lang.throwable의인스턴스에대한참조변수 page 지시문에서 iserrorpage="true" 로지정을해야 exception 기본객체를활용할수있음 exception 기본객체의주요메소드 메소드리턴타입설명 getmessage() String 문자열로된오류메시지를리턴한다. printstacktrace() printstacktrace(printwriter pw) tostring() 10/27 void void String 표준출력스트림으로스택추적정보를출력한다. PrintWriter 객체스트림으로스택추적정보를출력한다. 예외클래스이름과함께오류메시지를리턴한다. 제10장
1. page 지시문을활용한에러처리 01 02 03 04 05 06 07 08 09 10 11 12 13 exception 기본객체사용하기예제 <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 11/27
1. page 지시문을활용한에러처리 01 02-03 04 05 06 07 08 09 10 11 12 exception 기본객체사용하기예제 [ 예제 10.2-2] jspbook\ch10\errformhandler.jsp <%@ 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> 12/27
1. page 지시문을활용한에러처리 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 exception 기본객체사용하기예제 <%@ page contenttype="text/plain;charset=utf-8" %> <%@ page iserrorpage="true" import="java.io.*" %> 려줌 <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> 13/27 </html> [ 예제 10.2-3] jspbook\ch10\errorhandler2.jsp // 현재페이지가 error 가발생했을때출력되는페이지임을알 // 자세한 exception 정보를주석으로만출력함
1. page 지시문을활용한에러처리 exception 기본객체사용하기예제 errhandler.jsp 의동작과정 14/27
2. HTTP 에러코드별에러페이지지정하기 404 에러발생시페이지출력예 디폴트출력화면 Time 지웹사이트의출력화면 15/27
2. HTTP 에러코드별에러페이지지정하기 HTTP 에러발생시출력할페이지의 URL 지정 web.xml 에다음과같이지정 <?xml version="1.0" encoding="utf-8"?> <web-app...>... <error-page> <error-code> 에러코드 </error-code> <location> 에러페이지의 URL</location> </error-page> </web-app> 16/27
2. HTTP 에러코드별에러페이지지정하기 404, 500 에러발생시출력할페이지설정예 <?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> [ 예제 10.3-1] jspbook\ch10\web-inf\web.xml <error-page> <error-code>500</error-code> <location>/ch10/error/500errorhandler.jsp</location> </error-page> <!-- 삽입끝 --> </web-app> 17/27
2. HTTP 에러코드별에러페이지지정하기 404 에러발생시출력할페이지구성예 [ 예제 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> 18/27
2. HTTP 에러코드별에러페이지지정하기 500 에러발생시출력할페이지구성예 [ 예제 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> 19/27
2. HTTP 에러코드별에러페이지지정하기 404 에러발생및출력화면 브라우저에서 URL 입력예 다음과같이존재하지않는페이지에대한 URL 을입력한다. http://localhost:8080/jspbook/ch10/11111.jsp 출력화면 20/27
2. HTTP 에러코드별에러페이지지정하기 500 에러발생및출력화면 divide_form.html의 09라인수정 기존 : <form action="divide2.jsp" method="get"> ==> 수정 : <form action="divide.jsp" method="get"> 500 에러를발생하기위하여 divide_form.html 의실행에서문자를입력값으로넣는모습 21/27
2. HTTP 에러코드별에러페이지지정하기 500 에러발생및출력화면 500 에러에대한출력내용 22/27
3. Java 고유의예외종류별에러페이지지정하기 Java 고유의예외종류에따라서에러페이지구성예 [ 예제 10.4-1] jspbook\ch10\web-inf\web.xml <?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> 23/27
3. Java 고유의예외종류별에러페이지지정하기 NullPointerException 에러발생시출력할페이지구성예 [ 예제 10.4-2] jspbook\ch10\error\nullpointererrorhandler.jsp 01 <%@ page contenttype="text/html;charset=utf-8" %> 02 <% 03 response.setstatus(httpservletresponse.sc_ok); 04 %> 05 <html> 06 <head><title>nullpointerexception 예외발생 </title></head> 07 <body> 08 09 <h1> 예외타입 NullPointerException</h1> 10 서비스처리과정에서예외가발생하였습니다. 조속한시일내로해결하겠습니다. 11 12 </body> 13 </html> 24/27
3. Java 고유의예외종류별에러페이지지정하기 01 02 03 04 05 06 07 08 09 NullPointerException 에러발생및출력화면 [ 예제 10.4-3] jspbook\ch10\readid.jsp <%@ page contenttype="text/html;charset=utf-8" %> <html> <head><title> 파라미터출력및에러처리페이지지정 </title></head> <body> ID 파라미터값에대한대문자처리 : <%= request.getparameter("id").touppercase() %> </body> </html> 25/27
4. 에러페이지지정의일반적인방법 에러페이지를지정및구성하는 3 가지방법 page 지시문및 errorpage와 iserrorpage 속성을활용한에러페이지지정하기 web.xml의 <error-code> 태그를활용한 HTTP 에러코드별에러페이지지정하기 web.xml을 <exception-type> 태그를활용한 Java 고유의예외종류별에러페이지지정하기 위방법을중복하여사용하였을때적용되는우선순위 우선순위 1: page 지시문의 errorpage 속성활용 우선순위 2: JSP 페이지에서발생한 HTTP 에러또는예외타입이 web.xml 파일의 <error-code> 에서지정한에러코드와동일하거나 <exception-type> 에서지정한예외타입과동일한경우지정한에러페이지를보여준다. 우선순위 3: 위의순위중아무것도해당되지않을경우 Tomcat 엔진이제공하는기본에러페이지를보여준다. 26/27 제 1 장
4. 에러페이지지정의일반적인방법 에러페이지를지정및구성하는일반적인관례 일반적인 HTTP 에러코드 (404, 500 등 ) 에대한에러페이지를 web.xml 의 <error-code> 태그를활용하여지정한다. 별도로처리해주어야하는 Java 고유의예외타입에대한에러페이지는 web.xml 에 <exception-type> 태그를활용하여지정한다. 특정 JSP 페이지에서발생하는 HTTP 에러또는 Java 고유의예외타입을별도로처리하기위해서는관련에러페이지를 page 지시문의 errorpage 속성을사용해서지정하고에러페이지에는 page 지시문의 iserrorpage 속성에 "true" 을할당한다. 27/27 제 1 장