본문 바로가기

IT코딩공부!

#32 이클립스(JSP) + DB 연결

오늘의 노래!!!

 
Allergy
아티스트
(여자)아이들
앨범
I feel
발매일
1970.01.01

// 먼저 환경변수 지정!! Properties >> java Build Path →java11로

기본 구조 (완성본이 아닌 SELECT와 INSERT 만 일단 구현)

//패키지, java파일 5개와 jsp파일 5개 lib는 c태그 사용을 위해서 넣어준다.


[0] jsp파일 파악하기

//jsp를 만들어줄때 무조건 WEB-INF에서 만들어 줘여한다

//index.jsp를 생성해서 첫화면 틀을 만들어준다.

//각각의 형식에 맞게 버튼으로 다만들어줘서 누르면 그페이지에 들어갈수 있게 onclick을 사용했고,

회원목록 경우에는 강제적으로 memberList에 들어가게끔 해놓았다.

하지만 여기서 c태그를 사용해서 우리가 전에 사용해던 조건문 같이 c태그의 조건문인데

<c:choose> // <c:when> // <c:otherwise>를 기본틀이다.

따라서 로그인을 했을때 참이면 로그인 버튼이 >> 로그아웃으로 바뀌고 

틀리면 로그인창으로 계속 남아있도록 해놓았다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MEMBER_index</title>
</head>
<body>
<button onclick="join()">회원가입</button>
<button onclick="location.href='memberList'">회원목록</button>


	 <c:choose>
	 	<c:when test="${sessionScope.loginId == null}">
	 	<button onclick="login()">로그인</button>
	 	</c:when>
	 	<c:otherwise>
	 		<button onclick="location.href='memberlogout'">로그아웃</button>
	 	</c:otherwise>
	 </c:choose>

</body>

<script>
	function join(){
		location.href= "JoinForm.jsp";
	}
	
	function login(){
		location.href= "LoginForm.jsp";
	}
</script>
</html>

로그인 성공시 .. 각각print하게끔 만들어서 불량 위치를 확인할수 있게 12345678 번호를 적어보았다.

//JoinForm.jsp 가입을 위한 툴을 만들어준다

// 가입하기 위한 첫번째 틀이다 

style로 각각 꾸미고,

form action="memberJoin" method="post"를 통해 연결을 시켜놓는다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MEMBER_Join</title>
<style>
	table, td, th{
		border : 1px solid black;
		border-collapse : collapse;
	}
	
	td, th{
		padding : 10px;
	}
	
	caption {
		margin-bottom : 10px;
		font-size : 20px;
		font-weight : bold;
	}
	
	table{
		width : 400px;
	}
	
</style>
</head>
<body>

<form action="memberJoin" method="post">
	<table>
		<caption>회원가입 페이지</caption>
		
			<tr>
				<th colspan="2">인천일보 아카데미 가입 신청서</th>
			</tr>
			
			<tr>
				<th>항목</th>
				<th>내용</th>
			</tr>
			
			<tr>
				<th>아이디</th>
				<td><input type="text" name="memId"/></td>
			</tr>
			
			<tr>
				<th>비밀번호</th>
				<td><input type="password" name="memPw"/></td>
			</tr>
			
			<tr>
				<th>이름</th>
				<td><input type="text" name="memName"/></td>
			</tr>
			
			<tr>
				<th>성별</th>
				<td>
					남자 <input type="radio" name="memGender" value="남자"/>
					여자 <input type="radio" name="memGender" value="여자"/>
				</td>
			</tr>
			
			<tr>
				<th>생년월일</th>
				<td><input type="date" name="memBirth"/></td>
			</tr>
			
			<tr>
				<th>이메일</th>
				<td><input type="email" name="memEmail"/></td>
			</tr>
			
			<tr>
				<th>연락처</th>
				<td><input type="text" name="memPhone"/></td>
				
			</tr>
			
			<tr>
				<th colspan="2">
					<input type="submit" value="가입"/>
					<input type="reset" value="다시작성"/>
				</th>
			</tr>
			
			
	
	</table>
</form>

</body>
</html>

화면에서 나타난 JoinForm이당~~

//LoginForm.jsp는 로그인을 할수 있도록 만든 html에 틀이다

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MEMBER_Login</title>
</head>
<body>
<h2>로그인페이지</h2>
<form action="memberLogin" method="post">
    <fieldset >
        <legend>로그인</legend>
        <label>아이디 : <input type="text" name="memId" id="LoginId"/></label>
        <label>비번 : <input type="text" name="memPw" id="LoginPw"/></label>
        <input type="submit" value="로그인"/>
    </fieldset>
