해당 커스텀 Exception 처리를 통해 에러페이지로 포워딩 하는 부분이다.




순서는 ( controller -> Service -> dao ) 에서 데이터 처리 과정에 오류가 생기면 throw하여 controller에서 에러 페이지로 포워딩 하게 된다.







이 중 먼저 LoginFailException 부분이다.


public class LoginFailException extends Exception {
    public LoginFailException(String msg) {
        super(msg);
    }
}


Exception을 상속받는 클래스로 생성자를 통해 오류 메세지를 Exception 생성자로 전달.









Controller 부분으로 페이지에서 받은 값을 Service로 전달하여 DB를 조회한다.

try catch문에서 커스텀 예외처리를 적용한다.


        MemberService ms = new MemberServiceImpl();
        try {
            Member member = ms.selectMember(m);
           
            HttpSession session = request.getSession();
           
            session.setAttribute("loginUser", member);
           
            response.sendRedirect("index.jsp");
        } catch (LoginFailException e) {
            RequestDispatcher error = request.getRequestDispatcher("WEB-INF/views/common/errorPage.jsp");
            request.setAttribute("message", e.getMessage());
           
            error.forward(request, response);
        }









Service 부분의 인터페이스 부분.

    // 로그인용 메소드
    // public abstract가 전부 들어가기 때문에 애초에 생략해도 된다.(Interface)
    Member selectMember(Member m) throws LoginFailException;


왜 인터페이스를 만들어 메소드를 관리하는지는 다음 페이지에서 설명(https://qdgbjsdnb.tistory.com/226)










이 인터페이스를 받는 Service java 파일

public class MemberServiceImpl implements MemberService{
   
    @Override
    public Member selectMember(Member m) throws LoginFailException {
        // SqlSession은 MyBatis에서 커넥션 대신 사용
        SqlSession session = getSqlSession();
       
        Member member = new MemberDao().selectMember(session, m);
       
        session.close();
       
        return member;
    }
}

throws LoginFailException을 통해서 처리해준다.







Dao에서 DB를 조회하는 부분.

XML 파일을 통해 Mybatis 기능을 이용하는 부분

    public Member selectMember(SqlSession session, Member m) throws LoginFailException {
        Member member = null;
       
        member = session.selectOne("Member.loginMember", m);
       
        if (member == null) {
            session.close();
            throw new LoginFailException("로그인 실패");
           
        }
       
        return member;
    }


member = session.selectOne("Member.loginMember", m); - DB를 조회하는 Mybatis 기능

throw new LoginFailException("로그인 실패"); 을 통해서 조회한 DB가 없을 경우 커스텀 예외처리 생성자를 호출한다.

throws LoginFailException을 통해서 Exception으로 전달










에러가 발생한다면 계속 Throw 해서 처음 메소드를 호출했던 Mybatis 까지 와서 try catch 문에서

catch문이 실행되게 한다.

catch (LoginFailException e) {
            RequestDispatcher error = request.getRequestDispatcher("WEB-INF/views/common/errorPage.jsp");
            request.setAttribute("message", e.getMessage());
           
            error.forward(request, response);
        }




+ Recent posts