코드 : https://github.com/suhong99/jspLecture/tree/master/SampleModelOne
GitHub - suhong99/jspLecture
Contribute to suhong99/jspLecture development by creating an account on GitHub.
github.com
1. eclipse에서 Dynamic Web Project로 파일을 만든다.
이후 \주소\내프로젝트 이름\src\main\webapp\WEB-INF\lib에 mysql-connector-j-8.0.33.jar파일 넣으면 초기세팅이 끝난다.
2. 신세계에서 배우는 프로젝트에선 db, jsp , bootstrap, jquery를 이용해서 만들었다.
3. db는 MYSQL을 사용했는데,
create table member (
id varchar (50 ) primary key,
pwd varchar (50 ) not null ,
name varchar (50 ) not null ,
email varchar (50 ) unique ,
auth int
);
select count (* )
from member
where id= 'abc' ;
select * from member ;
delete from member
where id= 'abc' ;
회원가입은 다음과 같다. 아이디와 비밀번호 email name을 입력받는다. auth는 추후 관리자 관련 값이다. 관리자는 1 회원은 3 이를 eclipse에서 만든 java코드를 통해서 db에 값을 추가해준다.
프론트쪽에서 값을 입력하기 전에 db와 연결할 java코드를 먼저 작성한다.
3. 데이터에 접근할 때는 dto와 dao를 사용한다. dto 는 Data Transfer Object로 데이터로 주로 db와 주고 받은 값을 담는데 사용한ㄷ. dao는 데이터 베이스에 접근하기 위한 객체 Data Access Object이다. 4. dao에는instance생성, 생성자 , 아이디 확인, 로그인 , 회원가입이 있다.
public boolean addMember (MemberDto dto) {
String sql = " insert into member(id, pwd, name, email, auth) "
+ " values(?, ?, ?, ?, 3) " ;
Connection conn = null ;
PreparedStatement psmt = null ;
int count = 0 ;
try {
conn = DBConnection.getConnection();
System.out.println("addMember 1/3 success" );
psmt = conn.prepareStatement(sql);
psmt.setString(1 , dto.getId());
psmt.setString(2 , dto.getPwd());
psmt.setString(3 , dto.getName());
psmt.setString(4 , dto.getEmail());
System.out.println("addMember 2/3 success" );
count = psmt.executeUpdate();
System.out.println("addMember 3/3 success" );
} catch (SQLException e) {
System.out.println("addMember fail" );
e.printStackTrace();
} finally {
DBClose.close(psmt, conn, null );
}
return count>0 ?true :false ;
}
위의 코드는 구중에 회원가입에 관련된 코드다. 위와 같이 db와 dao dto가 준비가 끝나면 이제 프론트쪽 코드를 작성하면 된다. 회원가입 코드는 아래와 같다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" >
<title>회원가입</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.4/jquery.min.js" ></script>
<style type="text/css" >
.center{
margin: auto;
width: 60 %;
border: 3px solid #0000ff;
padding: 10px;
}
</style>
</head>
<body>
<h2>회원가입</h2>
<p>환영합니다</p>
<div class ="center" >
<form action="regiAf.jsp" method="post" >
<table border="1" >
<tr>
<th>아이디</th>
<td>
<input type="text" name="id" id="id" size="20" placeholder="아이디" >
<input type="button" id="id_chk_btn" value="id확인" ><br>
<p id="idcheck" style="font-size: 8px" ></p>
</td>
</tr>
<tr>
<th>패스워드</th>
<td>
<input type="text" name="pwd" id="pwd" size="20" >
</td>
</tr>
<tr>
<th>이름</th>
<td>
<input type="text" name="name" size="20" >
</td>
</tr>
<tr>
<th>이메일</th>
<td>
<input type="text" name="email" size="20" >
</td>
</tr>
<tr>
<td colspan="2" align="center" >
<input type="submit" value="회원가입" >
</td>
</tr>
</table>
</form>
</div>
<script type="text/javascript" >
$(document).ready(function(){
$("#id_chk_btn" ).click(function(){
$.ajax({
url:"idcheck.jsp" ,
type:"post" ,
data:{ "id" :$("#id" ).val() },
success:function( answer ){
if (answer.trim() == "YES" ){
$("#idcheck" ).css("color" , "#0000ff" );
$("#idcheck" ).text("사용할 수 있는 아이디입니다" );
}else {
$("#idcheck" ).css("color" , "#ff0000" );
$("#idcheck" ).text("사용중인 아이디입니다" );
$("#id" ).val("" );
}
},
error:function(){
alert('error' );
}
});
});
});
</script>
</body>
</html>
간단하게 id가 이미 존재하는지 확인하고, 만약 존재하지 않는다면 회원가입을 진행하면 된다.
이때 idcheck.jsp에서 아이디를 확인하고 있는데
<%@page import ="dao.MemberDao" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<%
String id = request.getParameter("id" );
MemberDao dao = MemberDao.getInstance();
boolean b = dao.getId(id);
if (b == true ){
out.println("NO" );
}else {
out.println("YES" );
}
%>
jsp에서는 <% %> 사이에 자바코를 작성하고, dao 인스턴스를 생성한 후, dao에 있는 id 확인 함수를 실행한다.
public boolean getId (String id) {
String sql = " select count(*) "
+ " from member "
+ " where id=? " ;
Connection conn = null ;
PreparedStatement psmt = null ;
ResultSet rs = null ;
int count = 0 ;
try {
conn = DBConnection.getConnection();
System.out.println("getId 1/4 success" );
psmt = conn.prepareStatement(sql);
psmt.setString(1 , id);
System.out.println("getId 2/4 success" );
rs = psmt.executeQuery();
System.out.println("getId 3/4 success" );
if (rs.next()) {
count = rs.getInt(1 );
}
System.out.println("getId 4/4 success" );
} catch (SQLException e) {
System.out.println("getId fail" );
e.printStackTrace();
} finally {
DBClose.close(psmt, conn, rs);
}
return count>0 ?true :false ;
}
sql의 where문을 통해 아이디를 확인하고 있따면 count를 올려서 true값이 반환되게 한다.
그리고 따라서 위의 regi.jsp에서 true일 때 아이디가 중복됩니다라고 알려준다. 이후 중복되지 않는다면
<%@page import ="dto.MemberDto" %>
<%@page import ="dao.MemberDao" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<%
request.setCharacterEncoding("utf-8" );
String id = request.getParameter("id" );
String pwd = request.getParameter("pwd" );
String name = request.getParameter("name" );
String email = request.getParameter("email" );
MemberDao dao = MemberDao.getInstance();
MemberDto dto = new MemberDto(id, pwd, name, email, 0 );
boolean isS = dao.addMember(dto);
if (isS == true ){
%>
<script type="text/javascript" >
alert("가입에 성공하셨습니다!" );
location.href = "login.jsp" ;
</script>
<%
}else {
%>
<script type="text/javascript" >
alert("다시 가입해 주십시오" );
location.href = "regi.jsp" ;
</script>
<%
}
%>
가입 성공을 시키면 된다.