HOWTO: 사용자 지정 ASP 오류 처리 페이지 작성

기술 자료 ID : 300043
마지막 검토 : 2001년 9월 17일 월요일
수정 : 1.0
이 문서는 이전에 다음 ID로 출판되었음: KR300043
이 페이지에서
요약
예제 페이지 작성
오류 처리 없이 시험
오류 처리 적용 시험
오류 코드 이해
유용한 정보 및 주의할 점
참조

요약

서버 쪽 스크립트에 오류가 발생하는 경우 ASP(Active Server Pages)가 코드 실행을 중지하고 발생한 문제와 연관된 오류를 표시합니다. 그러나, 오류에 상관 없이 코드가 계속 실행되도록 하고 문제를 사용자 지정 코드로 처리할 수 있습니다.

이 문서에서는 특히 0으로 나누기를 검사하고 기타 발생한 오류에 대한 일반적인 오류를 제거하는 오류 처리 사용법에 대하여 설명합니다. 예제 페이지는 두 개의 HTML 입력란을 표시하고, 동일한 페이지에 다시 게시하며, 어떤 단추를 클릭했는지에 따라 곱하기나 나누기 작업을 수행합니다. 예를 들어, 사용자가 30을 입력하고 Divide를 클릭하면 사용자 지정 오류 처리 페이지를 사용하여 이에 대한 사용자 지정 메시지를 표시할 수 있습니다. 사용자가 문자를 입력하는 등 다른 문제가 발생하는 경우 오류 번호와 설명을 표시하면 됩니다. 이 경우에는 페이지가 중단되지는 않으며 사용자가 다시 시도할 수 있습니다.

예제 페이지 작성

1. 시작 메뉴에서 프로그램보조프로그램을 차례로 가리킨 다음 메모장을 클릭합니다.
2. 메모장에서 ErrorHaldle.asp라는 새 ASP 페이지를 만듭니다.
3. 아래 코드를 복사하여 메모장에 붙여 넣습니다.
<%@ Language=VBScript %>
<HTML>
<HEAD>
</HEAD>
<BODY> 

<%

'On Error Resume Next

If Request.Form("sbmtMultiply")<>"" then 'If multiply is clicked
   Value=Cint(Request.Form("txtA"))*Cint(Request.Form("txtB"))
End If
If Request.Form("sbmtDivide")<>"" then 'If divide is clicked
   Value=Cint(Request.Form("txtA"))/Cint(Request.Form("txtB"))
End If
If Err.number<>0 then
   If Err.number=11 then  '11 is the number that occurs for division by zero.
      Response.Write "This is a custom message. You cannot divide by zero."
      Response.Write "Please type a different value in the second textbox!<p>"
	else
      Response.Write "An Error Has Occurred on this page!<BR>"
      Response.Write "The Error Number is: " & Err.number & "<BR>"
      Response.Write "The Description given is: " & Err.Description & "<BR>"
   End If
End If
%>

<FORM action="" method=POST name=f1>
A:<INPUT type="text" name=txtA size=5> <BR>B:<INPUT type="text" name=txtB size=5><BR>
<INPUT type="submit" value="Multiply: A x B" name=sbmtMultiply>
<INPUT type="submit" value="Divide: A/B" name=sbmtDivide>
<BR>Result: <INPUT type="text" name=txtResult value="<%=Value%>">
</FORM>

</BODY>
</HTML>
4. ErrorHandle.asp를 웹 서버의 홈 디렉터리(예: C:\Inetpub\Wwwroot)에 저장합니다.
5. 웹 브라우저를 시작합니다. 예를 들어, 시작 메뉴에서 프로그램을 가리키고 Internet Explorer를 클릭합니다.
6. 웹 브라우저의 주소 표시줄에 다음 주소를 입력하고 Enter 키를 누릅니다.
http://servername/ErrorHandle.asp
여기서 "servername"은 IIS 서버가 실행 중인 서버 컴퓨터의 이름입니다. 이 컴퓨터가 현재 작업 중인 컴퓨터와 동일한 경우 컴퓨터 이름에 "localhost"를 대신 사용할 수 있습니다.

오류 처리 없이 시험

1. 유효한 값(예: 2.2 또는 5.5)을 입력하고 단추를 클릭합니다. 적절한 결과가 표시될 것입니다.
2. 00을 입력합니다. 오류가 발생하며 ASP 메시지가 표시될 것입니다. 이 경우 다시 시도할 수 없으며, 대신 페이지를 새로 고치거나 페이지를 다시 검색해야 합니다.
3. 페이지를 새로 고칩니다. 입력란에 e 또는 다른 문자를 입력합니다. 페이지에 오류가 발생하며 ASP 오류가 표시됩니다. 여기에서도, 페이지를 새로 고친 후 다시 시도해야 합니다.

오류 처리 적용 시험

1. 메모장에서 ErrorHandle.asp를 엽니다.
2. 다음 명령줄을 찾습니다.
'On Error Resume Next
3. 명령줄에서 어포스트로피를 삭제하여 주석을 해제합니다.
On Error Resume Next
4. ErrorHandle.asp를 저장합니다.
5. 캐시에 저장된 내용을 지우기 위해 브라우저 창을 닫고 웹 브라우저를 다시 시작해야 할 수도 있습니다. 또는 F5 키를 눌러 페이지를 새로 고칠 수 있습니다.
6. 유효한 값(예: 2.2 또는 5.5)을 입력하고 단추를 클릭합니다. 적절한 결과가 표시될 것입니다.
7. 00을 입력합니다. 오류가 발생하며 사용자 지정 메시지가 표시될 것입니다. 사용자 지정 오류 처리 코드가 오류를 처리합니다. 또한 서식을 사용하여 다시 시도할 수 있습니다.
8. 입력란에 e 또는 다른 문자를 입력합니다. 이 경우 문제에 대한 오류 번호와 설명이 표시되지만 페이지에 오류가 발생하지 않으며 다시 시도할 수 있습니다.