</form>
</body>
</html>

아이디 비번~~~

//Member.jsp는 회원 목록을 조회해준는 html에 틀이다.

<c:forEach> 태그문으로 반복적으로 사용하게 하도록 만들었구, 테이블 안에서 ${변수명}조회는 a태그를 사용해서 강제적으로 이동하게 만들었구삭제는 버튼을 만들어서 삭제하도록 만들어 보았다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style>
	table, td, th{
	border : 1px solid black;
	border-collapse : collapse;
	}
</style>
</head>
<body>
<form action="memberList" method="post">
	<table>
		<caption>회원목록 페이지</caption>
			<c:forEach var="list" items="${memberList}">
			<tr>
				<td>아이디</td>
				<td>이름</td>
				<td>성별</td>
				<td>조회</td>
				<td>삭제</td>
			</tr>
			<tr>
				<td>${list.memId}</td>
				<td>${list.memName}</td>
				<td>${list.memGender}</td>
				<td><a href="memberView?memId=${list.memId}">조회</a></td> <!-- 강제적으로 만듬  -->
				<td><button>삭제</button> </td>
			</tr>
		</c:forEach>	
	</table>
</form>

</body>
</html>

//MemberView.jsp는 view라는 변수명을 만들어서 쉽게 테이블 출력할수 있도록 만들었다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MEMBER_Join</title>
<style>
	table, td, th{
		border : 1px solid black;
		border-collapse : collapse;
	}
	
	td, th{
		padding : 10px;
	}
	
	caption {
		margin-bottom : 10px;
		font-size : 20px;
		font-weight : bold;
	}
	
	table{
		width : 400px;
	}
	
</style>
</head>
<body>

	<table>
		<caption>회원정보 페이지</caption>
		

			
			<tr>
				<th>항목</th>
				<th>내용</th>
			</tr>
			
			<tr>
				<th>아이디</th>
				<td>${view.memId}</td>
			</tr>
			
			<tr>
				<th>비밀번호</th>
				<td>${view.memPw}</td>
			</tr>
			
			<tr>
				<th>이름</th>
				<td>${view.memName}</td>
			</tr>
			
			<tr>
				<th>성별</th>
				<td>
					${view.memGender}
				</td>
			</tr>
			
			<tr>
				<th>생년월일</th>
				<td>${view.memBirth}</td>
			</tr>
			
			<tr>
				<th>이메일</th>
				<td>${view.memEmail}</td>
			</tr>
			
			<tr>
				<th>연락처</th>
				<td>${view.memPhone}</td>
				
			</tr>
			
			<tr>
				<th colspan="2">
					<button>수정</button>
				</th>
			</tr>
	</table>


</body>
</html>


[1] 패키지 controller중 java파일 파악하기

//먼저 memberJoin.java에서 변수를 String으로 만들어서 request.getParameter(변수명); 정보를 받고,

MemberDTO에서 member객체 만들기 생성자 생성,

JoinService.java에 변수를 담아서 옮긴다!

package controller;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import dto.MemberDTO;
import service.JoinService;

@WebServlet("/memberJoin")
public class memberJoin extends HttpServlet {
	private static final long serialVersionUID = 1L;

    public memberJoin() {
        super();
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doProcess(request, response);
	}

	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doProcess(request, response);
	}
	
	protected void doProcess(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8"); 
		response.setContentType("text/html; charset=UTF-8");
		
		// 아이디, 비밀번호, 이름, 생년월일, 성별, 이메일, 연락처 정보 받기!
		String memId	 = request.getParameter("memId");
		String memPw	 = request.getParameter("memPw");
		String memName	 = request.getParameter("memName");
		String memBirth	 = request.getParameter("memBirth");
		String memGender = request.getParameter("memGender");
		String memEmail	 = request.getParameter("memEmail");
		String memPhone	 = request.getParameter("memPhone");
		
		// MemberDTO타입의 member객체 만들기(생성자 사용)
		MemberDTO member = new MemberDTO();
		
		member.setMemId(memId);
		member.setMemPw(memPw);
		member.setMemName(memName);
		member.setMemBirth(memBirth);
		member.setMemGender(memGender);
		member.setMemEmail(memEmail);
		member.setMemPhone(memPhone);
		
		System.out.println("[1] jsp → controller : " + member);
		
		// service패키지에 있는 JoinService.java(class)파일 
		JoinService jsvc = new JoinService();
		
		// 7개의 정보를 member객체에 담아서 service로 넘기기
		// int result = jsvc.mJoin(memId, memPw, memName, memBirth, memGender, memEmail, memPhone);
		int result = jsvc.mJoin(member);
		System.out.println("[7] service → controller : " + result);
		
		if(result > 0) {
			System.out.println("[8] controller → jsp : LoginForm.jsp");
			response.sendRedirect("LoginForm.jsp");
		} else {
			System.out.println("[8] controller → jsp : JoinForm.jsp");
			response.sendRedirect("Joinform.jsp");
		}
		
	}

}

