모도리는 공부중

21.03.05. SPRING - 회원가입, 회원삭제 구현 본문

K-디지털 빅데이터 분석서비스 개발자과정 20.11.02~21.04.12/JAVA

21.03.05. SPRING - 회원가입, 회원삭제 구현

공부하는 모도리 2021. 3. 5. 14:13
728x90
반응형

어제 수업에 이어서 진행.

 

kr.smhrd.controller 패키지에 MemberRegisterController 클래스를 생성한다.

package kr.smhrd.controller;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MemberRegisterController implements Controller {

	@Override
	public String requestHandler(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		return "/WEB-INF/view/memberRegister.html";	// 회원가입 페이지
	}

}

회원가입 페이지를 만든다. Controller를 상속받게 설정하고 MemberRegisterController에 마우스를 올려서 add를 클릭하여 오버라이드하고 회원가입페이지를 리턴해줄 수 있게 코드를 작성한다.

 

MemberFrontController

		} else if (command.equals("/memberRegister.do")) {
			// memberRegister.html로 가라고 경로만 알려주면 된다. 다른 업무처리는 없음.
			controller = new MemberRegisterController();
			nextView = controller.requestHandler(request, response);
			RequestDispatcher rd = request.getRequestDispatcher(nextView);
			rd.forward(request, response);
		}

이렇게 작성하고 보니 위에 있는 if절에 중복되는 코드가 보인다.

 

전체코드

package kr.smhrd.frontcontroller;

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 kr.smhrd.controller.Controller;
import kr.smhrd.controller.MemberInsertController;
import kr.smhrd.controller.MemberListController;
import kr.smhrd.controller.MemberRegisterController;

@WebServlet("*.do")
public class MemberFrontController extends HttpServlet {
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		// 1. 클라이언트의 요청정보를 확인하기
		String reqUrl = request.getRequestURI(); // 클라이언트가 요청한 url정보를 얻어와서 reqUrl변수에 담아준다. 
//		System.out.println(reqUrl);
		
		// Context Path = ?
		String ctx = request.getContextPath();
//		System.out.println(ctx); // Context Path인 /mvc만 잘라내기
		
		String command = reqUrl.substring(ctx.length()); // /memberList.do만 잘라오려면 어떻게 해야할까?
		System.out.println(command);
		
		// 2. 해당 요청에 따른 분기 작업(HandlerMapping) : if ~ else ~
		Controller controller;
		String nextView = null;
		if (command.equals("/memberList.do")) {
//			MemberListController controller = new MemberListController(); ← 이것의 부모타입인 Controller를 상단에 미리 선언
			controller = new MemberListController();
			nextView = controller.requestHandler(request, response);
			// forward(RequestDispatcher)
			RequestDispatcher rd = request.getRequestDispatcher(nextView);
			rd.forward(request, response);
		} else if (command.equals("/memberInsert.do")) {
//			MemberInsertController controller = new MemberInsertController();
			controller = new MemberInsertController();
		} else if (command.equals("/memberRegister.do")) {
			// memberRegister.html로 가라고 경로만 알려주면 된다. 다른 업무처리는 없음.
			controller = new MemberRegisterController();
			nextView = controller.requestHandler(request, response);
			RequestDispatcher rd = request.getRequestDispatcher(nextView);
			rd.forward(request, response);
		}
	}

}

이 중복을 해결해줘야하겠지?

 

일단 memberRegitster.html 먼저 WebContent - WEB-INF - view 경로에 생성해준다. 이제 테이블을 만들어서 해야할텐데.... 지금까지처럼 직접 만들어주지 않아도 된다.

 

www.tablesgenerator.com/

 

Create LaTeX tables online – TablesGenerator.com

You can import table data by uploading file in CSV format (Comma Separated Value). Most spreadsheet software, both desktop and online, allows to save tabular data in CSV format — it is usually available in the File menu under the name "Save As..." or "Ex

www.tablesgenerator.com

위의 링크는 테이블을 자동으로 생성해주는 코드를 가지고 있는 사이트다. 우리는 html 언어를 사용하고 있으므로 html을 선택한다.

Table - Set size를 이용하면 한글워드에서 표를 만들 때처럼 쉽게 만들 수 있다.

셀 병합도 쉽다. Cell - Merge cells 칸을 늘리고 싶다면 a나 b를 잡고 늘리면 또 가능하다. 

이렇게 만들어진 테이블은 하단에 위치한 코드표를 보면서 table 태그만 복사해서 붙여주면 사용이 가능하다. 그리고 선생님이 보내준 테이블 관련한 meta, css, script 태그를 복사붙여넣기한 후 테이블의 class를 table로 주면 아래처럼 깔끔하고 손쉬운 테이블 만들기를 할 수 있다.

