본문 바로가기
Develop/Java Server Page

회원가입창 로그인창 만들기

by jaekk 2018. 7. 17.

1. 회원가입을 위한 데이터 베이스 생성


1
2
3
4
-- 시퀀스 생성
create sequence member_memNum_seq
increment by 1
start with 1;
cs


1
2
3
4
5
6
7
8
9
10
11
-- 테이블 
create table member(
    mNum number not null unique,
    mId varchar2(30primary key,
    mPwd varchar2(10not null,
    mName varchar2(10not null,
    mBirth date not null,
    mGender varchar2(10not null,
    mEmail varchar2(20not null,
    mPhone varchar2(12not null
);
cs



2. 서블릿 구현

2-1. 라이브러리 추가

   




2-2. 서블릿 구현

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
package jdbc;
 
import java.sql.DriverManager;
import java.sql.SQLException;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
 
import org.apache.commons.dbcp2.ConnectionFactory;
import org.apache.commons.dbcp2.DriverManagerConnectionFactory;
import org.apache.commons.dbcp2.PoolableConnection;
import org.apache.commons.dbcp2.PoolableConnectionFactory;
import org.apache.commons.dbcp2.PoolingDriver;
import org.apache.commons.pool2.impl.GenericObjectPool;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
 
public class DBCPInit extends HttpServlet {
    @Override
    public void init() throws ServletException {
        loadJDBCDriver();
        initConnectionPool();
    }
 
    // 데이터베이스의 드라이버 로드
    private void initConnectionPool() {
        // TODO Auto-generated method stub
        try {
        String jdbcUrl = "jdbc:oracle:thin:localhost:1521:orcl";
        String username = "scott";
        String pw = "1234";
        ConnectionFactory connFactory = new DriverManagerConnectionFactory(jdbcUrl, username, pw);
 
        // PoolableConnection을 생성하는 팩토리 생성.
        // DBCP는 커넥션을 보관할 때 PoolableConnection 을 사용
        // 실제 커넥션을 담고 있있으며, 커넥션 풀을 관리하는데 필요한 기능을 제공한다.
        // 커넥션을 close하면 종료하지 않고 커넥션 풀에 반환
        PoolableConnectionFactory poolableConnFactory = new PoolableConnectionFactory(connFactory, null);
        // 커넥션이 유효한지 여부를 검사할 때 사용하는 쿼리를 지정한다.
        poolableConnFactory.setValidationQuery("select 1");
 
        ///////////////////////////////
 
        // 커넥션 풀의 설정 정보를 생성한다.
        GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
        // 유휴 커넥션 검사 주기
        poolConfig.setTimeBetweenEvictionRunsMillis(1000L * 60L * 5L);
        // 풀에 보관중인 커넥션이 유효한지 검사할지 유무 설정
        poolConfig.setTestWhileIdle(true);
 
        // 커넥션 최소 개수
        poolConfig.setMinIdle(4);
        // 커넥션 최대 개수
        poolConfig.setMaxTotal(50);
        // 커넥션 풀을 생성. 생성자는 PoolabeConnectionFactory와 GenericObjectPoolConfig를 사용
 
        ///////////////////////////////////////
 
        // 커넥션 풀을 생성. 생성자는 PoolabeConnectionFactory와 GenericObjectPoolConfig를 사용
        GenericObjectPool<PoolableConnection> connectionPool = new GenericObjectPool<>(poolableConnFactory, poolConfig);
        // PoolabeConnectionFactory에도 커넥션 풀을 연결
        poolableConnFactory.setPool(connectionPool);
 
        ////////////////////////////////////
 
        // 커넥션 풀을 제공하는 jdbc 드라이버를 등록.
        
            Class.forName("org.apache.commons.dbcp2.PoolingDriver");
            System.out.println("드라이버 로드 성공");
 
            PoolingDriver driver = (PoolingDriver) DriverManager.getDriver("jdbc:apache:commons:dbcp:");
            // 위에서 커넥션 풀 드라이버에 생성한 커넥션 풀을 등록한다. 이름은 chap14 이다.
            driver.registerPool("pooltest", connectionPool);
            
            System.out.println("pooltest 이름으로 컨넥션 풀 등록 성공");
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            throw new RuntimeException(e);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
 
    }
 
    // POOL 드라이버 로드, 설정, 풀 등록
    private void loadJDBCDriver() {
        // TODO Auto-generated method stub
        // 사용하고자하는 데이터베이스 드라이버 로딩
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
 
cs


2-3. 서블릿 등록

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 <!-- 서블릿 등록 -->
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>sample</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
 <!-- 서블릿 등록 -->
  <servlet>
      <servlet-name>DBCPInit</servlet-name>
      <servlet-class>jdbc.DBCPInit</servlet-class>
      <load-on-startup>1</load-on-startup>
  </servlet>
</web-app>
cs

  


 3. 회원가입

 

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
108
//회원가입- memJoin.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@page import="java.sql.SQLException"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.Statement"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.Connection"%>
<%@page import="java.sql.Date"%>
<%@page import="java.text.SimpleDateFormat"%>
<%
    request.setCharacterEncoding("utf-8");
%>
<jsp:useBean id="member" class="member.Member" />
<jsp:setProperty name="member" property="*" />
 
<%
    //1. 사용자 데이터 받기
    request.setCharacterEncoding("utf-8");
 
    // 사용자의 입력 데이터를 변수로 받는다.
    String id = request.getParameter("id");
    String name = request.getParameter("name");
    String pwd = request.getParameter("pwd");
    String birth1 = request.getParameter("birth1");
    String birth2 = request.getParameter("birth2");
    String birth3 = request.getParameter("birth3");
    String gender = request.getParameter("gender");
    String email = request.getParameter("email");
    String phone = request.getParameter("phone");
    
 
    //응답 결과를 구분하기 위한 변수
 
    int updateCnt = 0;
 
    //2. 데이터 베이스 연결
    // 2.1. JDBC 드라이버 로딩
    //Class.forName("oracle.jdbc.driver.OracleDriver");
 
    Connection conn = null;
    PreparedStatement pstmt = null;
 
    String sql = "insert into member values (member_memNum_seq.nextval,?,?,?,?,?,?,?)";
 
    try {
        // 2. 데이터베이스 커넥션 생성
        //  conn = DriverManager.getConnection(jdbcDriver, dbUser, dbPass);
        String jdbcDriver = "jdbc:apache:commons:dbcp:pooltest";
        conn = DriverManager.getConnection(jdbcDriver);
        
        // 3. Statement 생성    
        pstmt = conn.prepareStatement(sql);
        pstmt.setString(1, member.getId());
        pstmt.setString(2, member.getPwd());
        pstmt.setString(3, member.getName());
        pstmt.setDate(4, java.sql.Date.valueOf(member.getBirth()));
        // 오라클 데이터 입력: java.sql.Date 형식으로 입력해야함
        pstmt.setString(5, member.getGender());
        pstmt.setString(6, member.getEmail());
        pstmt.setString(7, member.getPhone());
 
        // 4. sql 실행
        updateCnt = pstmt.executeUpdate();
    } catch (SQLException ex) {
        out.println(ex.getMessage());
        ex.printStackTrace();
    } finally {
        // 6. 사용한 Statement 종료
        if (pstmt != null)
            try {
                pstmt.close();
            } catch (SQLException ex) {
            }
        // 7. 커넥션 종료
        if (conn != null)
            try {
                conn.close();
            } catch (SQLException ex) {
            }
    }
 
    //5. html 형식으로 응답처리: 성공/실패
%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script src="https://code.jquery.com/jquery-1.11.3.js"></script>
<script src="/include/agreeText.js" type="text/javascript"></script>
<script src="/include/common.js" type="text/javascript"></script>
<link type="text/css" rel="stylesheet" href="/include/common.css">
 
</head>
<body>
<jsp:include page="/include/header.jsp" />
<h1>회원가입</h1>
<if(updateCnt > 0){ %>
    <h1>회원가입 성공</h1>
<%}else{ %>
    <h1>회원가입 실패</h1>
<%} %>
<jsp:include page="/include/footer.jsp" />
</body>
</html>
 
cs



4. 로그인


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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
<!-- 로그인 구현 login.jsp -->
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.sql.Connection "%>
<%@ page import="java.sql.PreparedStatement"%>
<%@ page import="java.sql.ResultSet"%>
<%@ page import="java.sql.DriverManager"%>
<%@ page import="java.io.PrintWriter"%>
<%@ page import="java.sql.SQLException"%>
<%@ page import="member.Member" %>
<%@ page session="true"%>
<%
    request.setCharacterEncoding("utf-8");
%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script src="https://code.jquery.com/jquery-1.11.3.js"></script>
<script src="/include/agreeText.js" type="text/javascript"></script>
<script src="/include/common.js" type="text/javascript"></script>
<link type="text/css" rel="stylesheet" href="/include/common.css">
 
 
</head>
<body>
    <%
        String idRemember = request.getParameter("idRemember");
        String usrId = request.getParameter("id");
        //System.out.println(usrId);
        String usrPwd = request.getParameter("pwd");
 
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        Member member = null;
        boolean loginChk = false;
 
        String sql = "select mNum, mId, mPwd, mName, mBirth, mGender, mEmail, mPhone from member where mid=?";
        System.out.println("sql탑니다.");
 
        try {
            String jdbcDriver = "jdbc:apache:commons:dbcp:pooltest";
            conn = DriverManager.getConnection(jdbcDriver);
            System.out.println("드라이버 연결");
 
            pstmt = conn.prepareStatement(sql);
            pstmt.setString(1, usrId);
 
            rs = pstmt.executeQuery();
 
            System.out.println("쿼리 실행");
            
            /* 아이디가 존재하면 member객체 생성 */
            if(rs.next()) {
                System.out.println("멤버객체 생성");
                member = new Member();
                member.setIdx(rs.getInt(1));
                member.setId(rs.getString(2));
                member.setPwd(rs.getString(3));
                member.setName(rs.getString(4));
                member.setBirth(rs.getDate(5));
                member.setGender(rs.getString(6));
                member.setEmail(rs.getString(7));
                member.setPhone(rs.getString(8));
            }
            
            if(member != null && member.getPwd().equals(usrPwd)){
                /* 아이디 저장하기를 클릭하면 쿠키를 굽는다.  */
                if (idRemember != null) {
                    System.out.println("쿠키굽기");
                    Cookie cookie = new Cookie("usrId", usrId);
                    response.addCookie(cookie);
                } else {
                    /* 아이디를 저장하기를 누르지 않았을 경우 쿠키를 삭제한다. */
                    System.out.println("쿠키삭제");
                    Cookie[] cookies = request.getCookies();
                    if (cookies != null && cookies.length > 0) {
                        for (int i = 0; i < cookies.length; i++) {
                            if (cookies[i].getName().equals("usrId")) {
                                /* Cookie cookie = cookies[i]; */
                                Cookie cookie = new Cookie("usrId""");
                                cookie.setPath("/");
                                cookie.setMaxAge(0);
                                response.addCookie(cookie);
                                break;
                            }
                        }
                    }
                }
                
                System.out.println("로그인 성공");
                loginChk = true;
                session.setAttribute("loginInfo",member);
            }
            
            
        } catch (SQLException ex) {
            out.println(ex.getMessage());
            ex.printStackTrace();
        } finally {
            // 6. 사용한 Statement 종료
            if (rs != null)
                try {
                    rs.close();
                } catch (SQLException ex) {
                }
            if(pstmt != null)
                try{
                    rs.close();
                } catch (SQLException ex){
                }
            // 7. 커넥션 종료
            if (conn != null)
                try {
                    conn.close();
                } catch (SQLException ex) {
                }
        }
 
    %>
    <jsp:include page="/include/header.jsp" />
    <h1>로그인</h1>
    <hr>
    <%if(loginChk == true){ %>
        <h1>로그인 성공</h1>
    <%}else%>
        <h1>로그인 실패</h1>
    <% } %>
    <jsp:include page="/include/footer.jsp" />
</body>
</html>
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<!-- 로그인 구현 memlogin.jsp-->
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
 
<script src="https://code.jquery.com/jquery-1.11.3.js"></script>
<script src="/include/agreeText.js"></script>
<link type="text/css" rel="stylesheet" href="/include/common.css">
</head>
<body>
    <jsp:include page="/include/header.jsp" />
    
    <h1>로그인</h1>
    <hr>
     로그인 성공!<br>
    <a href="myPage.jsp">마이페이지 보러가기</a>
    <jsp:include page="/include/footer.jsp" />
</body>
</html>
cs

  


5. 로그아웃


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<!-- 로그아웃 구현 logout.jsp -->
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<style>
</style>
</head>
<body>
<%
/* 로그아웃시 세션을 삭제한다. */
if(!session.getAttribute("usrId").equals(null)){
    session.invalidate();    
}
response.sendRedirect("index.jsp");
%>
</body>
</html>
cs



'Develop > Java Server Page' 카테고리의 다른 글

URL/URI  (0) 2018.07.19
서블릿  (1) 2018.07.19
JDBC프로그래밍  (0) 2018.07.16
jsp정리  (0) 2018.07.15
12. 표준 태그 라이브러리(JSTL)  (0) 2018.07.09

댓글