메소드를 실행하고 값을 리턴시킬 때 여러 값을 리턴 시키는 방법으로

예외처리를 사용할 수 있다.

예를 들어 간단한 로그인 형식의 예제를 사용할 때

로그인이 되면 로그인 된 사람의 이름을 출력하고 아이디나 비밀번호를 잘못 입력했을

경우에는 그에 맞는 화면이 나오게 될 것이다.

하지만 이름을 출력하려면 이름값을 리턴시켜줘야 하는데

이렇게 되면 아이디와 비밀번호가 제대로 입력되었는지의 여부에 대한

결과값을 넘겨주지 못하게 된다. ( 물론 방법이야 있지만 예외처리 응용하는 방법을
알아 보기 위한 한 예제일 뿐이다. )

하지만 예외처리를 적절히 사용한다면 이를 해결할 수 있다.

그 예는 아래에 있다.

로그인을 수행하면 아이디, 비밀번호를 넘겨서 각각의 결과에 따라 페이지 이동을 한다.
아이디,패스워드가 모두 맞다면 try문 안의 내용이 수행되어 Member.jsp로 이동하고,
아이디나 패스워드가 틀리면 LoginException 예외로 인해 catch문 안의 내용이 수행된다.

try{
      String name = new Authentification().checkMemberInfo(request.getParameter("id"),request.getParameter("pass"));
      request.setAttribute("name", name);
            request.getRequestDispatcher("/Member.jsp").forward(request, response);
     }catch (LoginException e){
      if(e.getCode() == -1)
       response.sendRedirect("/ServletTest/NonMember.jsp");
      else
       response.sendRedirect("/ServletTest/PassErr.jsp");
     }

아래는 아이디, 패스워드 체크하는 클래스이다. 정보가 모두 맞을 시 이름값을 리턴하고
정보가 다를경우 그에 해당하는 값을 부여하여 LoginException으로 던져낸다.

public class Authentification {
 String[][] member ={{"id", "1234", "윤연식"},
   {"gdhong", "qwer", "홍길동"},{"daejeon", "univ", "빨대"}};
 
 public String checkMemberInfo(String id, String pass) throws LoginException{
  int retVal = -1;
  int i ;
  for(i = 0; i < member.length; i++){
   if(id.equals(member[i][0])){
    if(pass.equals(member[i][1]))
     retVal = i;
    else
     retVal = -2;          // 비밀번호가 틀림
    break;
   }
  }
  System.out.println(i);
  if (retVal < 0)
   throw new LoginException(retVal);
  return member[retVal][2];
 }

}

아래는 LoginException 내용이다.

package ServletDemo;

public class LoginException extends Exception{
 private int code;
 public LoginException(int code){
  this.code = code;
 }
 public int getCode(){
  return code;
 }

}

Posted by 윤연식
,