본문 바로가기
개발/MVC 패턴

MVC 패턴 예제

by 두리두리안 2021. 3. 26.

DTO란 

DTO는 데이터를 담아 전송하는 객체이다.

DTO클래스에는 데이터를 저장할 getter(), setter() 같은 메소드가 필요하다. 

이러한 MVC패턴은 전 영역에서 동작한다. 

모델은 자체로 DTO를 포함한다고 할 수 있으며 DTO는 모델의 DAO에서 사용한다. 

DAO가 처리한 결과는 ViewPage로 DTO가 보내서 getter()메소드에 의해 출력 된다.

DAO란

DTO에 담겨서 넘어온 데이터들을 실제로 처리하는 객체이다. 여기서는 DBMS로 저장, 수정, 삭제 등의 작업을 처리. 모델에서 독립적으로 처리하게 하는 것이 좋으며 DAO 클래스의 메소드는 당연히 DTO를 매개 변수로 하여 각각의 데이터를 처리하게 된다. 

 

1. 뷰페이지 작성

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원가입 페이지</title>
</head>
<body>
    <div>
	<form method="post" action="mvcLast_MemberProcess">
		 <h3>회원가입</h3>
		 <div>
		 이름: <input type="text" name="name" size="20%"/>	
		 </div> 
		 <br/>
		 <div>
		 메일: <input type="email" name="email" size="20%"/>
		 </div>
		 <br/>
		 <div>
		 비번: <input type="password" name="password" size="21%"/>
		 </div>
		 <br/>
		 <input type="submit" value="회원가입"/>
	</form>
    </div>
</body>
</html>

2. DTO 클래스 작성

package mvc_last.models;

import java.io.Serializable;

public class mvcLast_MemberDTO implements Serializable{
	private int num;
	private String name;
	private String email;
	private String password;
	public int getNum() {
		return num;
	}
	public void setNum(int num) {
		this.num = num;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	
	
}

3. DMBS의 테이블 생성

 

사용할 database및 table을 생성

package mvc_last.models;
import  java.sql.*;

import javax.servlet.ServletException;

public class mvcLast_MemberDAO {
	private Connection conn;
	
	public mvcLast_MemberDAO() throws ServletException{
		try {
			Class.forName("org.gjt.mm.mysql.Driver");
		}catch(ClassNotFoundException ex){
			throw new ServletException("드라이브 오류");
		}
		
		String url = "jdbc:mysql://localhost:3306/mvc?characterEncoding=euckr&useUnicode=true&mysqlEncoding=euckr&useSSL=false";
		String id ="root";
		String pw ="00000000";
		
		try {
			conn = DriverManager.getConnection(url,id,pw);
		}catch(SQLException ex) {
			throw new ServletException("접속 오류");
		}
	}
	public boolean registerMember(mvcLast_MemberDTO dto) throws ServletException{
		String query ="insert into mvc_member values (null,?,?,?)";
		
		try {
			PreparedStatement pstmt = conn.prepareStatement(query);
			pstmt.setString(1, dto.getName());
			pstmt.setString(2, dto.getEmail());
			pstmt.setString(3, dto.getPassword());
			pstmt.executeUpdate();
			pstmt.close();
		}
		catch(SQLException ex) {
			throw new ServletException("등록 실패");
		}finally {
			this.close();
		}
		return true;
	}
	private void close() {
		try {
			if(conn != null && !conn.isClosed()) conn.close();
		}catch(SQLException ex) {conn = null;}
	}
}

4. 서블릿 클래스 작성

package mvc_last.controllers;

import java.io.IOException;

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

import mvc_last.models.*;

public class mvcLast_MemberProcess extends HttpServlet {

	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		request.setCharacterEncoding("utf-8");
		String name = request.getParameter("name");
		String email = request.getParameter("email");
		String password = request.getParameter("password");
		
		mvcLast_MemberDTO dto = new mvcLast_MemberDTO();
		dto.setName(name);
		dto.setEmail(email);
		dto.setPassword(password);
		
		mvcLast_MemberDAO dao = new mvcLast_MemberDAO();
		boolean bool = dao.registerMember(dto);
		
		if(bool) {
			response.sendRedirect("./mvcLast_Success.html");
		}
	}
}

5. 뷰 페이지2  작성

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	저장에 성공 했습니다.
</body>
</html>

6. web.xml 수정 

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>mvc_last</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
    <servlet>
  	<servlet-name>mvcLast_MemberProcess</servlet-name>
  	<servlet-class>
  		mvc_last.controllers.mvcLast_MemberProcess
  	</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>mvcLast_MemberProcess</servlet-name>
  	<url-pattern>/mvcLast_MemberProcess</url-pattern>
  </servlet-mapping>
  
</web-app>

<servlet>와 <sevlet-mapping>코드 부분을 추가 한것이다. 

 

6. 결과