//먼저 memberList.java에서는 데이터 타입 ListService.java로 넘기고,

그 정보를 담아서 memberList.jsp로 이동

package controller;

import java.io.IOException;
import java.util.ArrayList;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import dto.MemberDTO;
import service.ListService;

@WebServlet("/memberList")
public class memberList extends HttpServlet {
	private static final long serialVersionUID = 1L;
 
    public memberList() {
        super();
    }
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doProcess(request, response);
	}

	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doProcess(request, response);
	}
	
	protected void doProcess(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8"); 
		response.setContentType("text/html; charset=UTF-8");
		
		System.out.println("[1]jsp -> controller ");
		//service로 넘어가기
		ListService lisvc = new ListService();
		
		//데이터 타입 넘기기~~
		ArrayList<MemberDTO> memberList = lisvc.mList();
		System.out.println("[7] service -> controller >>memberList : " + memberList);
		
		// 정보 담아서 memberList로 담아 jsp로 이동!!!
		
		request.setAttribute("memberList", memberList);
		
		
		RequestDispatcher dispatcher = request.getRequestDispatcher("MemberList.jsp");
	
		System.out.println("[8] controller >> jsp : MemberList.jsp");
		dispatcher.forward(request,response);
	
	
	}

}

//먼저 memberLogin.java에서는 데이터 타입 LoginService.java로 넘기고,

그 정보를 담아서 LoginForm.jsp로 이동 

package controller;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import service.LoginService;


@WebServlet("/memberLogin")
public class memberLogin extends HttpServlet {
	private static final long serialVersionUID = 1L;
       

    public memberLogin() {
        super();
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doProcess(request, response);
	}

	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doProcess(request, response);
	}
	
	protected void doProcess(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8"); 
		response.setContentType("text/html; charset=UTF-8");
		
		String memId = request.getParameter("memId");
		String memPw = request.getParameter("memPw");
		
		System.out.println("[1]jsp -> controller >> memId " + memId + ", memPw : "+ memPw);
		
		
		
		// 
		LoginService lsvc = new LoginService();
		
		// id와 pw정보를 확인하고 일치여부 판단 후 id판별
		String loginId = lsvc.mLogin(memId,memPw);
		System.out.println("[7] service -> controller >> loginId : " + loginId);
		
		HttpSession session = request.getSession();
		
		if(loginId != null) {
			System.out.println("[8] controller >> jsp : index.jsp");
			session.setAttribute("loginId", loginId);
			response.sendRedirect("index.jsp");
			
		}else {
			System.out.println("[8] controller >> jsp : LoginForm.jsp");
			response.sendRedirect("LoginForm.jsp");
		}
	}

}

// memberlogout.java에서는 단순하게 로그인이 성공하면 index.jsp로 이동하면 실행

package controller;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

@WebServlet("/memberlogout")
public class memberlogout extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    public memberlogout() {
        super();
  
    }
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doProcess(request, response);
	}

	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doProcess(request, response);
	}
	
	protected void doProcess(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8"); 
		response.setContentType("text/html; charset=UTF-8");

		
		//(1) session 객체 생성
		HttpSession session = request.getSession();
		
		//(2) session 초기화
		session.invalidate();
		
		//(3) index.jsp로 이동
		response.sendRedirect("index.jsp");
	}
}

//이것두 단순하게 memberView에서 memId를 담아서 MemberDTO로 넘어가 정보를 담고 담은것을이제 MemberView.jsp에 옮기게 된다!!

package controller;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import dto.MemberDTO;
import service.ViewService;

@WebServlet("/memberView")
public class memberView extends HttpServlet {
	private static final long serialVersionUID = 1L;
        