코드는 다음과 같다.

<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
<title>Insert title here</title>
</head>
<body>
	<table class="table">
		<thead>
			<tr>
				<th class="tg-0pky">아이디</th>
				<th class="tg-0pky"></th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td class="tg-0pky">비밀번호</td>
				<td class="tg-0pky"></td>
			</tr>
			<tr>
				<td class="tg-0pky">이름</td>
				<td class="tg-0pky"></td>
			</tr>
			<tr>
				<td class="tg-0pky">나이</td>
				<td class="tg-0pky"></td>
			</tr>
			<tr>
				<td class="tg-0pky">전화번호</td>
				<td class="tg-0pky"></td>
			</tr>
			<tr>
				<td class="tg-0pky">이메일</td>
				<td class="tg-0pky"></td>
			</tr>
			<tr>
				<td class="tg-0pky"></td>
				<td class="tg-0pky"></td>
			</tr>
		</tbody>
	</table>
</body>
</html>

어째서인지 셀병합은 안되고 복사되어 왔다... 내가 직접 해주지 뭐..

 

이제 각각에 input태그를 작성해서 추가해준다. 버튼에도 속성을 추가한다.

<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
<title>Insert title here</title>
</head>
<body>
	<table class="table">
		<thead>
			<tr>
				<th class="tg-0pky">아이디</th>
				<th class="tg-0pky"><input type="text" name="id"></th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<td class="tg-0pky">비밀번호</td>
				<td class="tg-0pky"><input type="password" name="pass"></td>
			</tr>
			<tr>
				<td class="tg-0pky">이름</td>
				<td class="tg-0pky"><input type="text" name="name"></td>
			</tr>
			<tr>
				<td class="tg-0pky">나이</td>
				<td class="tg-0pky"><input type="text" name="age"></td>
			</tr>
			<tr>
				<td class="tg-0pky">전화번호</td>
				<td class="tg-0pky"><input type="text" name="phone"></td>
			</tr>
			<tr>
				<td class="tg-0pky">이메일</td>
				<td class="tg-0pky"><input type="text" name="email"></td>
			</tr>
			<tr>
				<td class="tg-0pky" colspan="2" align="center">
					<input type="submit" value="가입" class="btn btn-primary"/>
					<input type="reset" value="취소" class="btn btn-primary"/>
				</td>
			</tr>
		</tbody>
	</table>
</body>
</html>

다 만들어지면 다음과 같이 나온다. (버튼은 잘 가운데에 가있으니 걱정 no)

이제 폼을 만들어줄 것이다. 폼은 폼 안에 있는 정보를 하나로 묶어서 보내주는 역할을 한다. 폼을 사용하지 않는 방법은 Ajax를 이용하는 방식이 있다. 하지만 기본이 가장 중요하므로 우선은 standard로 먼저 해보도록 한다.

<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet"
	href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script
	src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script
	src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
<title>Insert title here</title>
</head>
<body>
	<form action="/mvc/memberInsert.do" method="post">
	<!-- /mvc 앞에는 항상 127.0.0.1:8081이 붙어있다는 전제가 있다. -->
	<!-- 많은 양의 데이터를 보낼 때는 post방식을 취한다. --> 
		<table class="table">
			<thead>
				<tr>
					<th class="tg-0pky">아이디</th>
					<th class="tg-0pky"><input type="text" name="id"></th>
				</tr>
			</thead>
			<tbody>
				<tr>
					<td class="tg-0pky">비밀번호</td>
					<td class="tg-0pky"><input type="password" name="pass"></td>
				</tr>
				<tr>
					<td class="tg-0pky">이름</td>
					<td class="tg-0pky"><input type="text" name="name"></td>
				</tr>
				<tr>
					<td class="tg-0pky">나이</td>
					<td class="tg-0pky"><input type="text" name="age"></td>
				</tr>
				<tr>
					<td class="tg-0pky">전화번호</td>
					<td class="tg-0pky"><input type="text" name="phone"></td>
				</tr>
				<tr>
					<td class="tg-0pky">이메일</td>
					<td class="tg-0pky"><input type="text" name="email"></td>
				</tr>
				<tr>
					<td class="tg-0pky" colspan="2" align="center">
						<input type="submit" value="가입" class="btn btn-primary" />
						<input type="reset" value="취소" class="btn btn-primary" />
					</td>
				</tr>
			</tbody>
		</table>
	</form>
