Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
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
Tags
more
Archives
Today
Total
관리 메뉴

개발자입니다

IT BANK) JSP 12일차 - JSP(회원관리 페이지) 본문

JSP/IT BANK - JSP

IT BANK) JSP 12일차 - JSP(회원관리 페이지)

끈기JK 2022. 9. 22. 15:41

220922

 

 

-회원 인터넷 페이지 만들기

*java에서 alt + shift + s - generate Getters and Setters 

*MemberDAO 작성 + ctrl + space 로 import 및 MemberDTO 작성 + ctrl + space 로 import

*변수에 저장하면 서버 재시작시 ArrayList에 저장한 데이터 날라간다. 그래서 나중에 DB로 할 것이다.

 

MemberDTO 내에 1명의 사람 정보는 다음과 같이 구성되어 저장된다.

 

ArrayList 내 MemberDTO 객체 저장되고, MemberDTO 객체 내에는 id, pw, name, email이 저장된다.

 

<title>index</title>
<style>
	a{text-decoration: none; color: black;}
</style>
</head>
<body>
	<h2>인덱스 페이지</h2>
	<a href="member.jsp">회원 가입</a> | 
	<a href="list.jsp">회원 목록</a> | 
	<a href="update.jsp">회원 수정</a> | 
	<a href="delete.jsp">회원 삭제</a> | 
	<a href="login.jsp">로그인</a> | 
	<a href="logout.jsp">로그아웃</a> | 
</body>

<title>member</title>
<script>
	function check(){
		id = document.getElementById('id');
		pw = document.getElementById('pw');
		confirmPw = document.getElementById('confirmPw');
 		if(id.value == "" || pw.value == ""){
			alert('필수 항목입니다.');
			return;
		}
		if(pw.value != confirmPw.value){
			alert('두 비밀번호가 일치하지 않습니다.');
			return;
		} 
		document.getElementById('f').submit();
	}
</script>
</head>
<body>
	<form action="memberService.jsp" method="post" id="f">
		<input type="text" name="id" id="id" placeholder="아이디"><br>
		<input type="password" name="pw" id="pw" placeholder="비밀번호"><br>
		<input type="password" name="confirmPw" id="confirmPw" placeholder="비밀번호 확인"><br>
		<input type="text" name="name" id="name" placeholder="이름"><br>
		<input type="text" name="email" id="email" placeholder="이메일"><br>
		<input type="button" value="회원 가입" onclick="check();">
		<input type="button" value="취소" onclick="location.href='index.jsp'">
	</form>
</body>

// memberService.jsp
<%@page import="session.MemberDTO"%>
<%@page import="session.MemberDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%
	request.setCharacterEncoding("utf-8");
	String id = request.getParameter("id");
	String pw = request.getParameter("pw");
	String confirmPw = request.getParameter("confirmPw");
	String name = request.getParameter("name");
	String email = request.getParameter("email");
	
	// 서버측 입력값 검증
	if(id == "" || pw == "" || name == ""){
		out.print("<script>alert('서버에서 검증하고 있는 필수 입력 항목입니다.');location.href='member.jsp'</script>");
		return;
	}
	
	if(pw.equals(confirmPw) == false){
		out.print("<script>alert('서버에서 검증하고 있는 필수 입력 항목입니다.');</script>");
		response.sendRedirect("member.jsp");
		return;
	}
	
	// Data Access Object
	MemberDAO memberDao = new MemberDAO();
	MemberDTO check = memberDao.selectId(id);
	String message, path;
	if(check == null){
		// 가입하려고 하는 아이디가 없기에 회원가입을 진행함.
		MemberDTO member = new MemberDTO();
		member.setEmail(email);
		member.setId(id);
		member.setName(name);
		member.setPw(pw);
		memberDao.insert(member);
		message = "회원가입 완료";
		path = "index.jsp";
	}else{
		// 가입하려고 하는 아이디가 있기에 중복 계정으로 가입을 할 수 없음.
		message = "회원가입 실패";
		path = "member.jsp";
	}
%>
<script>alert('<%=message%>'); location.href='<%=path%>'</script>

아래 2개의 java코드들은 src\main\java\session 폴더 내에 저장한다.

// MemberDAO.java
package session;

import java.util.ArrayList;

public class MemberDAO {
	// DataBase를 대신해서 데이터를 저장할 공간
	private static ArrayList<MemberDTO> members = new ArrayList<>();
	
