에러처리

From JCFWiKi

Jump to: navigation, search

그림:check.gif

  • 산출물 : JCF3.0™ 공통모듈-에러처리가이드
  • 작성자: 김민아
  • 작성일 : 2007/12/03

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>