관리 메뉴

개발 노트

9/21 : MVC 모델1 제작(2/3) 본문

프로젝트 기반 JAVA 응용 SW개발 : 22.07.19~23.01.20/Servlet, JSP

9/21 : MVC 모델1 제작(2/3)

hayoung.dev 2022. 10. 4. 02:38

(9/20 내용 이어짐)

 

4. 회원가입 페이지 제작

webapp > joinForm.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">
	table {
		background-color: pink;
	}
</style>
<script type="text/javascript">
	function chk() {
		if (frm.passwd.value != frm.passwd2.value) {
			alert("암호가 다릅니다");
			frm.passwd.focus();
			return false;
		}
		return true;
	}
	/* 	새로 열릴 참의 속성 또는 창의 이름을 지정(target="_blank") 
    선택적인 값으로 기본값은 "_blank" . 사용 가능한 값을 다음과 같습니다.
	- _blank : 새 창에 열립니다. 이것이 기본값입니다.
	- _parent : 부모 프레임에 열립니다.
	- _self : 현재 페이지를 대체합니다.
	- _top : 로드된 프레임셋을 대체합니다.
	- name(임의의 이름) : 새 창이 열리고 창의 이름을 지정합니다. 동일한 이름에 다시 open() 을 하면 기존의 열린창의 내용이 바뀝니다. 
	              다른 이름을 사용하면 또다른 새창이 열립니다
	              
	  var popup = window.open(url, name, option);
	  var popup = window.open('팝업주소', '팝업창 이름', '팝업창 설정');
    */			
	function winop() {
		if (!frm.id.value) {
			alert("id를 입력하고 사용하세요");
			frm.id.focus();
			return false;
		}
		/* confirmId.jsp 가 팝업창으로 열린다. (요즈음엔 팝업창보다 aJax를 쓰는 추세이다.)
		id는 frm.id.value값. 즉 하단의 form(namedl frm)의 name값을 가지고 간다.*/
	    window.open("confirmId.jsp?id=" + frm.id.value, "kkk",	"width=300 height=300");
	}

</script>
</head>
<body>
	<h2>회원가입</h2>
	<form action="joinPro.jsp" name="frm" onsubmit="return chk()">
		<table border="1">
			<!-- Member.java에 저장한 필드명 그대로 맞춰놓는다. 그래야 joinPro.jsp에서 한번에 불러올 수 있다.-->
			<tr>
				<td>아이디</td>
				<td><input type="text"     name="id" required="required">
				    <input type="button"   value="아이디체크" onclick="winop()"></td>
			</tr>
			<tr>
				<td>암호</td>
				<td><input type="password" name="passwd" required="required"></td>
			</tr>
			<tr>
				<td>암호확인</td>
				<td><input type="password" name="passwd2" required="required"></td>
			</tr>
			<tr>
				<td>이름</td>
				<td><input type="text" name="name" required="required"></td>
			</tr>
			<tr>
				<td>주소</td>
				<td><input type="text" name="address" required="required"></td>
			</tr>
			<tr>
				<td>전화번호</td>
					<!-- pattern : 입력할 패턴 placeholder : 도움말 -->	
				<td><input type="tel" name="tel" required="required" 
					pattern="\d{2,3}-\d{3,4}-\d{4}" placeholder="010-xxxx-xxxx"
					title="2,3자리-3,4자리-4자리"></td>
			</tr>
			<tr>
				<td><input type="submit" value="확인"></td>
				<td><input type="reset" value="취소"></td>
			</tr>
		</table>
	</form>	
	
	
</body>
</html>

webapp > joinPro.jsp

<%@page import="och12.MemberDao"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" errorPage="error.jsp"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 값을 html로 가져오는 방법 -->
<jsp:useBean id="member" class="och12.Member"></jsp:useBean>
<!-- 전부 불러옴. -->
<jsp:setProperty property="*" name="member"/>
<%
	MemberDao md = MemberDao.getInstance();
	int result = md.insert(member);  
	if (result > 0) { 
%>
	<script type="text/javascript">
		alert("회원가입 축하 !! 이제 고생 좀 해");
		location.href="loginForm.jsp";
	</script>
<%
	} else { %>
		<script type="text/javascript">
			alert("헐 실패야 똑바로 해 ~");
			location.href="joinForm.jsp";
		</script>
<%	}  %>
</body>
</html>


