[Java Servlet] 회원 조회 기능 구현 정리

이정원·2025년 4월 17일
0

🗂️ 오늘 구현한 기능 개요

  • JSP & Servlet을 활용하여 회원 전체 조회, ID로 조회, 이름으로 조회 기능을 구현했다.
  • 오라클 DB와 연동하여 실제 회원 데이터를 조회한다.
  • Java Controller-Service-DAO 패턴을 따르며, Oracle JDBC를 사용했다.

📌 핵심 URL 매핑

URL설명
/allMember전체 회원 목록 조회
/searchIdForm.jsp회원 ID 입력 폼 페이지
/searchIdMember회원 ID로 회원 정보 조회 (Servlet)
/searchNameMember회원 이름으로 회원 정보 조회 (Servlet)

📄 index.jsp

<!-- index.jsp: 메인 메뉴 역할 -->
<a href="allMember">전체 회원 조회</a>
<a href="searchIdForm.jsp">회원 아이디로 조회</a>

🔢 Member.java (VO 클래스)

public class Member {
    private int memberNo;        // 회원번호
    private String memberId;     // 아이디
    private String memberPw;     // 비밀번호
    private String memberName;   // 이름
    private String memberPhone;  // 전화번호
    private String memberAddr;   // 주소
    private int memberLevel;     // 회원 등급 (1:관리자, 2:정회원, 3:준회원)
    private String enrollDate;   // 가입일

    // 기본 생성자 및 전체 필드를 초기화하는 생성자 정의
    // Getter & Setter 메서드 정의
    // toString() 오버라이딩
}

⚙️ JDBCTemplate.java (공통 JDBC 유틸)

public static Connection getConnection() {
    try {
        Class.forName("oracle.jdbc.driver.OracleDriver");
        Connection conn = DriverManager.getConnection(
            "jdbc:oracle:thin:@127.0.0.1:1521:xe", "server_test", "1234"
        );
        conn.setAutoCommit(false); // 수동 커밋 설정
        return conn;
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

JDBC 드라이버 로딩, DB 연결, 트랜잭션/자원 관리 기능을 제공


💾 MemberDao.java (DB 작업 담당)

public ArrayList<Member> selectAllMember(Connection conn) {
    // 전체 회원 리스트 조회
    String query = "SELECT * FROM tbl_member";
    PreparedStatement pstmt = conn.prepareStatement(query);
    ResultSet rset = pstmt.executeQuery();
    while (rset.next()) {
        Member m = new Member();
        // 각 컬럼 값 세팅
        m.setMemberId(rset.getString("member_id"));
        // 나머지 setXxx() 생략...
        list.add(m);
    }
    return list;
}

public Member selectIdMember(Connection conn, String searchId) {
    // 특정 ID 회원 조회
    String query = "SELECT * FROM tbl_member WHERE member_id = ?";
    pstmt.setString(1, searchId);
    ResultSet rset = pstmt.executeQuery();
    if (rset.next()) {
        return new Member(...); // rset에서 각 필드값 읽어 생성
    }
    return null;
}

🧠 MemberService.java (비즈니스 로직 담당)

public class MemberService {
    private MemberDao dao = new MemberDao();

    public ArrayList<Member> selectAllMember() {
        Connection conn = JDBCTemplate.getConnection();
        ArrayList<Member> list = dao.selectAllMember(conn);
        JDBCTemplate.close(conn);
        return list;
    }

    public Member selectIdMember(String id) {
        Connection conn = JDBCTemplate.getConnection();
        Member m = dao.selectIdMember(conn, id);
        JDBCTemplate.close(conn);
        return m;
    }

    public Member selectNameMember(String name) {
        Connection conn = JDBCTemplate.getConnection();
        return dao.selectNameMember(conn, name);
    }
}

📤 AllMemberServlet.java (전체 조회 서블릿)

@WebServlet("/allMember")
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
    request.setCharacterEncoding("utf-8");
    ArrayList<Member> list = new MemberService().selectAllMember();
    // HTML로 테이블 출력
}

🔍 SearchIdServlet.java (ID 조회 서블릿)

@WebServlet("/searchIdMember")
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
    String memberId = request.getParameter("memberId");
    Member m = new MemberService().selectIdMember(memberId);
    // 결과를 HTML로 출력
}

🔎 SearchNameServlet.java (이름 조회 서블릿)

@WebServlet("/searchNameMember")
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
    String name = request.getParameter("memberName");
    Member m = new MemberService().selectNameMember(name);
    // 결과를 HTML로 출력
}

📝 오늘 학습 및 해결한 에러

  • ORA-12505 오류 → JDBC URL의 SID vs 서비스명 구분 필요, DB 리스너 재기동
  • NullPointerException → getConnection()이 null 반환 시 로그 추가로 디버깅
  • 문자열을 getInt() 시도 → 컬럼 타입 불일치로 인한 SQL 변환 에러 발생
  • 404 Not Found → searchIdForm.jsp 파일 경로 및 링크 수정

🖼️ searchIdForm.jsp 코드 요약

<form action="searchIdMember" method="get">
  <input type="text" name="memberId" />
  <input type="submit" value="검색" />
</form>

profile
Study.log

0개의 댓글