오류 코드 이해

1. "On Error Resume Next" 명령줄이 페이지에 오류가 발생하더라도 작업을 계속하도록 지시합니다. 이 명령줄은 문제를 Err 개체에 기록하지만 나머지 코드의 실행을 계속합니다. 첫 시험에서와 같이 이 명령줄이 없는 경우 페이지는 즉시 페이지 처리를 멈추고 감지된 문제에 대한 오류 페이지를 표시합니다.
2. 코드의 다음 부분은 어떤 단추가 클릭되었는지 파악하고 작업에 해당되는 곱(곱한 값) 또는 몫(나눈 값)을 "Value" 변수에 보냅니다.
If Request.Form("sbmtMultiply")<>"" then 'If multiply is clicked
	Value=Cint(Request.Form("txtA"))*Cint(Request.Form("txtB"))
End If
If Request.Form("sbmtDivide")<>"" then 'If divide is clicked
	Value=Cint(Request.Form("txtA"))/Cint(Request.Form("txtB"))
End If
3. 코드의 마지막 부분은 Err 개체의 값을 검사하여 발생한 오류에 대한 처리 방법을 결정합니다. 이 부분은 중요합니다. Err.number 값이 0인 경우 감지된 오류가 없으므로 내부 코드는 처리되지 않습니다. Err.number가 0이 아닌("If Err.Number<>0") 경우 코드는 어떤 오류가 발생했는지 파악하여 적절히 처리합니다. 이 경우 예제 코드는 0으로 나누기 오류가 있는지만 확인합니다. 0으로 나누기에 대한 Err.number 값은 11이므로 코드는 다음과 같이 이 값을 검사합니다.
   If Err.number=11
이 경우 코드는 메시지만 표시합니다. 함수를 호출하거나 리디랙션하도록 지정할 수도 있습니다.

이제 루프의 중간에 있기 때문에 "else" 부분에서 0으로 나누기 이외의 오류를 처리합니다. 이 경우 코드는 메시지에 있는 Err 개체의 "Description" 및 "number" 속성을 사용합니다.
If Err.number<>0 then
   If Err.number=11 then  '11 is the number that occurs for division by zero.
      'Run any code here. In this case, display a custom message.
      'Another option would be to redirect to another page, as in
      'Response.Redirect("divbyzero.asp")
      Response.Write "This is a custom message. You cannot divide by zero."
      Response.Write "Please type a different value in the second textbox!<p>"
   else
      Response.Write "An Error Has Occurred on this page!<BR>"
      Response.Write "The Error Number is: " & Err.number & "<BR>"
      Response.Write "The Description given is: " & Err.Description & "<BR>"
   End If
End If

유용한 정보 및 주의할 점

처리할 특정 문제에 대한 번호와 설명을 찾으려면 "On Error Resume Next"와 다음의 코드를 사용하는 페이지에서 문제가 발생하도록 합니다.
      Response.Write "The Error Number is: " & Err.number & "<BR>"
      Response.Write "The Description given is: " & Err.Description & "<BR>"
이 코드는 성능 오류나 "중단" 오류는 찾을 수 없습니다.
Err 컬렉션은 가장 최신의 오류만을 추적합니다. 예를 들어, 아래와 같은 코드를 살펴 봅시다.
X=Cint("x")
Y=(3/0)
Response.Write Err.Description
이 코드는 0으로 나누기 오류 메시지를 표시하지만 형식 불일치 문제에 대한 메시지는 표시하지 않습니다.

참조

ASPError 개체는 IIS 5.0에서 도입되었으며 몇 가지 오류 처리 옵션이 추가되었습니다. 직접 오류를 처리하고 코드의 실행을 계속하려면 Err 개체를 사용해야 합니다. ASPError 개체는 이전에 ASP 개발자가 사용할 수 있던 것보다 향상된 사용자 지정 오류 처리를 추가합니다. ASPError 개체에서 제공하는 추가 기능에 대한 내용은 다음 MSDN 웹 사이트를 참조하십시오.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/iisref/html/psdk/asp/vbob1dtg.asp (새 창으로 열기) (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/iisref/html/psdk/asp/vbob1dtg.asp)
Err 개체에 대한 자세한 내용은 다음 Microsoft 웹 사이트를 참조하십시오.
http://msdn.microsoft.com/scripting/default.htm?/scripting/vbscript/doc/vsobjErr.htm (새 창으로 열기) (http://msdn.microsoft.com/scripting/default.htm?/scripting/vbscript/doc/vsobjErr.htm)
자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
224070 (http://support.microsoft.com/kb/224070/EN-US/) Creating Custom ASP Error Pages
이올린에 북마크하기(0) 이올린에 추천하기(0)

트랙백 보낼 주소 :: http://coolsoo.net/blog/uni1978/trackback/1173598925

댓글을 달아주세요:: 네티켓은 기본, 스팸은 사절

[로그인][오픈아이디란?]

◀ PREV : [1] : ... [42] : [43] : [44] : [45] : [46] : [47] : [48] : [49] : [50] : ... [387] : NEXT ▶

BLOG main image
열정은 동사다. by 無聲呼人

카테고리

All that my life (387)
Notice (3)
Monologue (215)
책, 영화 그리고 음악 (15)
내가 보는 세상 (22)
I like computer (110)
WishList (9)

글 보관함

달력

«   2009/01   »
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Statistics Graph