joinPro2.jsp (joinPro의 다른 방식)

<%@page import="och12.Member"%>
<%@page import="och12.MemberDao"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" errorPage="error.jsp"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
	/* 자바코드로 가져오는 방법. */
    Member member = new Member();
	member.setId(request.getParameter("id"));
	member.setPasswd(request.getParameter("passwd"));
	member.setName(request.getParameter("name"));
	member.setAddress(request.getParameter("address"));
	member.setTel(request.getParameter("tel"));

	MemberDao md = MemberDao.getInstance();
	int result = md.insert(member);  
	if (result > 0) { 
%>
	<script type="text/javascript">
		alert("회원가입 축하 !! 이제 고생 좀 해");
		location.href="loginForm.jsp";
	</script>
<%
	} else { %>
		<script type="text/javascript">
			alert("헐 실패야 똑바로 해 ~");
			location.href="joinForm.jsp";
		</script>
<%	}  %>
</body>
</html>

 

5. 회원명단 페이지 제작

webapp > memberList.jsp

<%@page import="och12.Member"%>
<%@page import="java.util.List"%>
<%@page import="och12.MemberDao"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" errorPage="error.jsp"%>
<%@ include file="memberCheck.jsp" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">tr:hover{ background-color: orange; }
	td { text-align: center; }	
</style>
</head>
<body bgcolor="yellow">
<%
    MemberDao md = MemberDao.getInstance();
	List<Member> list = md.list();  
	if (list == null) {
		out.println("회원이 없습니다");
	}else {	
	
%>
<h2>회원정보</h2>
  <table bgcolor="pink" width="100%">
	<tr bgcolor="cyan"><th>아이디</th><th>이름</th><th>주소</th>
		<th>전화번호</th><th>가입일</th></tr>
	<%	for(int i = 0; i < list.size(); i++) { 
			out.println("<tr><td>"+list.get(i).getId()+
						"</td><td>"+list.get(i).getName()+
						"</td><td>"+list.get(i).getAddress()+
						"</td><td>"+list.get(i).getTel()+
						"</td><td>"+list.get(i).getReg_date()+"</td></tr>");
	    } %>   
  </table>
 <% } %>



</body>
</html>

 

6. 회원정보 수정 페이지 제작

webapp > updateForm.jsp

<%@page import="och12.Member"%>
<%@page import="och12.MemberDao"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" errorPage="error.jsp"%>
<%@ include file="memberCheck.jsp"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">
	table {
		background-color: pink;
	}
</style>
</head>
<body>
	<%
		/* memberCheck.jsp에서 가져온 id. 나만 수정이 가능하다. */
		MemberDao md = MemberDao.getInstance();
		/* id를 가지고 MemberDao.java의 select()를 실행한다. */
		Member member = md.select(id); 
		String context = request.getContextPath();  // Tomcat Meta data
	%>
	<h2>회원정보 수정</h2>
	<form action="updatePro.jsp">
		<table border="1"    id="table">
			<tr>
				<td>아이디</td>
				<!-- value의 ""안에 들어간 값이 그대로 입력되기 때문에 띄어쓰기가 들어가지 않도록 주의한다. -->
				<td><%=id%><input type="hidden"  class="id"  name="id"  id="id"
					value="<%=member.getId()%>"></td>
			</tr>
			<tr>
				<td>암호</td>
				<td><input type="password" name="passwd"  id="passwd" required="required"></td>
			</tr>
			<tr>
				<td>이름</td>
				<td><input type="text" name="name" required="required"
					value="<%=member.getName()%>"></td>
			</tr>
			<tr>
				<td>주소</td>
				<td><input type="text" name="address" required="required"
					value="<%=member.getAddress()%>"></td>
			</tr>
			<tr>
				<td>전화번호</td>
				<td><input type="tel" name="tel" required="required"
					pattern="\d{2,3}-\d{3,4}-\d{4}" value="<%=member.getTel()%>"></td>
			</tr>
			<tr>
				<td>날짜</td>
				<td><%=member.getReg_date()%></td>
			</tr>
			<tr>
				<td><input type="submit" value="확인"></td>
				<td><input type="reset" value="취소"></td>
			</tr>
		</table>
	</form>
	