    public memberView() {
        super();
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doProcess(request, response);
	}

	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doProcess(request, response);
	}
	
	protected void doProcess(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8"); 
		response.setContentType("text/html; charset=UTF-8");
		
		String memId = request.getParameter("memId");
		
		System.out.println("[1]jsp -> controller >> memId" + memId);
		
		ViewService vsvc = new ViewService();
		
		
		MemberDTO member = vsvc.mView(memId);
		System.out.println("[7]service -> controller >> member" + member);
		
		// member 정보 view라는 이름 사용
		request.setAttribute("view", member);
		RequestDispatcher dispatcher = request.getRequestDispatcher("MemberView.jsp");
		System.out.println("[8] controller >> jsp : MemberView.jsp");
		dispatcher.forward(request, response);
	}

}

[2] dao파일 파악하기

// 기본툴

Connection con;

PreparedStatement pstmt;

ResultSet rs;



public void setConnection(Connection con) {

this.con = con;

}

// memberDAO에서는 각각파일에서 변수를 지정하고 변수에 sql문을 넣을수 있는 중요한 파일이다!!!

// mJoin은 먼저 controller패키지에서 온 변수명으로 조건에 맞는 sql문을 넣어서 만들어준다 이때 db에 테이블이 생성되어 있어야한다!!!

pstmt = con.prepareStatement(sql);

pstmt.setString(1, member.getMemId());

>> try.cath문 실행