</body>
</html>

자 이제 회원가입에 기입한 정보를 가지고 이 일을 대신 처리할 녀석에게 가보자.

package kr.smhrd.controller;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MemberInsertController implements Controller {

	@Override
	public String requestHandler(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		// 파라미터 수집(VO - value object)

		/*	지금까지 우리는 getParameter를 이용하여 각각의 name을 직접 하나씩 받아서 진행했다.
			하지만 앞으로 배울 spring framework를 이용하면 파라미터수집을 대신해준다. 파라미터 이름과 vo에 있는 value 이름이 같으면 자동으로 들어간다.
			이런 이유로 프레임워크는 유지보수 측면에서 상당히 유용하고 편리하다. 일단은 배운대로 파라미터를 직접 입력한다.	*/
		
//		frontcontroller가 할 일을 대신 해야하므로 request와 response를 받아야한다.
		String id = request.getParameter("id");
		String pass = request.getParameter("pass");
		String name = request.getParameter("name");
		int age = Integer.parseInt(request.getParameter("age"));
		String phone = request.getParameter("phone");
		String email = request.getParameter("email");
		Member VO vo = new MemberVO();
		vo.setId(id);
		
		return null;
	}

}

주석(/* */)에 있는 설명 잘 볼 것!

위처럼 코드를 작성하고 나면 Member VO에 빨간줄이 떴을 것이다. MemberVO에 기본 생성자를 추가한다.

public MemberVO() { } // defalut 생성자는 사용을 하든 안하든 반드시 만들어준다.

다시 Insert 컨트롤러로 돌아와서 VO를 자동완성해주면 빨간줄이 사라진다.

package kr.smhrd.controller;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import kr.smhrd.model.MemberDAO;
import kr.smhrd.model.MemberDAOImpl;
import kr.smhrd.model.MemberVO;

public class MemberIncertController implements Controller {

	@Override
	public String requestHandler(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		// 파라미터 수집(VO - value object)

		/*	지금까지 우리는 getParameter를 이용하여 각각의 name을 직접 하나씩 받아서 진행했다.
			하지만 앞으로 배울 spring framework를 이용하면 파라미터수집을 대신해준다. 파라미터 이름과 vo에 있는 value 이름이 같으면 자동으로 들어간다.
			이런 이유로 프레임워크는 유지보수 측면에서 상당히 유용하고 편리하다. 일단은 배운대로 파라미터를 직접 입력한다.	*/
		
//		frontcontroller가 할 일을 대신 해야하므로 request와 response를 받아야한다.
		String id = request.getParameter("id");
		String pass = request.getParameter("pass");
		String name = request.getParameter("name");
		int age = Integer.parseInt(request.getParameter("age"));
		String phone = request.getParameter("phone");
		String email = request.getParameter("email");
		
		MemberVO vo = new MemberVO();
		vo.setId(id);
		vo.setPass(pass);
		vo.setName(name);
		vo.setAge(age);
		vo.setPhone(phone);
		vo.setEmail(email);
		
		// Model 연동
		MemberDAO dao = new MemberDAOImpl();
		int cnt = dao.memberInsert(vo);
		
		
		return null;
	}

}

 

모델 연동을 하러 떠나자. db에 insert합시다.

 

MemberDAOImpl

	@Override
	public int memberInsert(MemberVO vo) {
		
		SqlSession session = sqlSessionFactory.openSession();
		int cnt = session.insert("memberInsert", vo); // ("sql명령문에 들어갈 것", 받아온 vo)  
		session.commit(); // 완료
		session.close(); // 반납
		return cnt;
	}

jdbc는 코드가 엄청 길었는데 코드가 왜 이리 간단해졌냐고? 이제 memberInsert를 mapper가 처리해줄테니까.

MemberDAOImpl에서 작성한 memberInsert를 연결해줄 MemeberMapper.xml. select태그로 감싸주었던 것처럼 똑같이 insert태그로 묶어서 진행한다. 값을 받아주는 것은 parameterType이며 이것 역시 정확한 경로를 작성하여 vo를 받아준다.

 

우리가 jdbc를 진행할 때는 ?로 진행을 했다면 여기서는 ?를 사용할 수 없다. 대신에 여기서는 #{ }를 이용하여 넣어줄 수 있다. 코드는 아래와 같다.

	<insert id="memberInsert" parameterType="kr.smhrd.model.MemberVO">
		insert into memtbl values(memtbl_num_seq.nextval,
		#{id},
		#{pass},
		#{name},
		#{age},
		#{phone},
		#{email}
		 )
	</insert>

