today_is
[ jsp 프로젝트 ] 회원기능 본문
내가 맡은 파트 !
: 필요에 따라 조정하기로 했지만,
우선은 회원기능부터 빠르게 진행해보겠다

MemberDTO
IDX | NOT NULL | NUMBER |
USERID | NOT NULL | VARCHAR2(100) |
USERPW | NOT NULL | VARCHAR2(100) |
USERNAME | NOT NULL | VARCHAR2(100) |
NOT NULL | VARCHAR2(500) |
MemberDAO
: 회원가입 / 로그인 / 회원탈퇴
package member;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
public class MemberDAO {
private Connection conn;
private PreparedStatement pstmt;
private ResultSet rs;
private Context init;
private DataSource ds;
private static MemberDAO instance = new MemberDAO();
public static MemberDAO getInstance() {
return instance;
}
private MemberDAO() {
try {
init = new InitialContext();
ds = (DataSource) init.lookup("java:comp/env/jdbc/oracle");
} catch (Exception e) {
e.printStackTrace();
}
}
private void close() {
try {
if(rs != null) rs.close();
if(pstmt != null) pstmt.close();
if(conn != null) conn.close();
} catch (Exception e) { }
}
private MemberDTO mapping(ResultSet rs) throws SQLException {
MemberDTO dto = new MemberDTO();
dto.setIdx(rs.getInt("idx"));
dto.setUserid(rs.getString("userid"));
dto.setUserpw(rs.getString("userpw"));
dto.setUsername(rs.getString("username"));
dto.setEmail(rs.getString("email"));
return dto;
}
// join
public int insert(MemberDTO dto) {
int row = 0;
String sql = "insert into member (userid, userpw, username, email) values (?,?,?,?)";
try {
conn = ds.getConnection();
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, dto.getUserid());
pstmt.setString(2, dto.getUserpw());
pstmt.setString(3, dto.getUsername());
pstmt.setString(4, dto.getEmail());
row = pstmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}
finally {
close();
}
return row;
}
// login
public MemberDTO login(MemberDTO dto) {
MemberDTO login = null;
String sql = "select * from member where userid = ? and userpw = ?";
try {
conn = ds.getConnection();
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, dto.getUserid());
pstmt.setString(2, dto.getUserpw());
rs = pstmt.executeQuery();
while(rs.next()) {
login = mapping(rs);
}
} catch (Exception e) {
e.printStackTrace();
}
finally {
close();
}
return login;
}
// 회원탈퇴
public int delete(MemberDTO dto) {
int row = 0;
String sql = "delete from member where userid = ? and userpw = ?";
try {
conn = ds.getConnection();
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, dto.getUserid());
pstmt.setString(2, dto.getUserpw());
row = pstmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}
finally {
close();
}
return row;
}
}
join.jsp
사용자에게 용이하도록 변경한 부분 1
: 이메일을 작성할때는 placeholder 를 이용하여,
abc@naver.com 의 형태로 기입할 수 있도록 안내했음
사용자에게 용이하도록 변경한 부분 2
: 회원가입 폼을 제출하고나서,
가입이 성공한다면 (row != 0)
login 페이지로 리다이렉트
사용자는 회원가입 이후로 별도의 클릭없이
바로 로그인 페이지로 이동함
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file="header.jsp" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<div class="joinpage">
<c:if test="${pageContext.request.method == 'GET' }" >
<h3>회원가입</h3>
<form method="POST">
<p><input type="text" name="userid" placeholder="ID" required></p>
<p><input type="password" name="userpw" placeholder="password" required></p>
<p><input type="text" name="username" placeholder="name" required></p>
<p><input type="email" name="email" placeholder="abc@naver.com" required></p>
<p><input type="submit" value="가입"></p>
</form>
</c:if>
<c:if test="${pageContext.request.method == 'POST' }">
<jsp:useBean id="dto" class="member.MemberDTO" />
<jsp:setProperty property="*" name="dto" />
<c:set var="row" value="${memberDAO.insert(dto) }" />
<c:if test="${row != 0 }">
<c:redirect url="/login.jsp" />
</c:if>
</c:if>
</div>
</body>
</html>
login.jsp
: 로그인 폼과 로그인처리를 담당할 코드를 분리시키지 않고, 한 페이지에 담았음
-> 둘을 나누면, 페이지가 너무 많아지기 때문에
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file="header.jsp" %>
<div class="loginpage">
<c:if test="${pageContext.request.method == 'GET' }" >
<form method="POST">
<h3>로그인</h3>
<p><input type="text" name="userid" placeholder="ID" required></p>
<p><input type="password" name="userpw" placeholder="password" required></p>
<p><input type="submit" value="로그인"></p>
</form>
</c:if>
<c:if test="${pageContext.request.method == 'POST' }">
<jsp:useBean id="dto" class="member.MemberDTO" />
<jsp:setProperty property="*" name="dto" />
<c:set var="login" value="${memberDAO.login(dto) }" scope="session" />
<c:if test="${row != 0 }">
<c:redirect url="/" />
</c:if>
</c:if>
</div>
</body>
</html>
logout.jsp
: 세션만료 시킨 후에 대문페이지로 이동
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file="header.jsp" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<c:remove var="login" scope="session" />
<c:redirect url="/" />
</body>
</html>
delete.jsp
: 회원삭제
회원삭제시 유의할점
: 삭제가 성공한다면, 바로 logout 을 시켜서
세션을 만료시켜야 오류가 안뜬다 !!
-> 회원은 삭제되어서 없는데, 로그인 상태가 유지된다면 이상하기 때문
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file="header.jsp" %>
<div class="frame center">
<c:if test="${pageContext.request.method == 'GET' }">
<form method="POST">
<p><input type="hidden" name="userid" value="${login.userid }"></p>
<p><input type="password" name="userpw" placeholder="password" required></p>
<p><input type="submit" value="회원탈퇴"></p>
</form>
</c:if>
</div>
<c:if test="${pageContext.request.method == 'POST' }">
<jsp:useBean id="dto" class="member.MemberDTO" />
<jsp:setProperty property="*" name="dto" />
<c:set var="row" value="${memberDAO.delete(dto) }" />
<c:if test="${row != 0 }">
<c:redirect url="/logout.jsp" />
</c:if>
</c:if>
</body>
</html>
review
- 어려움을 겪은 부분
: 없음
- 진행사항
: 생각보다 내가 담당한 파트가 빨리 끝나고 있어서,
추가적으로 다른 기능을 넣기로 했다
공유 커뮤니티니까, 필요한 정보가 담긴 게시물을 저장할 수 있는 기능을 넣으면 좋을 듯하다 !!
'project' 카테고리의 다른 글
[ jsp 프로젝트 ] 프로젝트 회고 (0) | 2023.12.22 |
---|---|
[ jsp 프로젝트 ] 게시글 저장 기능 (+ 대댓글) (0) | 2023.12.21 |
[ jsp 프로젝트 ] 게시글 작성 (+ FileUtil 을 이용한 이미지 업로드 / 페이징) (0) | 2023.12.21 |
[ jsp 프로젝트 ] 게시판 기능 (검색 / script 를 이용한 무한스크롤) (0) | 2023.12.20 |
[ jsp 프로젝트 ] 여행 커뮤니티 사이트 만들기 (0) | 2023.12.17 |