</body>
</html>

webapp > updatePro.jsp

<%@page import="och12.MemberDao"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" errorPage="error.jsp"%>
<%@ include file="memberCheck.jsp" %>      
<!-- 오라클과 작업할 것이기 때문에 에러와 로그인 jsp파일을 위처럼 걸어준다. -->  
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<jsp:useBean id="member" class="och12.Member"></jsp:useBean>
<!-- 모든 프로젝트를 가지고 이동 -->
<jsp:setProperty property="*" name="member"/>

<%
	MemberDao md = MemberDao.getInstance();
	int result = md.update(member);  /* MemberDao.java의 update 실행 */
	if (result > 0) {  
%>
	<script type="text/javascript">
		alert("사용자 정보 수정 완료"); 
		location.href="main.jsp";
	</script>
<%	} else { %>
	<script type="text/javascript">
		alert("오류야");  
		history.back();
	</script>
<%	} %>

</body>
</html>

 

7. 회원탈퇴 페이지 제작

webapp > deleteForm.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ include file="memberCheck.jsp" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h2>탈퇴하려면 암호를 입력하시오</h2>
	<form action="deletePro.jsp">
		<fieldset >
			<label for="passwd">암호 : </label> 
	 		 <input type="password" name="passwd" id="passwd"><p>		 	
	 		<input type="submit" value="확인">
		</fieldset>	
	</form>
</body>
</html>

webapp > deletePro.jsp (강의 없음)

<%@page import="och12.MemberDao"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" errorPage="error.jsp"%>
<%@ include file="memberCheck.jsp" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
	String passwd = request.getParameter("passwd");
	MemberDao md  = MemberDao.getInstance();
	System.out.println("DeletePro   id->"+id);
	int result    = md.delete(id, passwd); 
	if (result == 1) {
		session.invalidate(); 
%>
	<script type="text/javascript">
		alert("탈퇴되었습니다. 잘 해 보세요  ?"); 
		location.href="main.jsp";
	</script>
<%	} else if (result==0) { %>
	<script type="text/javascript">
		alert("암호 똑바로 입력해?"); 
		history.go(-1);
	</script>
<%  } else { %>
	<script type="text/javascript">
		alert("유저가 다름?"); 
		history.go(-1);
	</script>
<% } %>
</body>
</html>

 

8. 아이디 중복 확인 페이지 제작

confirmId.jsp

<%@page import="och12.MemberDao"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" errorPage="error.jsp"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<!-- id를 직접 가져온다. -->
<% 	String id = request.getParameter("id"); %>
<script type="text/javascript">
	function wincl() {
		opener.document.frm.id.value="<%=id%>";
		window.close();
	}
</script>
</head>
<body>
<%
	MemberDao md = MemberDao.getInstance();
	int result = md.confirm(id);   
	// 존재 않는 사용자
	if (result == 0) {
%>
	<%=id %>는 사용할수 있습니다<p>
	<input type="button" value="닫기" onclick="wincl()">		
<%	} else { // 존재  사용자 --> 1  %>
	<%=id %>이미 있는 아이디니 다른 것을 입력하세요<p>
	<form >
		아이디 : <input type="text" name="id"><p>
		<input type="submit" value="확인">
	</form>
<% } %>
</body>
</html>

[실행 순서]

0. loginForm.jsp 실행

1. 회원가입 누르면 joinForm.jsp 실행

2. confirmid.jsp 하여 사용가능한 아이디인지 확인

 