다시 프론트컨트롤러로 돌아와서 마무리해준다. 한글을 넘겨받아 출력해야하므로 인코딩은 euc-kr로 변경

MemberFrontController

package kr.smhrd.frontcontroller;

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 kr.smhrd.controller.Controller;
import kr.smhrd.controller.MemberInsertController;
import kr.smhrd.controller.MemberListController;
import kr.smhrd.controller.MemberRegisterController;

@WebServlet("*.do")
public class MemberFrontController extends HttpServlet {
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		// POST방식으로 넘어오는 경우에는 한글값을 인코딩해줄 필요가 있다.
		request.setCharacterEncoding("euc-kr");
		// GET방식은 한글로 넘어오는 경우가 거의 없으므로 인코딩 필요가 X.
		
		// 1. 클라이언트의 요청정보를 확인하기
		String reqUrl = request.getRequestURI(); // 클라이언트가 요청한 url정보를 얻어와서 reqUrl변수에 담아준다. 
//		System.out.println(reqUrl);
		
		// Context Path = ?
		String ctx = request.getContextPath();
//		System.out.println(ctx); // Context Path인 /mvc만 잘라내기
		
		String command = reqUrl.substring(ctx.length()); // /memberList.do만 잘라오려면 어떻게 해야할까?
		System.out.println(command);
		
		// 2. 해당 요청에 따른 분기 작업(HandlerMapping) : if ~ else ~
		Controller controller;
		String nextView = null;
		if (command.equals("/memberList.do")) {
//			MemberListController controller = new MemberListController(); ← 이것의 부모타입인 Controller를 상단에 미리 선언
			controller = new MemberListController();
			nextView = controller.requestHandler(request, response);
			// forward(RequestDispatcher)
			RequestDispatcher rd = request.getRequestDispatcher(nextView);
			rd.forward(request, response);
		} else if (command.equals("/memberInsert.do")) {
//			MemberInsertController controller = new MemberInsertController();
			controller = new MemberInsertController(); // 일할 알바생 controller 호출
			nextView = controller.requestHandler(request, response); // controller를 일하게 시키고 일이 끝나면 nextView로 값을 넘긴다.
			response.sendRedirect(nextView);
		} else if (command.equals("/memberRegister.do")) {
			// memberRegister.html로 가라고 경로만 알려주면 된다. 다른 업무처리는 없음.
			controller = new MemberRegisterController();
			nextView = controller.requestHandler(request, response);
			RequestDispatcher rd = request.getRequestDispatcher(nextView);
			rd.forward(request, response);
		}
	}

}

회원가입창에서 회원가입을 진행하면 memberList.do로 넘어가서 회원가입한 회원 목록을 확인할 수 있다.

수많은 성공과 실패를 겪어서 회원정보가 많다..ㅋㅋㅋㅋㅋㅋ

이제 회원정보 맨 오른쪽에 삭제 열을 추가해서 삭제 버튼을 누르면 개개의 회원정보를 지울 수 있도록 구현해보자.

 

memberList.jsp

<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
  <script type="text/javascript">
  	function memberIn(){
  		location.href="/mvc/memberRegister.do";
  	}
  </script>
</head>
<body>
<table class="table">
	<tr>
		<td>번호</td>
		<td>아이디</td>
		<td>비밀번호</td>
		<td>이름</td>
		<td>나이</td>
		<td>전화번호</td>
		<td>이메일</td>
		<td>삭제</td>
	</tr>
	<c:forEach var="vo" items="${list }">
		<tr>
			<td>${vo.num}</td>
			<td>${vo.id}</td>
			<td>${vo.pass}</td>
			<td>${vo.name}</td>
			<td>${vo.age}</td>
			<td>${vo.phone}</td>
			<td>${vo.email}</td>
			<td><input type="button" value="삭제"></td>
		</tr>
	</c:forEach>
	<tr>
		<td colspan="8" align="right">
			<input type="button" value="회원가입" class="btn btn-primary" onclick="memberIn()">
		</td>
	</tr>
</table>
</body>
</html>

삭제에도 btn이라는 클래스를 지정하면

css가 적용된 예쁜 버튼을 만나볼 수 있다.

버튼 스타일은 이처럼 여러가지 색상을 가지고 있으므로 다양하게 직접 적용해보아도 좋다. 나는 default를 지정해주었다.

 

이제 여기서 삭제 버튼을 눌렀을 때 서버쪽에서 어떤걸 가지고 가서 삭제하면 좋을까? 우리는 이 삭제 때문에 처음부터 만들어준 것이 하나 있다. 바로 '번호'이다. 삭제 버튼을 눌렀을 때 onclick을 이용하여 memberDel()이라는 함수를 적용해준다. 그리고 head태그 안에 이 함수와 연관된 function을 추가한다.

