1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<%@ page import = "kr.or.ksmart.dao.Mdao" %>
<%@ page import = "kr.or.ksmart.dto.Member" %>
<%
    String id = request.getParameter("id"); // 로그인 폼에서 넘어온 아이디 저장
    String pw = request.getParameter("pw"); // 로그인 폼에서 넘어온 비번 저장
    System.out.println(id + "<-- id");
    System.out.println(pw + "<-- pw");
 
    Mdao dao = new Mdao(); // Mdao클래스의 객체 생성 및 할당
    int ok = dao.mLoginCheck(id,pw); // dao 객체내의  mLoginCheck 메소드 호출후 리턴 값 저장
    System.out.println(ok + "<===리턴 받은 ok");
    
    Member member = new Member(); // Member 클래스 객체 생성
    
    if(ok == (1)) {    // 변수 ok에 저장된 값에 따라 분기문 작성
        member = dao.mGetForSession(id);    //dao 객체내의 mGetForSession메소드 호출후 리턴되는 member 객체주소값 저장
        session.setAttribute("S_NAME", member.getM_name()); // setAttribute메소드를 호출하여 member 객체 내의 get메소드로 호출되는 값을 변수에 저장
        session.setAttribute("S_LEVEL", member.getM_level());
        session.setAttribute("S_ID", member.getM_id());
        //response.sendRedirect(request.getContextPath()+"/index.jsp");
%>
        <script type="text/javascript">
            alert('로그인성공');
            location.href='<%= request.getContextPath()%>/index.jsp';
        </script>
<%
    } else if(ok == 2) {
        System.out.println("04 비번 불일치");
%>
        <script type="text/javascript">
            alert('비번불일치');
            location.href='<%= request.getContextPath()%>/index.jsp';
        </script>
<%
    } else if(ok == 3) {
        System.out.println("02 아이디 불일치");
%>    
        <script type="text/javascript">
            alert('아이디 불일치');
            location.href='<%= request.getContextPath()%>/index.jsp';
        </script>     
<%
    }
%>
 
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
public class Mdao {
    //01입력처리 메서드 선언
    Connection conn = null;
    PreparedStatement pstmt = null;
    ResultSet rs = null;
    ArrayList<Member> alm = null;
    // 로그인 성공시에 DB에서 id과 일치하는 행의 id,level,name 컬럼 값을 조회하는 메소드
    public Member mGetForSession(String in_id) throws ClassNotFoundException, SQLException {
        System.out.println("mGetForSession 호출 완료");
        
        DriverDB db = new DriverDB(); // 생성자 메소드로 DB 객체 생성
        System.out.println(db + " : db 객체의 참조 주소값");
        
        conn = db.driverDbcon(); // driverDbcon메소드를 호출하여 Connection 객체 생성(DB연결)
        
        // prepareStatement 메소드로 PreparedStatement객체 생성(쿼리문 실행 준비)
        pstmt = conn.prepareStatement("select m_id, m_level, m_name from tb_member where m_id=?"); 
        pstmt.setString(1, in_id);
        System.out.println(pstmt + "<==pstmt 쿼리문 조회");
        rs = pstmt.executeQuery(); // 쿼리문 실행 후 조회된 테이블 ResultSet 객체에 저장
        
        Member member = new Member(); // 읽어낸 값 Member 객체에 세팅할 준비.
        
        if(rs.next()) { // rs 객체내의 테이블의 행을 조사한다.
            member.setM_id(rs.getString("m_id")); // set 메소드를 호출하여 값을 세팅
            member.setM_level(rs.getString("m_level"));
            member.setM_name(rs.getString("m_name"));
        }
        
        if (rs != null) { //rs 객체 종료
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (pstmt != null) { //pstmt 객체 종료
            try {
                pstmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (conn != null) { // conn 객체 종료
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        
        return member; //member 객체 주소값 리턴
    }
    // 로그인 성공, 비번확인,아이디 확인하는 메소드
    public int mLoginCheck(String in_id,String in_pw) throws ClassNotFoundException, SQLException {
        System.out.println("mLoginCheck 호출 완료");
        
        DriverDB db = new DriverDB();    // 생성자 메소드로 DB 객체 생성
        System.out.println(db + " : db 객체의 참조 주소값");
        
        conn = db.driverDbcon();    // driverDbcon메소드를 호출하여 Connection 객체 생성(DB연결)
        
        // prepareStatement 메소드로 PreparedStatement객체 생성(쿼리문 실행 준비)
        pstmt = conn.prepareStatement("select m_pw from tb_member where m_id=?");
        pstmt.setString(1, in_id);
        System.out.println(pstmt + "<==pstmt 쿼리문 조회");
        rs = pstmt.executeQuery();// 쿼리문 실행 후 조회된 테이블 ResultSet 객체에 저장
        
        int ok = 0//리턴할 값 저장할 변수 초기화.
        
        if(rs.next()) { // rs 테이블내의 행 조회
            if(rs.getString("m_pw").equals(in_pw)) { // 조회된 m_pw 컬럼의 값이 in_pw 변수내의 값과 일치 할 경우 로그인 성공 1 리턴
                System.out.println("로그인 성공");
                 ok = 1;
            } else {
                System.out.println("비번 불일치"); // 다를 경우 실패 2 리턴
                ok = 2;
            }
        } else {
            System.out.println("아이디 불일치"); // 아이디가 다를경우 실패 3리턴
            ok = 3;
        }
        
        if (rs != null) {//rs 객체 종료
            try {
                rs.close();
            } catch (SQLException e) { //pstmt 객체 종료
                e.printStackTrace();
            }
        }
        if (pstmt != null) { // conn 객체 종료
            try {
                pstmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        
        return ok; // ok에 담긴 값 리턴
    }
cs



1. 로그인 폼에서 id,pw 입력 후 전송


2. login_pro에서 전송된 값 저장.


3. 저장된 값을 매개변수로 mLoginCheck 메소드 호출


4. 호출된 메소드 내에서 DB내의 id,pw 값과 비교 후 일치하는 행과 값이 있으면 1, pw가 다르면 2, 행이 없으면 3을 리턴 한다.


5. 리턴 된 값을 변수에 저장한다.


6. 1의 경우는 로그인에 성공했으므로, mGetForSession 메소드를 호출하여 DB내 1명의 회원 정보를 조회하고 member 객체 내에 값을 set 메소드를 호출해서 세팅하고 객체의 주소 값을 리턴 한다.


7. 리턴 된 member 객체의 주소 값을 참조하여, get메소드를 호출하여 세팅된 값을 불러온다.


8. 불러온 값을 setAttribute 메소드의 매개변수로 입력해서 변수에 저장한다. 그리고 로그인 성공 경고창을 띄우고 index페이지로 리다이렉트 한다.


9. 2,3의 경우는 로그인 실패의 경우이므로 비번 불일치, 아이디 불일치 경고창을 띄우고 index페이지로 리다이렉트 한다.





이상 JSP DTO,DAO를 활용한 로그인 세션 처리에 대해 정리하여 보았다.


+ Recent posts