무조건 return값에는 변수명!!!

	public int mJoin(MemberDTO member) {
		System.out.println("[3] service → dao : " + member);
		int result = 0;
		
		String sql = "INSERT INTO MEMBERDTO VALUES(?, ?, ?, ?, ?, ?, ?)";
		
		try {
			System.out.println("[4] dao → db : " + member);
			pstmt = con.prepareStatement(sql);
			pstmt.setString(1, member.getMemId());
			pstmt.setString(2, member.getMemPw());
			pstmt.setString(3, member.getMemName());
			pstmt.setString(4, member.getMemBirth());
			pstmt.setString(5, member.getMemGender());
			pstmt.setString(6, member.getMemEmail());
			pstmt.setString(7, member.getMemPhone());
			
			result = pstmt.executeUpdate();
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		System.out.println("[5] db → dao : " + result);
		return result;
	}

// mLoing은 먼저 controller패키지에서 온 변수명으로 조건에 맞는 sql문을 넣어서 만들어준다 이때 db에 테이블이 생성되어 있어야한다!!!

pstmt = con.prepareStatement(sql);

 

// '?' 안에 데이터 넣기

 

pstmt.setString(1, memId);

pstmt.setString(2, memPw);

 

rs = pstmt.executeQuery();

rs로 묶어서 사용!!!

 

 

public String mLogin(String memId, String memPw) {
		System.out.println("[3] service -> dao >> memId : "+memId + ", memPw : " + memPw);
		String loginId =  null;
		
		
		// sql문 작성
		String sql = "SELECT * FROM MEMBERDTO WHERE MEMID=? AND MEMPW=?";
		
		
		try { //DB영역
			System.out.println("[4] service -> dao >> memId : "+memId + ", memPw : " + memPw);
			pstmt = con.prepareStatement(sql);
			
			// '?' 안에 데이터 넣기
			
			pstmt.setString(1, memId);
			pstmt.setString(2, memPw);
			
			rs = pstmt.executeQuery();
			
			if(rs.next()) { //id, pw일치 할 경우
				loginId = rs.getString(1);
			}
//			else {  //둘중하나라도 않을경우
//				loginId = null;
//			}
			
		} catch (SQLException e) {
			
			e.printStackTrace();
		}
		
		System.out.println("[5] db -> dao >> loginId :" + loginId);
		return loginId;
	}

//ArrayList<MemberDTO> mlist()은 먼저 controller패키지에서 온 변수명으로 조건에 맞는 sql문을 넣어서 만들어준다 이때 db에 테이블이 생성되어 있어야한다!!!

	public ArrayList<MemberDTO> mList() {
		System.out.println("[3] service -> dao");
		// 이미지 넣을 것을 준비 각각 하나씩 
		ArrayList<MemberDTO> memberList = new ArrayList<MemberDTO>();
		MemberDTO member; //선언만한 것!
		
		String sql ="SELECT * FROM MEMBERDTO";
		
		try {
			System.out.println("[4] service -> dao >>  memberList : "+memberList);
			pstmt = con.prepareStatement(sql);
			
			rs = pstmt.executeQuery(); //무조건 rs 선언!! 해서 실행~
			
			while(rs.next()) {
				member = new MemberDTO(); 
						
				member.setMemId(rs.getString(1));
				member.setMemPw(rs.getString(2));
				member.setMemName(rs.getString(3));
				member.setMemBirth(rs.getString(4));
				member.setMemGender(rs.getString(5));
				member.setMemEmail(rs.getString(6));
				member.setMemPhone(rs.getString(7));
				
				memberList.add(member);
				
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		System.out.println("[5] db -> dao >> memberList :" + memberList);
		return memberList;
	}

//mView은 먼저 controller패키지에서 온 변수명으로 조건에 맞는 sql문을 넣어서 만들어준다 이때 db에 테이블이 생성되어 있어야한다!!!

	public MemberDTO mView(String memId) {
		System.out.println("[3] service -> dao"+memId);
		MemberDTO member = null;
		
		String sql ="SELECT * FROM MEMBERDTO where memid=?";
		
		
		try {
			System.out.println("[4] service -> dao >>  memId : "+memId);
			pstmt = con.prepareStatement(sql);
			pstmt.setString(1, memId);
			
			rs = pstmt.executeQuery(); //무조건 rs 선언!! 해서 실행~
			
			if(rs.next() ) {
				member = new MemberDTO(); 
				member.setMemId(rs.getString(1));
				member.setMemPw(rs.getString(2));
				member.setMemName(rs.getString(3));
				member.setMemBirth(rs.getString(4));
				member.setMemGender(rs.getString(5));
				member.setMemEmail(rs.getString(6));
				member.setMemPhone(rs.getString(7));			
			}
			
		} catch (SQLException e) {
			
			e.printStackTrace();
		}
		
		System.out.println("[5] db -> dao >> member :" + member);
		
		
		return member;
	}

 


[3] dto파일 파악하기

//클래스 변수들의 getter,setter,toString()메소드 생성

package dto;

public class MemberDTO {
	
	// 클래스 3요소
	// [1] 필드
	// [2] 생성자
	// [3] 메소드
	
	// (1) joinForm에 있는 data 를 가지고 필드값을 선언하시오
	String memId;
	String memPw;
	String memName;
	String memBirth;
	String memGender;
	String memEmail;
	String memPhone;
	
	
	// (2) 필드 선언 후 getter, setter, toString() 메소드 생성
	public String getMemId() {
		return memId;
	}
	public void setMemId(String memId) {
		this.memId = memId;
	}
	public String getMemPw() {
		return memPw;
	}
	public void setMemPw(String memPw) {
		this.memPw = memPw;
	}
	public String getMemName() {
		return memName;
	}
	public void setMemName(String memName) {
		this.memName = memName;
	}
	public String getMemBirth() {
		return memBirth;
	}
	public void setMemBirth(String memBirth) {
		this.memBirth = memBirth;
	}
	public String getMemGender() {
		return memGender;
	}
	public void setMemGender(String memGender) {
		this.memGender = memGender;
	}
	public String getMemEmail() {
		return memEmail;
	}
	public void setMemEmail(String memEmail) {
		this.memEmail = memEmail;
	}
	public String getMemPhone() {
		return memPhone;
	}
	public void setMemPhone(String memPhone) {
		this.memPhone = memPhone;
	}
	
	@Override
	public String toString() {
		return "MemberDTO [memId=" + memId + ", memPw=" + memPw + ", memName=" + memName + ", memBirth=" + memBirth
				+ ", memGender=" + memGender + ", memEmail=" + memEmail + ", memPhone=" + memPhone + "]";
	}
	
	// (3) 필드 값을 바탕으로 MemberDTO 테이블 생성
	// MemberDTO테이블이 존재할지도 모르기 때문에 DROP 이후 생성
	// memBirth의 경우 데이터타입을 NVARCHAR2(20)으로 설정

}

[4] service파일 파악하기

//service파일은 대부분 DB연결과 dao에서 정보를 받아 수정한다.

//JoinService.java

package service;

import java.sql.Connection;

import dao.MemberDAO;
import dto.MemberDTO;

// util패키지의 JdbcUtil클래스에서 static으로 선언된 필드나 메소드 사용가능
import static util.JdbcUtil.*;

public class JoinService {

	public int mJoin(MemberDTO member) {
		System.out.println("[2] controller → service : " + member);
		
		// 메소드 생성시 가장 먼저 해야 할 것!
		int result = 0;
		
		// DB 접속
		/////////////////// 복사해서 사용 //////////////////////
		MemberDAO dao = new MemberDAO();
		Connection con = DBConnect();
		dao.setConnection(con);
		////////////////////////////////////////////////////
		
		result = dao.mJoin(member);
		System.out.println("[6] dao → service : " + result);
		
		if(result > 0) {
			commit(con);
		} else {
			rollback(con);
		}		
		
		close(con);
		return result;
	}
}

//ListService.java

package service;

import static util.JdbcUtil.DBConnect;
import static util.JdbcUtil.close;

import java.sql.Connection;
import java.util.ArrayList;

import dao.MemberDAO;
import dto.MemberDTO;

public class ListService {

	// 참조형 데이터 타입 지정
	public ArrayList<MemberDTO> mList() {
		System.out.println("[2] controller → service");
		
		ArrayList<MemberDTO> memberList =null;
		
		// DB 접속
		/////////////////// 복사해서 사용 //////////////////////
		MemberDAO dao = new MemberDAO();
		Connection con = DBConnect();
		dao.setConnection(con);
		////////////////////////////////////////////////////
		
		memberList = dao.mList();
		System.out.println("[6] dao → service : " + memberList);
		
		
		close(con);
		
		return memberList;
	}
}

//LoginService.java

package service;

import static util.JdbcUtil.DBConnect;
import static util.JdbcUtil.close;

import java.sql.Connection;

import dao.MemberDAO;

public class LoginService {
	public String mLogin(String memId, String memPw) {
		System.out.println("[2] controller -> service >> memId : " + memId + "memPw : " + memPw );
		String loginId = null;
	
		// DB 접속
		/////////////////// 복사해서 사용 //////////////////////
		MemberDAO dao = new MemberDAO();
		Connection con = DBConnect();
		dao.setConnection(con);
		////////////////////////////////////////////////////
		
		// id와 pw 정보를 확인하고 일치여부 판단 후 id 반환하기
		loginId = dao.mLogin(memId,memPw);
		System.out.println("[6] dao -> service >> loginId : "+loginId);

		close(con);
		
		return loginId;
	}
}

//ViewService.java

package service;

import static util.JdbcUtil.DBConnect;
import static util.JdbcUtil.close;

import java.sql.Connection;

import dao.MemberDAO;
import dto.MemberDTO;

public class ViewService {

	public MemberDTO mView(String memId) {
		System.out.println("[2] controller -> service >> memId : " + memId);
		MemberDTO member = null;
		
		
		// DB 접속
		/////////////////// 복사해서 사용 //////////////////////
		MemberDAO dao = new MemberDAO();
		Connection con = DBConnect();
		dao.setConnection(con);
		////////////////////////////////////////////////////
		
		 member = dao.mView(memId);
		System.out.println("[6] dao → service : " +  member);
		
		close(con);
		return member;
	}

}

[5] util파일 파악하기

// DB연결~~정보

package util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;

public class JdbcUtil {

	// JDBC방식 : context.xml 사용하는 방식이 안돼서 ORA-24080 오류
	public static Connection DBConnect() {

		// DB에 접속정보를 저장하기 위한 Connection타입의 객체 con 선언
		Connection con = null;

		// DB에 접속할 계정정보(아이디, 비밀번호)
		String user = "PC1";
		String password = "1111";

		// 접속할 DB의 주소 정보
		String url = "jdbc:oracle:thin:@localhost:1521:xe";

		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");

			con = DriverManager.getConnection(url, user, password);
			con.setAutoCommit(false);
			// System.out.println("DB접속 성공!");

		} catch (ClassNotFoundException e) {
			// ojdbc8 파일이 존재하지 않을 경우(오라클 드라이버를 찾지 못할 경우)
			System.out.println("DB접속 실패 : 드라이버 로딩 실패!");

			throw new RuntimeException(e);
		} catch (SQLException e) {
			// 오라클 접속정보가 틀렸을 경우(url, user, password 확인)
			System.out.println("DB접속 실패 : 접속정보 오류!");

			throw new RuntimeException(e);
		}

		return con;
	}

	// con close()
	public static void close(Connection con) {
		try {
			con.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	// commit
	public static void commit(Connection con) {
		try {
			con.commit();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	// rollback
	public static void rollback(Connection con) {
		try {
			con.rollback();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

}

관계상 정리(데이터이동)