<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
  <script type="text/javascript">
  	function memberIn(){
  		location.href="/mvc/memberRegister.do";
  	}
  	function memberDel(num){
  		location.href="/mvc/memberDelete.do?num="+num; // 쿼리스트링 방식을 이용하여 num값이 주소에 get방식으로 붙어 넘어가도록 지정한다.
  	}
  </script>
</head>
<body>
<table class="table">
	<tr>
		<td>번호</td>
		<td>아이디</td>
		<td>비밀번호</td>
		<td>이름</td>
		<td>나이</td>
		<td>전화번호</td>
		<td>이메일</td>
		<td>삭제</td>
	</tr>
	<c:forEach var="vo" items="${list }">
		<tr>
			<td>${vo.num}</td>
			<td>${vo.id}</td>
			<td>${vo.pass}</td>
			<td>${vo.name}</td>
			<td>${vo.age}</td>
			<td>${vo.phone}</td>
			<td>${vo.email}</td>
			<td><input type="button" value="삭제" class="btn btn-default" onclick="memberDel(${vo.num})"></td>
		</tr>
	</c:forEach>
	<tr>
		<td colspan="8" align="right">
			<input type="button" value="회원가입" class="btn btn-primary" onclick="memberIn()">
		</td>
	</tr>
</table>
</body>
</html>

만들어준 delete요청을 처리할 FrontController로 이동한다. else if로 memberList.do로 오면 처리할 공간을 설정하고 kr.smhrd.controller 패키지에 MemberDeleteController 클래스를 생성한다.

package kr.smhrd.controller;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import kr.smhrd.model.MemberDAO;
import kr.smhrd.model.MemberDAOImpl;

public class MemberDeleteController implements Controller{

	@Override
	public String requestHandler(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		int num = Integer.parseInt(request.getParameter("num"));
		
		MemberDAO dao = new MemberDAOImpl();
		int cnt = dao.memberDelete(num); // if else까지 모두 작성하였다면 이제 이 라인에 있는 method를 구현해줍시다.
		String nextPage = null;
		if (cnt > 0) { // 성공하면 다시 리스트 페이지로 이동
			nextPage = "/mvc/memberList.do";
		} else {
			throw new ServletException("not delete");
		}
		return nextPage;
	}

}

MemberDAOImpl에 delete 구현

	@Override
	public int memberDelete(int num) {

		SqlSession session = sqlSessionFactory.openSession();
		int cnt = session.delete("memberDelete", num);	// delete sql 만들러 떠납시다. → MemberMapper.xml
		session.commit();
		session.close();
		
		return cnt;
	}

MemberMapper.xml

	<delete id="memberDelete" parameterType="Integer">
		delete from memtbl where num = #{num}
	</delete> <!-- delete sql 작성이 끝났으면 다시 FrontController로 -->

MemberFrontController

		} else if (command.equals("/memberDelete.do")) {
			// memberDelete를 대신 처리할 POJO 생성
			controller = new MemberDeleteController();
			nextView = controller.requestHandler(request, response);
			response.sendRedirect(nextView);
		}

실행해보면 삭제도 아주 잘되는 것을 확인할 수 있다.

성공적-.

 

팀장님이 정리해준 흐름도!

리스트 페이지  에서 시작
▶▶회원가입 클릭
▶▶ location.href="/mvc_1/memberRegister.do"; 로 이동(프론트컨트롤러)
▶▶프론트컨트롤러에서 POJO 역할을 하는  [ controller = new MemberRegisterController(); ] 를 통해
▶▶ Register 에서 다시 Register.html 로 이동 후 회원가입 입력하기  ▶▶ 가입 클릭
▶▶insert컨트롤러 이동 
▶▶ DAOimpl  에서session.insert("memberInsert", vo);  vo 값 넘겨주고 , insert로 값을 받는다
▶▶맵퍼 에서 처리  후 DAOimpl 에 있는  Insert 로 실행 값 보내주기
▶▶ DAOimpl 에서 실행된 값을 insert컨트롤러 에 리턴해 주기 
▶▶넘어온 값  insert컨트롤러 에서 int cnt = dao.memberInsert(vo); 로 받기
▶▶결과에 따른 값 리턴해주기(프론트 컨트롤러) 
▶▶프론트컨트롤러로 이동 후  
▶▶리스트페이지 보여주기

 

끝.

728x90
반응형
Comments