본문 바로가기
Java/Servlet & JSP

JSP) 예외 처리

by 박채니 2022. 6. 24.

안녕하세요, 코린이의 코딩 학습기 채니 입니다.

 

개인 포스팅용으로 내용에 오류 및 잘못된 정보가 있을 수 있습니다.


Exception

MemberException

package com.ce.mvc2.member.model.exception;

public class MemberException extends RuntimeException {

	public MemberException() {
		super();
		// TODO Auto-generated constructor stub
	}

	public MemberException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
		super(message, cause, enableSuppression, writableStackTrace);
		// TODO Auto-generated constructor stub
	}

	public MemberException(String message, Throwable cause) {
		super(message, cause);
		// TODO Auto-generated constructor stub
	}

	public MemberException(String message) {
		super(message);
		// TODO Auto-generated constructor stub
	}

	public MemberException(Throwable cause) {
		super(cause);
		// TODO Auto-generated constructor stub
	}
}

 

Dao

insertMember

public int insertMember(Connection conn, Member member) {
    PreparedStatement pstmt = null;
    int result = 0;
    String sql = prop.getProperty("insertMemberrrr");
    // insert into member values (?, ?, ?, default, ?, ?, ?, ?, ?, default, default)

    try {
        pstmt = conn.prepareStatement(sql);
        pstmt.setString(1, member.getMemberId());
        pstmt.setString(2, member.getPassword());
        pstmt.setString(3, member.getMemberName());
        pstmt.setString(4, member.getGender() != null ? member.getGender().name() : null);
        pstmt.setDate(5, member.getBirthday());
        pstmt.setString(6, member.getEmail());
        pstmt.setString(7, member.getPhone());
        pstmt.setString(8, member.getHobby());

        result = pstmt.executeUpdate();
    } catch (SQLException e) {
        throw new MemberException("회원가입 오류!", e);
    } finally {
        close(pstmt);
    }
    return result;
}

 

Service

MemberService

public int insertMember(Member member) {
    Connection conn = getConnection();
    int result = 0;
    try {
        result = memberDao.insertMember(conn, member);
        commit(conn);
    } catch(Exception e) {
        rollback(conn);
        throw e;
    } finally {
        close(conn);
    }
    return result;
}

 

Controller

MemberEnrollServlet

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    try {
        // 1. 인코딩 처리
        request.setCharacterEncoding("utf-8");

        // 2. 사용자입력값 처리
        String memberId = request.getParameter("memberId");
        String password = request.getParameter("password");
        String memberName = request.getParameter("memberName");
        String _birthday = request.getParameter("birthday");
        String _gender = request.getParameter("gender");
        String email = request.getParameter("email");
        String phone = request.getParameter("phone");
        String[] hobbies = request.getParameterValues("hobby");

        Gender gender = _gender != null ? Gender.valueOf(_gender) : null;
        String hobby = hobbies != null ? String.join(",", hobbies) : null;
        Date birthday = (_birthday != null && !"".equals(_birthday)) ? Date.valueOf(_birthday) : null;

        Member member = new Member(memberId, password, memberName, null, gender, birthday, email, phone, hobby, 0, null);
        System.out.println("member@MemberEnrollServlet = " + member);

        // 3. 업무로직 : db insert
        int result = memberService.insertMember(member);
        System.out.println("result@MemberEnrollServlet = " + result);

        // 4. 응답처리 : redirect
        request.getSession().setAttribute("msg", "회원가입이 정상적으로 처리 되었습니다.");
        response.sendRedirect(request.getContextPath() + "/");
    } catch(Exception e) {
        e.printStackTrace(); // 로깅
        throw e;	// WAS(tomcat) 예외 던짐 -> 에러페이지를 응답출력
    }
}

일부로 존재하지 않는 properties key값을 'insertMemberrrr'를 가져오게 하여 오류가 발생하게 하였습니다.

커스텀 exception class를 RuntimeException으로 생성하여 controller까지 예외를 던져 사용자에게도 오류가 발생했다는 것을 알려주도록 하였습니다. (전체코드를 try에 넣고 catch로 예외 던짐!)