	public void insert(MemberDTO member) {
		members.add(member);
	}
	public MemberDTO selectId(String id) {
		for(MemberDTO member : members) {
			if(member.getId().equals(id)) {
				return member;
			}
		}
		// 사용자가 매개변수로 전달한 아이디가 저장공간에 없다는 의미.
		return null;
	}
	public ArrayList<MemberDTO> list() {
		return members;  // 저장 공간의 참조값을 리턴함. 데이터를 통째로 넘기는 게 아님.
	}
	// 수정할 데이터를 받아서 ArrayList에 기존 데이터를 찾아 수정함.
	public void update(MemberDTO member) {
		MemberDTO old = selectId(member.getId());
		int index = members.indexOf(old);
		members.set(index, member);  // set(첫번째는 인덱스, 두번째는 데이터)
	}
	
	public void delete(String id) {
		MemberDTO search = selectId(id);
		int index = members.indexOf(search);
		members.remove(index);
	}
}
// MemberDTO.java
package session;

// Data Transfer Object
public class MemberDTO {
	private String id;
	private String pw;
	private String name;
	private String email;
	
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getPw() {
		return pw;
	}
	public void setPw(String pw) {
		this.pw = pw;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	
	
}

<%@page import="session.MemberDTO"%>
<%@page import="java.util.ArrayList"%>
<%@page import="session.MemberDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>list</title>
</head>
<body>
	<%
		MemberDAO memberDao = new MemberDAO();
		ArrayList<MemberDTO>members = memberDao.list();
	%>
	
	<table border=1>
		<tr>
			<th>아이디</th>
			<th>비밀번호</th>
			<th>이름</th>
			<th>이메일</th>
		</tr>
		<%
			for(MemberDTO m : members){
		%>
		<tr>
			<td><%=m.getId() %></td>
			<td><%=m.getPw() %></td>
			<td><%=m.getName() %></td>
			<td><%=m.getEmail() %></td>
		</tr>
		<%} %>
	</table>
	<a href="index.jsp" style="text-decoration: none"> 인덱스 페이지로 이동합니다.</a>
</body>
</html>

 

<input> 태그 내에서 disabled="disabled" 사용시 회색으로 수정 불가 상태 된다.

// update.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>update</title>
<script>
	function check(){
		id = document.getElementById('id');
		pw = document.getElementById('pw');
		confirmPw = document.getElementById('confirmPw');
 		if(id.value == "" || pw.value == ""){
			alert('필수 항목입니다.');
			return;
		}
		if(pw.value != confirmPw.value){
			alert('두 비밀번호가 일치하지 않습니다.');
			return;
		} 
		document.getElementById('f').submit();
	}
</script>
</head>
<body>
<%
	String id = (String)session.getAttribute("id");
	if(id == null){
		out.print("<script>alert('로그인 후 이용하세요.'); location.href='login.jsp';</script>");
		return;
	}
%>
	<form action="updateService.jsp" method="post" id="f">
		<input type="text" name="id" id="id" value='<%=session.getAttribute("id") %>' disabled="disabled"><br>
		<input type="password" name="pw" id="pw" placeholder="비밀번호"><br>
		<input type="password" name="confirmPw" id="confirmPw" placeholder="비밀번호 확인"><br>
		<input type="text" name="name" id="name"  value='<%=session.getAttribute("name")%>'><br>
		<input type="text" name="email" id="email"  value='<%=session.getAttribute("email")%>'><br>
		<input type="button" value="회원 수정" onclick="check();">
		<input type="button" value="취소" onclick="location.href='index.jsp'">
	</form>
</body>
</html>
// updateService.jsp
<%@page import="session.MemberDTO"%>
<%@page import="session.MemberDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%
	request.setCharacterEncoding("utf-8");
	String id = (String)session.getAttribute("id");
	if(id == null){
		response.sendRedirect("login.jsp");
		return;
	}
	
	String pw = request.getParameter("pw");
	String confirmPw = request.getParameter("confirmPw");
	String name = request.getParameter("name");
	String email = request.getParameter("email");
	
	// 서버측 입력값 검증
	if(pw == "" || name == ""){
		out.print("<script>alert('서버에서 검증하고 있는 필수 입력 항목입니다.');location.href='update.jsp'</script>");
		return;
	}
	
