에러처리
From JCFWiKi
Copyright © 2007 Daewoo Information Systems Co., Ltd. |
[편집] 에러 처리 개요
- JCF 에서의 에러 처리는 주로 스트럿츠를 사용하여 처리하고 있습니다. 여기서 에러 처리(혹은 예외 처리)는 프로그램이 수행되면서 DB 커넥션이 네트워크 연결 불가로 실패하거나, 비즈니스 로직 상의 허점으로 인해 널포인트 에러가 발생하는 등 다양한 상황들을 개발자가 어떻게 제어할 것인지에 대한 방법을 설명합니다.
- 여기서는 다음의 내용을 다룹니다.
- 스트럿츠2의 예외 처리 기능을 사용하는 경우 전체적인 그림
- 스트럿츠2에서 간단한 선언적 예외 처리 방법
- JCF의 예외 처리 방법
[편집] 스트럿츠2의 예외 처리 개요
- 스트럿츠2에서는 액션 단위로 요청을 처리하듯이 액션 단위로 예외를 처리하게 됩니다. 액션 요청을 처리하는 과정에서 에러 즉, 예외 사항(Exception)이 발생하게 되면(Throw), 해당 예외의 종류에 따라 적합한 처리를 할 수 있도록 도와줍니다.
- [스트럿츠2 예외 처리 개념 그림 넣기]
[편집] 스트럿츠2에서 간단한 선언적 예외 처리 방법
- 스트럿츠2는 예외 처리를 선언적인 방법으로 제어할 수 있도록 합니다. struts.xml의 선언에 의해서 예외의 종류(타입)에 매핑되는 스트럿츠2 리절트(Result)를 수행하도록 함으로서 해당 예외에 따른 적절한 제어를 가능하게 합니다. 원하는 JSP 페이지로 요청을 돌리거나 또 다른 액션을 연결할 수도 있게 됩니다. 주의해야 할 점은 반드시 호출된 액션 클래스 메소드가 예외를 던져야 한다는 것 입니다. 액션 클래스 메소드 밖(?)으로 예외가 던져져야만 스트럿츠2가 예외가 발생되었음을 인식하고 이를 처리해 줄 수 있기 때문입니다. 따라서 액션 클래스 메소드 내부에서 try/catch와 같은 구문으로 예외를 잡아서 직접 처리해 주는 경우는 스트럿츠2의 예외 처리 장치를 사용할 수 없게 됩니다.
- 다음의 간단한 예제를 통해 예외를 처리하는 방법을 볼 수 있습니다. execute() 액션 메소드에서는 항상 예외를 일이킬 것이기 때문에 success.jsp의 화면을 보여지지 못하고 내부 서버 오류(http status 500)를 보여주어야 할 것입니다. 그러나 액션에서 예외 매핑을 통해서 해당 예외 사항 발생 시 error.jsp의 화면을 보여주도록 했기 때문에 500 에러 대신 제어된 화면을 보여줄 수 있게 됩니다.
- 이것은 가장 단순한 예입니다.(일반적으로는 액션 단위의 예외 매핑 처리를 하기보다는 <global-exception-mappings/>을 사용하여 전체 액션들에 대한 예외 처리를 일괄 처리 하는 것이 편리합니다.)
package sample; public class ExceptionTestAction { public String execute(){ System.out.println( "This method will make a NumberFormatException."); String str = "not a number"; int i = Integer.valueOf(str); // 항상 예외를 일이킴. return "SUCCESS"; } }
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="sample" extends="struts-default" namespace="/sample"> <action name="execute" class="sample.ExceptionTestAction"> <result>/sample/success.jsp</result> <result name="error">/sample/error.jsp</result> <exception-mapping result="error" exception="java.lang.NumberFormatException" /> </action> </package> </struts>
// sample/success.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head><title>성공 화면</title></head> <body> 액션이 성공적으로 수행되었습니다. </body> </html>
// sample/error.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head><title>예외 화면</title></head> <body> 액션 수행중 예외가 발생하였습니다. </body> </html>
