대충벌레 블로그
article thumbnail
728x90
반응형

회원가입을 위한 테이블 생성

create table member(
	id varchar(30) not null, # 아이디
	password varchar(30) , #패스워드
	name varchar(30),	# 이름
	email varchar(30),	# 이메일
	phone varchar(30),	# 전화번호
	job varchar(30),	# 직업
	regdate varchar(30),  # 가입날짜
	primary key(id)
	
)engine = innodb default charset=utf8;

drop table member;

desc member

select * from member limit 100; 	# 100개 행만 선택해봄
select id,password from member where id ='test'

select count(*) from member; 		# 회원수

insert into member values('bug','1234','대충벌레','bigbug@naver.com','010-1234-5212','학생',now());
# 테스트

 

프로젝트가 에러없이 일단 잘 실행되는지 확인하기 위해 index.jsp 만들고 확인

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>INDEX</title>
</head>
<body>
INDEX 페이지 입니다.
</body>
</html>

index.jsp 정상 출력됨

 

 

데이터베이스 연동하기 위해서 WEB-INF > lib 에 커넥터.jar 파일을 넣어줍니다.

기본적인 구조 



[DBConnection.java]

package register0104;

import java.sql.*;
import java.util.Properties;
import java.util.Vector;


public class DBConnectionMgr {
    private Vector connections = new Vector(10);
    private String _driver = "org.gjt.mm.mysql.Driver", // com.mysql.jdbc.Driver 와 동일
    _url = "jdbc:mysql://127.0.0.1:3306/db명?useUnicode=true&characterEncoding=UTF8",
    _user = "유저명",
    _password = "패스워드명";
    private boolean _traceOn = false;
    private boolean initialized = false;
    private int _openConnections = 10;
    private static DBConnectionMgr instance = null;

    public DBConnectionMgr() {
    }

    /** Use this method to set the maximum number of open connections before
     unused connections are closed.
     */

    public static DBConnectionMgr getInstance() { 
        if (instance == null) {
            synchronized (DBConnectionMgr.class) {
                if (instance == null) {
                    instance = new DBConnectionMgr();
                }
            }
        }

        return instance;
    }

    public void setOpenConnectionCount(int count) {
        _openConnections = count;
    }


    public void setEnableTrace(boolean enable) {
        _traceOn = enable;
    }


    /** Returns a Vector of java.sql.Connection objects */
    public Vector getConnectionList() {
        return connections;
    }


    /** Opens specified "count" of connections and adds them to the existing pool */
    public synchronized void setInitOpenConnections(int count)
            throws SQLException {
        Connection c = null;
        ConnectionObject co = null;

        for (int i = 0; i < count; i++) {
            c = createConnection();
            co = new ConnectionObject(c, false);

            connections.addElement(co);
            trace("ConnectionPoolManager: Adding new DB connection to pool (" + connections.size() + ")");
        }
    }


    /** Returns a count of open connections */
    public int getConnectionCount() {
        return connections.size();
    }


    /** Returns an unused existing or new connection.  */
    public synchronized Connection getConnection()
            throws Exception {
        if (!initialized) {
            Class c = Class.forName(_driver);
            DriverManager.registerDriver((Driver) c.newInstance());

            initialized = true;
        }


        Connection c = null;
        ConnectionObject co = null;
        boolean badConnection = false;


        for (int i = 0; i < connections.size(); i++) {
            co = (ConnectionObject) connections.elementAt(i);

            // If connection is not in use, test to ensure it's still valid!
            if (!co.inUse) {
                try {
                    badConnection = co.connection.isClosed();
                    if (!badConnection)
                        badConnection = (co.connection.getWarnings() != null);
                } catch (Exception e) {
                    badConnection = true;
                    e.printStackTrace();
                }

                // Connection is bad, remove from pool
                if (badConnection) {
                    connections.removeElementAt(i);
                    trace("ConnectionPoolManager: Remove disconnected DB connection #" + i);
                    continue;
                }

                c = co.connection;
                co.inUse = true;

                trace("ConnectionPoolManager: Using existing DB connection #" + (i + 1));
                break;
            }
        }

        if (c == null) {
            c = createConnection();
            co = new ConnectionObject(c, true);
            connections.addElement(co);

            trace("ConnectionPoolManager: Creating new DB connection #" + connections.size());
        }

        return c;
    }


