[Servlet&JSP] MVC Model2 회원가입 핵심 코드 요약

KKS·2023년 8월 11일
post-thumbnail

1. memberRegister.html

 <form action="/MVC03/memberInsert.do" method="post">
    아이디 <input type="text" name="id"/>
    패스워드 <input type="password" name="pass"/>
    <input type="submit" class="btn btn-primary" value="회원가입"/>
    <input type="reset" class="btn btn-warning" value="취소"/>
 </form>
  • 클라이언트로부터 아이디, 패스워드 등 회원 정보를 입력받는다.
  • 입력된 데이터는 input태그의 name속성에 파라메터로 담긴다.
  • submit, reset은 form태그 내에서 동작한다.
  • 사용자가 회원가입을 클릭하면 memberInsertController에 post방식으로 요청한다.

2. MemberInsertController.java (Servlet)

@WebServlet("/memberInsert.do")
public class MemberInsertController extends HttpServlet {
	protected void service(HttpServletRequest request, HttpServletResponse response)
								throws ServletException, IOException {
		
		request.setCharacterEncoding("utf-8");
        
		String id = request.getParameter("id");
		String pass = request.getParameter("pass");
        
		MemberVO vo = new MemberVO();
		vo.setId(id);
		vo.setPass(pass);
        
		MemberDAO dao = new MemberDAO();
		int count = dao.memberInsert(vo);
        
		if(count > 0) {
			response.sendRedirect("memberList.do");
		} else {
			throw new ServletException("not insert");
		}
	}
}
  • 클라이언트의 요청이 들어오면 서블릿의 request, response 객체가 생성된다.
  • request.setCharacterEncoding("utf-8") : 클라이언트로부터 넘어온 한글데이터를 utf-8로 처리한다.
  • request.getParameter("name속성") : 클라이언트로부터 넘어온 데이터를 수집한다.
  • MemberVO객체를 생성하여 초기화하고, MemberDAO의 memberInsert메서드로 VO객체를 전달한다.
  • response.sendRedirect("memberList.do") : DB에 회원데이터를 추가하는 데 성공하면, MemberListController를 재요청한다.(Redirect)

3. MemberDAO의 memberInsert()메서드

public int memberInsert(MemberVO vo) {

		String SQL = "insert into member(id, pass) values(?,?)";
		getConnect();
		int count = -1;
        
		try {
			ps = conn.prepareStatement(SQL);
            
			ps.setString(1, vo.getId());
			ps.setString(2, vo.getPass());
			count = ps.executeUpdate();
            
		} catch (SQLException e) {
			e.printStackTrace();
            
		} finally {
			dbClose();
		}
        
		return count;
	}
  • 미완성 SQL문을 작성하고, 넘어온 MemberVO객체의 데이터를 추출하여 SQL문을 완성한다.
  • ps.executeUpdate() : DB에 완성된 쿼리문을 전송한다.

4. MemberListController.java (Servlet)

@WebServlet("/memberList.do")
public class MemberListController extends HttpServlet {

	protected void service(HttpServletRequest request, HttpServletResponse response)
												throws ServletException, IOException {
                                                
		MemberDAO dao = new MemberDAO();
		ArrayList<MemberVO> list = dao.memberList();
        
		request.setAttribute("list", list);
        
		RequestDispatcher rd = request.getRequestDispatcher("member/memberList.jsp");
		rd.forward(request, response);
  • MemberInsertController에서 DB에 회원을 저장하는 데 성공하면, Redirect로 MemberListController를 요청했다.
  • dao.memberList() : DB에 저장된 모든 회원을 가져온다.
  • request.setAttribute("list", list) : list객체를 바인딩한다.
  • rd.forward(request, response) : memberList.jsp로 포워딩한다.
  • 포워딩을 했기 때문에 memberList.jsp에서 list를 사용할 수 있다.

5. MemberDAO의 memberList()메서드

public ArrayList<MemberVO> memberList() {
		String SQL = "select * from member";
		getConnect();
		ArrayList<MemberVO> list = new ArrayList<MemberVO>();
        
		try {
			ps = conn.prepareStatement(SQL);
			rs = ps.executeQuery();

			while(rs.next()) {
				String id = rs.getString("id");
				String pass = rs.getString("pass");
                
				MemberVO vo = new MemberVO(id, pass);
				list.add(vo);
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return list;
		
	}
  • SQL문을 DB에 전달하여 모든 회원을 조회한다.
  • 모든 MemberVO객체를 ArrayList에 담아 반환한다.

6. memberList.jsp (view)

<% ArrayList<MemberVO> list = (ArrayList<MemberVO>)request.getAttribute("list"); %>

								...중략...
                                
		<%for(MemberVO vo : list) {  %>
			<%=vo.getId()%>
			<%=vo.getPass()%>
		<% } %>
        						...이하 생략...
  • request.getAttribute("list") : 객체바인딩 된 list를 가져온다.
  • 반복문으로 list에 담긴 MemberVO객체의 여러 데이터를 출력하여 클라이언트에 응답한다.

참고) 위의 MVC Model2를 MVC Model1 방식으로 개발했다면?

  • 가장 주요한 차이점은 Controller(Servlet)와 View(JSP)의 연동의 유무이다.
  • 클라이언트의 요청에 결과화면을 응답할 때, Model1방식은 Controller(Servlet)와 View(JSP)의 연동 없이 Controller에서 View기능까지 처리한다. 따라서 코드가 복잡하다는 단점이 있다.
  • Model2방식은 Controller(Servlet)와 View(JSP)가 연동하여 JSP에 View기능을 명확하게 부여한다. 보다 구조화된 방식으로 프로그래밍을 하기 때문에 Model2 방식을 선호한다.
profile
공부하고 이해한 내용들을 직접 그림과 표를 그리면서 정리해보는 공간입니다.🤗

0개의 댓글