특별한딸기이야기

예외처리(선언적인 방법) 본문

딸기 공부방/struts and spring

예외처리(선언적인 방법)

특별한녀석 2008. 11. 13. 15:20

교재에 나와있는 예제는 이해하기 힘드므로 과제로 나온 로그인을 가지고 설명

struts-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC
 "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
 "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">
<struts-config>
 <form-beans>
  <form-bean name="login_form" type="com.tistory.special0strawberry.Login_Form"/>
 </form-beans>
 
 <global-exceptions>
  <exception type="com.tistory.special0strawberry.Login_Process_Exception" key="errors.member.iderror"
   scope="request" path="/login.do" />
 </global-exceptions>
 
 <global-forwards>
  <forward name="success" path="/index.do" module="" redirect="true"/>
 </global-forwards>
 
 <action-mappings>
  <action path="/index" forward="/index.jsp"/>
  <action path="/login" forward="/Login/login_form.jsp"/>
  <action path="/login_process" type="com.tistory.special0strawberry.Login_Process_Action" name="login_form"
   scope="request" validate="false">
   <forward name="fail" path="/login.do"/>
  </action>
 </action-mappings>
 <message-resources parameter="MessageResources"/>
</struts-config>
<!-- 위 부분에서 보아야 할 부분은 global-excpetions이다. 예외가 발생하면 그 예외가 global-exception에서 체크 되고 그에 맞는 키를 찾는다. 키 값을 어디서 찾는가 하면 메세지리소스라는 프로퍼티 파일에서 찾게 되는데 이 프로퍼티 파일은 맨 마지막 부분에 보면 나와있다. 파일 위치는 소스 디렉토리이다. 그럼 찾아온 키 값을 어디서 뿌려주는 가하면 예외 선언한 마지막에 보면 path가 나와 있다. 그 경로로 찾아가게 된다. -->

Login_Process_Action class

package com.tistory.special0strawberry;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;

public class Login_Process_Action extends Action
{
 @Override
 public ActionForward execute(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response)
   throws Exception
 {
  Login_Form login_information = (Login_Form)form;
  Member_Service member = new Member_Service();
  int result = 0;
  ActionErrors errors = new ActionErrors();
  
  result = member.Login(login_information.getId(), login_information.getPassword());
  
  
  if(result == 1) //success
  {
   return mapping.findForward("success");
  }
  else if(result == 0) // id error
  {
   throw new Login_Process_Exception();
  }
  else if(result == -1) // password error
  {
   errors.add("password", new ActionMessage("password 입력이 이상합니다.", false));
  }
  else
  {
   errors.add("unknown", new ActionMessage("알 수 없는 error발생", false));
  }
  
  this.saveErrors(request, errors);
  
  return mapping.findForward("fail");
 }
}
/* 여기서는 로그인 폼에서 넘어온 액션폼의 값을 받아서 로그인 처리하는 모습이다. 멤버의 로그인은 결과값으로 성공, 아이디에러, 패스워드 에러에 해당하는 값을 반환한다. 소스 밑 부분에 보면 그 결과값에 따른 처리가 if문으로 되어있다. 여기서 눈여겨 봐야 할 부분은 아이디에러 부분, 이 부분은 글로벌 에러로 넘어가게 된다. 패스워드 부분은 프로그래밍적 에러 처리 부분이다.*/

login_form.jsp

<%@
 page contentType="text/html;charset=euc-kr"
%>
<%@
 page import="org.apache.struts.action.*"
 %>
<%@
 page import="java.util.*"
 %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>

<html>
 <head>
  <title>
   로그인 정보 입력 페이지 입니다.
  </title>
 </head>
 <body>
  <html:errors property="errors.member.iderror"/>
  <html:errors property="password"/>
  <br/>
  <form method="post" action="/Struts_Login/login_process.do">
   ID :
   <input type="text" name="id"/>
   <br/>
   Password :
   <input type="text" name="password"/>
   <br/>
   <input type="submit" value="확인"/>
  </form>
 </body>
</html>
<!-- 교재에 나와있는 함수 썼다가 스트레스 엄청 받았다. 강사에게 물어서 해결한 부분이 바로 태그라이브러리 사용법 소스코드가 조금 내 마음에 들지는 않지만 그래도 에러 표시하는데 간단히 사용하게 되니 좋은 것 같다. 나중에 태그 라이브러리를 다시 보게 되면 잘 살펴봐야 겠다는 생각이 든다. -->