    /** Marks a flag in the ConnectionObject to indicate this connection is no longer in use */
    public synchronized void freeConnection(Connection c) {
        if (c == null)
            return;

        ConnectionObject co = null;

        for (int i = 0; i < connections.size(); i++) {
            co = (ConnectionObject) connections.elementAt(i);
            if (c == co.connection) {
                co.inUse = false;
                break;
            }
        }

        for (int i = 0; i < connections.size(); i++) {
            co = (ConnectionObject) connections.elementAt(i);
            if ((i + 1) > _openConnections && !co.inUse)
                removeConnection(co.connection);
        }
    }

    public void freeConnection(Connection c, PreparedStatement p, ResultSet r) {
        try {
            if (r != null) r.close();
            if (p != null) p.close();
            freeConnection(c);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public void freeConnection(Connection c, Statement s, ResultSet r) {
        try {
            if (r != null) r.close();
            if (s != null) s.close();
            freeConnection(c);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public void freeConnection(Connection c, PreparedStatement p) {
        try {
            if (p != null) p.close();
            freeConnection(c);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public void freeConnection(Connection c, Statement s) {
        try {
            if (s != null) s.close();
            freeConnection(c);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }


    /** Marks a flag in the ConnectionObject to indicate this connection is no longer in use */
    public synchronized void removeConnection(Connection c) {
        if (c == null)
            return;

        ConnectionObject co = null;
        for (int i = 0; i < connections.size(); i++) {
            co = (ConnectionObject) connections.elementAt(i);
            if (c == co.connection) {
                try {
                    c.close();
                    connections.removeElementAt(i);
                    trace("Removed " + c.toString());
                } catch (Exception e) {
                    e.printStackTrace();
                }

                break;
            }
        }
    }


    private Connection createConnection()
            throws SQLException {
        Connection con = null;

        try {
            if (_user == null)
                _user = "";
            if (_password == null)
                _password = "";

            Properties props = new Properties();
            props.put("user", _user);
            props.put("password", _password);

            con = DriverManager.getConnection(_url, props);
        } catch (Throwable t) {
            throw new SQLException(t.getMessage());
        }

        return con;
    }


    /** Closes all connections and clears out the connection pool */
    public void releaseFreeConnections() {
        trace("ConnectionPoolManager.releaseFreeConnections()");

        Connection c = null;
        ConnectionObject co = null;

        for (int i = 0; i < connections.size(); i++) {
            co = (ConnectionObject) connections.elementAt(i);
            if (!co.inUse)
                removeConnection(co.connection);
        }
    }


    /** Closes all connections and clears out the connection pool */
    public void finalize() {
        trace("ConnectionPoolManager.finalize()");

        Connection c = null;
        ConnectionObject co = null;

        for (int i = 0; i < connections.size(); i++) {
            co = (ConnectionObject) connections.elementAt(i);
            try {
                co.connection.close();
            } catch (Exception e) {
                e.printStackTrace();
            }

            co = null;
        }

        connections.removeAllElements();
    }


    private void trace(String s) {
        if (_traceOn)
            System.err.println(s);
    }

}


class ConnectionObject {
    public java.sql.Connection connection = null;
    public boolean inUse = false;

    public ConnectionObject(Connection c, boolean useFlag) {
        connection = c;
        inUse = useFlag;
    }
}

 

register.jsp 회원가입 폼 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원가입</title>
<script type="text/javascript">
	function idCheck(id){
		if(id==""){
			alert("아이디를 입력해 주세요.");
			document.regForm.mem_id.focus();
		}else{
			url="idcheck.jsp?id="+id;
			window.open(url,"post","width=300,height=200");
		}
	}

</script>
</head>
<body>
<table border="1" align='center'>
	<form name='regform' method='post' action='register_ok.jsp'>
		<tr>
			<th colspan="2">회원가입</th>
		</tr>
		<tr>
			<td width="20%">아이디</td>
			<td width="60%"><input type='text' name='id' size='20'> &nbsp;&nbsp;<input type='button' value='중복확인' onclick='idCheck(this.form.id.value)'></td>
		</tr>
		<tr>
			<td>패스워드</td>
			<td><input type="password" name='password' size='20'></td>
		</tr>
		<tr>
			<td>패스워드 확인</td>
			<td><input type='password' name='password_re' size='20'></td>
		</tr>
		<tr>
			<td>이름</td>
			<td><input type='text' name='name' size='10'></td>
		</tr>
		<tr>
			<td>이메일</td>
			<td><input type='text' name='email' size='30'></td>
		</tr>
		<tr>
			<td>전화번호</td>
			<td><input type="text" name='phone' size='20'></td>
		</tr>
		<tr>
			<td colspan="2" align='center'>
			<input type='submit' value='회원가입'>&nbsp;&nbsp;&nbsp;<input type="reset" value='다시쓰기'>
		</tr>
	</form>
</table>

</body>
</html>

 

ID가 DB에있는 값과 중복되는게 있는지 비교 

MemberDAO.java 생성후 코드 작성

package register0104;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;



public class MemberDAO {

	private DBConnectionMgr pool = null;
	
	public MemberDAO() {	
		try {
			pool = DBConnectionMgr.getInstance();
		} catch (Exception e) {
			System.out.println("Error : "+e);
		}
	}// 생성자
	
	// 아이디 있는지 비교 
	public boolean checkID(String id) {
		Connection c = null;
		PreparedStatement p = null;
		ResultSet r = null;
		boolean check = false;
		try {
			c = pool.getConnection(); // 객체를 빌림
			String query = "select id from member where id =?";
			p = c.prepareStatement(query);
			p.setString(1, id);
			r = p.executeQuery();
			check = r.next();
		} catch (Exception e) {
			// TODO: handle exception
			System.out.println("Exception" +e);
		}finally {
			pool.freeConnection(c, p, r);
		}
		return check;
	}
}


ID 체크를 위한 idcheck.jsp 를 만들어줌   

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
    <jsp:useBean id="memberDAO" class="register0104.MemberDAO"/>
    
    <%
    	String id = request.getParameter("id");
    	boolean check = memberDAO.checkID(id);
    %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ID 중복체크</title>
</head>
<body bgcolor="#FFFFDD">

<center>
	<b><%=id %></b>
	<%
		if(check){
			out.println("이미 존재하는 ID 입니다");
		}else{
			out.println("사용 가능한 아이디 입니다.");
		}
	%>
	<a href="#" onclick='win_close()'>닫기</a>
</center>

</body>
</html>

 

회원가입을 위한 DAO 추가 

//회원가입
	public boolean memberInsert(MemberDTO memberDTO) {
		Connection c=null;
		PreparedStatement p = null;
		
		boolean flag = false;
		try {
			c = p.getConnection();
			String query = "insert into member values(?,?,?,?,?,?,now()";
			p=c.prepareStatement(query);
			p.setString(1, memberDTO.getId());
			p.setString(2, memberDTO.getPassword());
			p.setString(3, memberDTO.getName());
			p.setString(4, memberDTO.getEmail());
			p.setString(5, memberDTO.getPhone());
			p.setString(6, memberDTO.getJob());
			int cnt = p.executeUpdate();
			// excuteQuery : resultSet 반환
			// excuteUpdate : int 행의 갯수 반환
			if(cnt>0) {
				flag=true;
			}
		} catch (Exception e) {
			// TODO: handle exception
			System.out.println("Exception "+e);
		}finally {
			pool.freeConnection(c, p);
		}
		return flag;
	}

회원가입폼 입력확인을 위한 확인 폼 register_ok.jsp 추가

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
    <% request.setCharacterEncoding("utf-8"); %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원가입 확인</title>
<script type="text/javascript" src="script.js"></script>
</head>
<body>

<%-- 폼에서 저장한 데이터를 빈에 저장한다.
	빈에서 꺼내어 확인폼을 구성한다
	맞다고 판단되면 확인을 눌러 처리
 --%>

<jsp:useBean id="memberDTO" class="register0104.MemberDTO"/>
<jsp:setProperty property="*" name="memberDTO"/>

<table border="1" align='center'>
	<form name='regform' method='post' action='insert.jsp'>
		<tr>
			<th colspan="2"><jsp:getProperty property="name" name="memberDTO"/>작성한 내용 확인</th>
		</tr>
		<tr>
			<td width="20%">아이디</td>
			<td width="60%"><input type='text' name='id' value='<jsp:getProperty property="id" name="memberDTO"/>'></td>
		</tr>
		<tr>
			<td>이름</td>
			<td><input type='text' name='name' value='<jsp:getProperty property="name" name="memberDTO"/>'></td>
		</tr>
		<tr>
			<td><input type="hidden" name='password' value='<jsp:getProperty property="password" name="memberDTO"/>'></td>
		</tr>
		<tr>
			<td>이메일</td>
			<td><input type='text' name='email' value='<jsp:getProperty property="email" name="memberDTO"/>'></td>
		</tr>
		<tr>
			<td>전화번호</td>
			<td><input type="text" name='phone' value='<jsp:getProperty property="phone" name="memberDTO"/>'></td>
		</tr>
		<tr>
			<td>직업</td>
			<td><input type='text' name='job' value='<jsp:getProperty property="job" name="memberDTO"/>'></td>
		</tr>
		<tr>
			<td colspan="2" align='center'>
			<input type='submit' value='회원가입'>&nbsp;&nbsp;&nbsp;<input type="button" value='다시쓰기' onclick="history.back()">
		</tr>
	</form>
</table>

</body>
</html>

 

 

회원가입을 처리할 insert.jsp 추가

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%-- 가입 처리를 위한 페이지 --%>
    <jsp:useBean id="memberDAO" class="register0104.MemberDAO"/>
    <jsp:useBean id="memberDTO" class="register0104.MemberDTO"/>
    
    <jsp:setProperty property="*" name="memberDTO"/>
    
    <%
    boolean flag = memberDAO.memberInsert(memberDTO);
    %> 
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원가입 처리</title>
</head>
<body>
<%
if(flag){
	out.println("회원가입 축하");
	out.println("<a href=login.jsp>로그인</a>");
}else{
	out.println("다시 가입 부탁");
	out.println("<a href=register.jsp>재가입</a>");
}
%>

</body>
</html>

DB에 정상적으로 입력됬는지 확인

[지금 확인해보니 job 컬럼은 추가를 안했음]

 

index.jsp 수정

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%
	String id = (String)session.getAttribute("key");
	System.out.println(id);
%>

<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
	
</script>
<meta charset="UTF-8">
<title>INDEX</title>
</head>
<body>
INDEX 페이지 입니다.
<% 
	if(id != null){
%>
<B><%=id %></B> 님 환영합니다.
<a href="logout.jsp">로그아웃</a>
<%}else{ %>
<a href='register.jsp'>회원가입</a>
<div>
	<form name="login" method="post" action='login_ok.jsp'>
	<p><input type="text" name='id' size='20' placeholder="아이디"></p>
	<p><input type='password' name='password' size="20" placeholder="비밀번호"></p>
	<p><input type='submit' value='로그인'> </p>
	</form>
</div>
</form>
<% } %>






</body>
</html>

따로 로그인 페이지는 만들지 않고 index에 추가했음.

 

로그인 처리를 위한 login_ok.jsp 추가

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
    <% request.setCharacterEncoding("utf-8"); %>
    <jsp:useBean id="memberDAO" class="register0104.MemberDAO"/>
    <%
    String id = request.getParameter("id");
    String password = request.getParameter("password");
    boolean check = memberDAO.logincheck(id,password);
    
    if(check){
    	
    	session.setAttribute("key", id);
    	response.sendRedirect("index.jsp");
    }else{
    	response.sendRedirect("error.jsp"); 
    	System.out.print("올바르지 않은 게정 정보");
    }
    %>
    
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
	
</script>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

</body>
</html>

로그인 처리를 위해 DAO에 추가

// 로그인 체크
	public boolean logincheck(String id,String password) {
		Connection c= null;
		PreparedStatement p = null;
		ResultSet r = null;
		boolean logincheck = false;
		try {
			c = pool.getConnection();
			String query = "select id , password from member where id = ? and password = ? ";
			p=c.prepareStatement(query);
			p.setString(1, id);
			p.setString(2, password);
			r=p.executeQuery();
			logincheck =r.next();
			System.out.println(logincheck);
		} catch (Exception e) {
			// TODO: handle exception
			System.out.println("Exception : "+e);
			
		}finally {
			pool.freeConnection(c,p,r);
		}
		return logincheck;
	}

에러가 있을시 이동할 error.jsp 추가

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인 에러</title>

</head>

<BR><BR><BR>
<center>
<b>로그인에 실패하셨습니다<p>

<input type="button" value="다시쓰기" onClick="history.back()">
</center>

</body>
</html>

 

로그아웃 할때 세션을 없앨 logout.jsp 추가

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<% session.invalidate(); %>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
alert("로그아웃 됨");
location.href="index.jsp";
</script>
</head>
<body>

</body>
</html>

 

 

확인을 위해 다시 정리 

 index.jsp

id : abc ,   password : 1234 로 로그인 

로그아웃시 세션 종료되고 다시 인덱스로 돌아옴

id 혹은 password가 일치하지 않을경우

다시쓰기 클릭시 다시 index로 돌아옴

프로젝트 소스 코드 

https://github.com/inthegun/bug_register

 

inthegun/bug_register

회원가입,로그인 NO MVC. Contribute to inthegun/bug_register development by creating an account on GitHub.

github.com

 

반응형
profile

대충벌레 블로그

@대충벌레

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!