9. 회원가입(image를 추가할 수 있는) 페이지 제작

webapp > joinForm3.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">
	table {
		background-color: pink;
	}
</style>
<script type="text/javascript">
	function chk() {
		if (frm.passwd.value != frm.passwd2.value) {
			alert("암호가 다릅니다");
			frm.passwd.focus();
			return false;
		}
		return true;
	}
	/* 	새로 열릴 참의 속성 또는 창의 이름을 지정(target="_blank") 
    선택적인 값으로 기본값은 "_blank" . 사용 가능한 값을 다음과 같습니다.
	- _blank : 새 창에 열립니다. 이것이 기본값입니다.
	- _parent : 부모 프레임에 열립니다.
	- _self : 현재 페이지를 대체합니다.
	- _top : 로드된 프레임셋을 대체합니다.
	- name(임의의 이름) : 새 창이 열리고 창의 이름을 지정합니다. 동일한 이름에 다시 open() 을 하면 기존의 열린창의 내용이 바뀝니다. 
	              다른 이름을 사용하면 또다른 새창이 열립니다
	              
	  var popup = window.open(url, name, option);
	  var popup = window.open('팝업주소', '팝업창 이름', '팝업창 설정');
    */			
	function winop() {
		if (!frm.id.value) {
			alert("id를 입력하고 사용하세요");
			frm.id.focus();
			return false;
		}
	    window.open("confirmId.jsp?id=" + frm.id.value, "kkk",	"width=300 height=300");
	}
</script>
</head>
<body>
	<h2>회원가입(img_path 추가)</h2>
	<form action="joinPro3.jsp" name="frm" onsubmit="return chk()" method="post" enctype="multipart/form-data">
		<table border="1">
			<tr>
				<td>아이디</td>
				<td><input type="text"     name="id" required="required">
				    <input type="button"   value="아이디체크" onclick="winop()"></td>
			</tr>
			<tr>
				<td>암호</td>
				<td><input type="password" name="passwd" required="required"></td>
			</tr>
			<tr>
				<td>암호확인</td>
				<td><input type="password" name="passwd2" required="required"></td>
			</tr>
			<tr>
				<td>이름</td>
				<td><input type="text" name="name" required="required"></td>
			</tr>
			<tr>
				<td>주소</td>
				<td><input type="text" name="address" required="required"></td>
			</tr>
			<tr>
				<td>전화번호</td>
				<td><input type="tel" name="tel" required="required"
					pattern="\d{2,3}-\d{3,4}-\d{4}" placeholder="010-xxxx-xxxx"
					title="2,3자리-3,4자리-4자리"></td>
			</tr>
			<tr>
				<td>회원Image</td>
				<td><input type="file" name="img_path" required="required"></td>
			</tr>
			<tr>
				<td><input type="submit" value="확인"></td>
				<td><input type="reset" value="취소"></td>
			</tr>
		</table>
	</form>	
	
</body>
</html>

webapp > joinPro3.jsp