	if(pw.equals(confirmPw) == false){
		out.print("<script>alert('서버에서 검증하고 있는 필수 입력 항목입니다.');</script>");
		response.sendRedirect("update.jsp");
		return;
	}
	
	// Data Access Object
	MemberDAO memberDao = new MemberDAO();

	// 수정하려고 하는 아이디가 있으면 MemberDAO에 데이터 전달해서 수정
	MemberDTO member = new MemberDTO();
	member.setEmail(email);
	member.setId(id);
	member.setName(name);
	member.setPw(pw);
	memberDao.update(member);
	String message = "회원 정보 수정 완료";
	String path = "index.jsp";
	
%>
<script>alert('<%=message%>'); location.href='<%=path%>'</script>
<title>login</title>
</head>
<body>
	<%
		String id = (String)session.getAttribute("id");
		if(id == null){
			id = "";
	%>
	<form action="loginService.jsp" method="post">
		<input type="text" placeholder="아이디" name="id"> <br>
		<input type="password" placeholder="비밀번호" name="pw"> <br>
		<input type="submit" value="로그인">
		<input type="reset" value="취소">
	</form>
	<%}else{ %>
		<%=id %>님 로그인 상태입니다. <br>
		<input type="button" value="index 페이지로 이동" onclick="location.href='index.jsp'">
	<%} %>
</body>

</html>

// loginService
<%@page import="session.MemberDTO"%>
<%@page import="session.MemberDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	String id = request.getParameter("id");
	String pw = request.getParameter("pw");

	// 서버측 입력값 검증
	if(id == "" || pw == ""){
		out.print("<script>alert('서버에서 검증하고 있는 필수 입력 항목입니다.');location.href='update.jsp'</script>");
		return;
	}
	
	// 데이터베이스에서 아이디/패스워드 정보를 갖고 옴.
	MemberDAO memberDao = new MemberDAO();
	MemberDTO member = memberDao.selectId(id);
	
	if(member != null && member.getPw().equals(pw)){
		// 로그인 성공
		session.setAttribute("id", member.getId());
		session.setAttribute("name", member.getPw());
		session.setAttribute("email", member.getEmail());
		response.sendRedirect("index.jsp");
		return;
	}
	// 로그인 실패 시
%>
<script>alert('아이디 또는 비밀번호를 확인하세요'); location.href='login.jsp'</script>

 

<input> 태그 내 readonly="readonly" 시 수정 불가 상태가 된다.

// delete.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>delete</title>
</head>
<body>
<%
	String id = (String)session.getAttribute("id");
	if(id == null){
		out.print("<script>alert('로그인 후 이용하세요.'); location.href='login.jsp';</script>");
		return;
	}
%>
	<form action="deleteService.jsp" method="post">
		<input type="text" value="<%=id %>" readonly="readonly"> <br>
		<input type="password" placeholder="비밀번호" name="pw" ><br> 
		<input type="password" placeholder="비밀번호 확인" name="confirmPw" ><br> 
		<input type="submit" value="회원 탈퇴" >
		<input type="button" value="취소" onclick="location.href='index.jsp'">
	</form>
</body>
</html>

// deleteService
<%@page import="session.MemberDTO"%>
<%@page import="session.MemberDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	String id = (String)session.getAttribute("id");
	if(id == null){
		out.print("<script>alert('로그인 후 이용하세요.'); location.href='login.jsp';</script>");
		return;
	}
	
	request.setCharacterEncoding("utf-8");
	String pw = request.getParameter("pw");
	String confirmPw = request.getParameter("confirmPw");
	
	// 입력 값 검증
	if(pw == ""){
		out.print("<script>alert(' 필수 항목이다.'); location.href='delete.jsp';</script>");
		return;
	}
	
	// 입력 값 검증.
	if(pw.equals(confirmPw) == false){
		response.sendRedirect("delete.jsp");
		return ;
	}
	
	MemberDAO memberDao = new MemberDAO();
	MemberDTO member = memberDao.selectId(id);
	if(member.getPw().equals(pw) == false){
		out.print("<script>alert('비밀번호가 일치하지 않습니다.'); location.href='delete.jsp';</script>");
		return;
	}
	
	memberDao.delete(id);
	session.invalidate();
%>
<script>alert('회원 삭제 완료'); location.href='index.jsp';</script>