2 분 소요

안녕하세요. Nerd-Lee입니다.
공부 내용은, 인프런 박매일님의 [NarP Series]MVC 프레임워크는 내 손에[나프1탄] 을 참고하였습니다.
MVC 1단계인, Servlet 환경으로만 만들어보고, MVC 2단계로 넘어가고
나중에는 Spring Framework를 사용하는 방식의 강의입니다.
MVC 1단계는, Controller + Model 만을 사용하는 방식입니다.

진도가 빠르게 나가지 않아, 중요하다고 생각하는 부분들만 작성할 예정입니다.


1. 회원정보 수정, 취소, 돌아가기 버튼 만들기

  • MemberContentController 에서 만들어준다.
  • 기본틀은 다음과 같다.
@WebServlet("/memberContent.do")
public class MemberContentController extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		// request로  파라미터 받아오기
		
		int number = Integer.parseInt(request.getParameter("num"));
		
		MemberDAO dao = new MemberDAO();
		
		MemberVO vo = dao.memberContent(number);
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		
		out.println("<html>");
		out.println("<head>");
		out.println("</head>");
		out.println("<body>");
		out.println("<form action='/memberUpdate.do' method='post'>");
		out.println("<input type='hidden'  name='number' value='" + vo.getId() + "'/>");
		out.println("<table border='2'>");
		// 회원 정보가 있다면
		if(vo != null) {
			out.println("<tr>");
			out.println("<td colspan='2'>" + vo.getName() + " 회원님의 상세보기 </td>");
			out.println("</tr>");
			out.println("<tr>");
			out.println("<td>번호</td>");
			out.println("<td>" + vo.getNumber() + "</td>");
			out.println("</tr>");
			out.println("<tr>");
			out.println("<td>아이디</td>");
			out.println("<td>" + vo.getId() + "</td>");
			out.println("</tr>");
			out.println("<tr>");
			out.println("<td>비밀번호</td>");
			out.println("<td>" + vo.getPassword() + "</td>");
			out.println("</tr>");
			out.println("<tr>");
			out.println("<td>이름</td>");
			out.println("<td>" + vo.getName() + "</td>");
			out.println("</tr>");
			out.println("<tr>");
			out.println("<td>나이</td>");
			out.println("<td><input type='text' name='age' value='" + vo.getAge() + "'/></td>");
			out.println("</tr>");
			out.println("<tr>");
			out.println("<td>이메일</td>");
			out.println("<td><input type='text' name='email' value='" + vo.getEmail() + "'/></td>");
			out.println("</tr>");
			out.println("<tr>");
			out.println("<td>전화번호</td>");
			out.println("<td><input type='text' name='phone' value='" + vo.getPhone() + "'/></td>");
			out.println("</tr>");
		}
		else {
			out.println("<tr>");
			out.println("<td>일치하는 회원이 없습니다.</td>");
			out.println("</tr>");
		}
		out.println("<tr>");
		out.println("<td colspan='2' align='center'>");
		out.println("<input type='submit' value='수정하기'/>");
		out.println("<input type='reset' value='취소'/>");
		out.println("<input type='button' value='돌아가기'/>");
		out.println("</td>");
		out.println("</tr>");
		out.println("</table>");
		out.println("</form>");
		out.println("</body>");
		out.println("</html>");
	}
}
  • 수정하기 버튼을 누르면, id와 input의 데이터인 나이, 이메일, 전화번호의 데이터를 같이 넘겨줘야한다.
  • form은, input의 데이터만 넘겨주기 때문에, id는 input이 아니다.
    그래서 input의 type중에 hidden이란 타입이 있는데, 눈에는 보이지 않으면서
    form 태그 안에 있으면 value의 값을 같이 넘겨줄 수 있게 된다.
  • memberUpdate.do 라는 요청을 받는 서블릿을 만들어보자.

2. 서블릿 페이지 만들기

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

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 1. 파라미터 수집(VO)
		
		request.setCharacterEncoding("utf-8");
		int number = Integer.parseInt(request.getParameter("number"));
		int age = Integer.parseInt(request.getParameter("age"));
		String email = request.getParameter("email");
		String phone = request.getParameter("phone");
		
		MemberVO vo = new MemberVO();
		vo.setNumber(number);
		vo.setAge(age);
		vo.setEmail(email);
		vo.setPhone(phone);
		
		MemberDAO dao = new MemberDAO();
		
		int success = dao.memberUpdate(vo);
		
		if(success > 0) {
			response.sendRedirect("/memberList.do");
		}
		else {
			throw new ServletException("not update");
		}
	}
}

3. DAO 메서드 추가하기

public int memberUpdate(MemberVO vo) {
		String SQL = "update member set age=?, email=?, phone=? where number=?";
		getConnect();
		int success = -1;

		try {
			ps = conn.prepareStatement(SQL);

			// 4. 파라미터에 값 추가하기
			ps.setInt(1, vo.getAge());
			ps.setString(2, vo.getEmail());
			ps.setString(3, vo.getPhone());
			ps.setInt(4, vo.getNumber());
			
			success = ps.executeUpdate();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			dbClose();
		}
		
		return success;
	}

4. 실행해보기

  • memberList.do 페이지로 가서, 아이디를 클릭하고 상세보기 페이지에서 input 데이터 값만 수정하고
    수정하기를 클릭하면 수정된 데이터가 잘 들어가고, 다시 memberList.do 페이지로 넘어오게 된다.
  • 이제 돌아가기 버튼에만, memberList.do 페이지로 돌아가게 만들어주면 된다.
  • 돌아가기 버튼은, 버튼이 아닌 anchor 태그로, href 태그에 붙여주자.
  • 이 시간에는 javascript를 사용하지 않고 고전적인 방법으로 만드는 강의이기 때문이다.


이 글이 도움이 되셨다면 댓글 부탁드립니다^^
다음 글로 찾아오겠습니다!