<%@page import="och12.Member"%>
<%@page import="java.io.File"%>
<%@page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy"%>
<%@page import="java.util.Enumeration"%>
<%@page import="com.oreilly.servlet.MultipartRequest"%>
<%@page import="och12.MemberDao"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" errorPage="error.jsp"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<!-- 사진 저장하는 경우의 코드 -->
<body>
<%
	request.setCharacterEncoding("utf-8");
	//      5M
	int maxSize = 5 * 1024 * 1024;
	String fileSave = "/fileSave";

	// Meta Data 
	String realPath = getServletContext().getRealPath(fileSave);
	System.out.println("realPath->" + realPath);
	//MultipartRequest는 cos.jar에 있음.
	MultipartRequest multi = new MultipartRequest(request, realPath, maxSize, "utf-8", new DefaultFileRenamePolicy());
	Enumeration en = multi.getFileNames();
	// 서버에 저장된 파일 이름
	String serverSaveFilename = "";
	while (en.hasMoreElements()) {
		//input 태그의 속성이 file인 태그의 name 속성값 :파라미터이름
		String parameterName = (String) en.nextElement();
		//서버에 저장된 파일 이름 
		serverSaveFilename = multi.getFilesystemName(parameterName);
		//전송전 원래의 파일 이름 
		String original = multi.getOriginalFileName(parameterName);
		//전송된 파일의 내용 타입 
		String type = multi.getContentType(parameterName);
		//전송된 파일속성이 file인 태그의 name 속성값을 이용해 파일객체생성 
		File file = multi.getFile(parameterName);
		out.println("real Path : " + realPath + "<br>");
		out.println("파라메터 이름 : " + parameterName + "<br>");
		out.println("실제 파일 이름 : " + original + "<br>");
		out.println("저장된 파일 이름 : " + serverSaveFilename + "<br>");
		out.println("파일 타입 : " + type + "<br>");
		if (file != null) {
			out.println("크기 : " + file.length() + "<br>");
		}
	}
	//request가 아니라 multi로 받아야 한다.
	String id 		 = multi.getParameter("id");
	String name      = multi.getParameter("name");
	String passwd    = multi.getParameter("passwd");
	String address   = multi.getParameter("address");
	String tel       = multi.getParameter("tel");
	String img_path  = serverSaveFilename;

	// DTO 작업 
	Member member = new Member();
	member.setId(id);
	member.setName(name);
	member.setPasswd(passwd);
	member.setAddress(address);
	member.setTel(tel);
	member.setImg_path(img_path);


	MemberDao md = MemberDao.getInstance();
	int result = md.insert3(member);  
	if (result > 0) { 
%>
	<script type="text/javascript">
		alert("회원가입(image) 축하 !! 이제 고생 좀 해");
		location.href="loginForm.jsp";
	</script>
<%
	} else { %>
		<script type="text/javascript">
			alert("헐 실패야 똑바로 해 ~");
			location.href="joinForm.jsp";
		</script>
<%	}  %>
</body>
</html>

 

출력 결과

베포한 서버의 이미지 폴더로 저장된다.

webapp > updateForm3.jsp : 내가 올린 파일을 화면에서 볼 수  있다.

<%@page import="och12.Member"%>
<%@page import="och12.MemberDao"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" errorPage="error.jsp"%>
<%@ include file="memberCheck.jsp"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">
	table {
		background-color: pink;
	}
</style>
</head>
<body>
	<%
	   
		MemberDao md = MemberDao.getInstance();
		Member member = md.select(id); 
		String context = request.getContextPath();  // Tomcat Meta data 나의 메타파일
	%>
	<h2>회원정보 수정</h2>
	<form action="updatePro.jsp">
		<table border="1"    id="table">
			<tr>
				<td>아이디</td>
				<td><%=id%><input type="hidden"  class="id"  name="id"  id="id"
					value="<%=member.getId()%> "></td>
			</tr>
			<tr>
				<td>암호</td>
				<td><input type="password" name="passwd"  id="passwd" required="required"></td>
			</tr>
			<tr>
				<td>이름</td>
				<td><input type="text" name="name" required="required"
					value="<%=member.getName()%> "></td>
			</tr>
			<tr>
				<td>주소</td>
				<td><input type="text" name="address" required="required"
					value="<%=member.getAddress()%>"></td>
			</tr>
			<tr>
				<td>전화번호</td>
				<td><input type="tel" name="tel" required="required"
					pattern="\d{2,3}-\d{3,4}-\d{4}" value="<%=member.getTel()%>"></td>
			</tr>
			<tr>
				<td>날짜</td>
				<td><%=member.getReg_date()%></td>
			</tr>
			<tr>
				<!-- 내가 올린 이미지파일 보기 -->
				<td>회원이미지</td>
				<td><img alt="회원이미지" src="<%=context%>/fileSave/<%=member.getImg_path()%>"></td>
			</tr>
			<tr>
				<td><input type="submit" value="확인"></td>
				<td><input type="reset" value="취소"></td>
			</tr>
		</table>
	</form>
	
</body>
</html>
반응형