today_is

[ jsp 프로젝트 ] 회원기능 본문

project

[ jsp 프로젝트 ] 회원기능

ye_rang 2023. 12. 18. 23:50

내가 맡은 파트 !

: 필요에 따라 조정하기로 했지만,

우선은 회원기능부터 빠르게 진행해보겠다

파란색이 내꺼 !

 

 

MemberDTO

IDX NOT NULL NUMBER
USERID NOT NULL VARCHAR2(100)
USERPW NOT NULL VARCHAR2(100)
USERNAME NOT NULL VARCHAR2(100)
EMAIL 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

- 어려움을 겪은 부분

: 없음

 

 

- 진행사항

: 생각보다 내가 담당한 파트가 빨리 끝나고 있어서,

추가적으로 다른 기능을 넣기로 했다

 

공유 커뮤니티니까, 필요한 정보가 담긴 게시물을 저장할 수 있는 기능을 넣으면 좋을 듯하다 !!