본문 바로가기
Java

MVC Architecture Model 1 연습예제

by WaterPunch 2021. 4. 23.

1. SQL로 Table 생성 및 데이터 추가

//테이블 생성 SQL
CREATE TABLE member(
	id VARCHAR2(100) PRIMARY KEY,
	password VARCHAR2(100) NOT NULL,
	name VARCHAR2(100) NOT NULL,
	address VARCHAR2(100)
)

// 데이터 추가 SQL
INSERT INTO member(id,password,name,address) VALUES('logitech','m331','로지텍','강남');
INSERT INTO member(id,password,name,address) VALUES('samsung','galaxy','삼성','영통');

SELECT COUNT(*) FROM member; // 멤버 숫자 세는 SQL
SELECT * FROM member; // 모든 멤버 정보 조회 SQL

 

2. MVC 중 Model 부분 작성

package org.waterpunch.praticeMVC.model;

public class MemberVO {
	private String id;
	private String password;
	private String name;
	private String address;
	public MemberVO() {
		super();
		// TODO Auto-generated constructor stub
	}
	public MemberVO(String id, String password, String name, String address) {
		super();
		this.id = id;
		this.password = password;
		this.name = name;
		this.address = address;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	@Override
	public String toString() {
		return "MemberVO [id=" + id + ", password=" + password + ", name=" + name + ", address=" + address + "]";
	}
	
}
package org.waterpunch.praticeMVCmodel1.model;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
// DAO : Data Access Object 데이터베이스 연동 로직을 정의한 객체
public class MemberDAO {
	private String driver="oracle.jdbc.OracleDriver";
	private String url="jdbc:oracle:thin:@127.0.0.1:1521:xe";
	private String user="scott";
	private String pass="tiger";
	public MemberDAO() throws ClassNotFoundException {
		Class.forName(driver);
	}
	public void closeAll(PreparedStatement pstmt,Connection con) throws SQLException {
		if(pstmt!=null)
			pstmt.close();
		if(con!=null)
			con.close();
	}
	//메서드 오버로딩 
	public void closeAll(ResultSet rs,PreparedStatement pstmt,Connection con) throws SQLException {
		if(rs!=null)
			rs.close();
		closeAll(pstmt, con);
	}
    // 멤버 숫자 세는 메서드
	public int getTotalMemberCount() throws SQLException {
		int count=0;
		Connection con=null;
		PreparedStatement pstmt=null;
		ResultSet rs=null;
		try {
			con=DriverManager.getConnection(url, user, pass);
			String sql="select count(*) from member";
			pstmt=con.prepareStatement(sql);
			rs=pstmt.executeQuery();
			if(rs.next())
				count=rs.getInt(1);
		}finally {
			closeAll(rs, pstmt, con);
		}
		return count;
	}
    // ID를 통해서 멤버 정보 찾는 메서드
	public MemberVO findMemberById(String id) throws SQLException{
		MemberVO vo=null;
		Connection con=null;
		PreparedStatement pstmt=null;
		ResultSet rs=null;
		try {
			con=DriverManager.getConnection(url, user, pass);
			String sql="select name,address from member where id=?";
			pstmt=con.prepareStatement(sql);
			pstmt.setString(1, id);
			rs=pstmt.executeQuery();
			if(rs.next()) {
				vo=new MemberVO(id,null,rs.getString(1),rs.getString(2));
			}
		}finally {
			closeAll(rs, pstmt, con);
		}
		return vo;
	}
}

 

3. JSP 생성 (View + Controller)

<!-- 인덱스 생성 -->

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Model 1</title>
</head>
<body>
<h4>Model 1 Architecture(설계양식) 테스트</h4>
<ul>
	<li><a href="AllMemberCount.jsp">총회원수 조회</a></li>
	<li><a href="findMemberById-form.jsp">회원검색</a>
</ul>
<hr>
<img src="model1.png" width="600">
</body>
</html>
<!-- 회원수 세는 Form -->

<%@page import="org.waterpunch.praticeMVCmodel1.model.MemberDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>총회원수</title>
</head>
<body bgcolor="yellow">
<%    //초기 방식에 비해 jsp 의 코드량이 감소 , 데이터 액세스 로직 업데이트시 영향이 없다 
		MemberDAO dao=new MemberDAO();
		int count=dao.getTotalMemberCount();
%>
<h4>Model1 설계방식 - 총회원수 <%=count%> 명</h4>
</body>
</html>
<!-- 아이디를 통해 정보검색 하는 Form -->

<%@page import="org.waterpunch.praticeMVCmodel1.model.MemberDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원검색화면</title>
</head>
<body bgcolor="lime">
<%    
	MemberDAO dao=new MemberDAO();
	int count=dao.getTotalMemberCount();
%> 총회원수 <%=count %>명
<hr>
<form action="findMemberById-action.jsp">
아이디 <input type="text" name="memberId" required="required">
<button type="submit">검색</button>
</form>
</body>
</html>
<!-- 위의 폼을 통해 결과값을 반환하는 Form -->

<%@page import="org.waterpunch.praticeMVCmodel1.model.MemberVO"%>
<%@page import="org.waterpunch.praticeMVCmodel1.model.MemberDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>findMemberById-action</title>
</head>
<body>
<%--		
	클라이언트로부터 아이디를 전달받는다 
	MemberDAO 의 findMemberById(id) 를 이용해 회원정보를 검색한다 
	회원정보가 존재하면 
	아이디 : samsung
	이름 : 삼성
	주소 : 영통 
	아이디에 대한 회원정보가 존재하지 않으면 
	javascript alert으로 xx 아이디에 대한 회원정보가 없습니다 
	location.href="findMemberById-form.jsp"; 로 이동시킨다 
 --%>
 <%
 	String id=request.getParameter("memberId");
 	MemberDAO dao=new MemberDAO();
 	MemberVO vo=dao.findMemberById(id);
 	if(vo==null){
 %>	
 <script type="text/javascript">
 	alert("<%=id%>아이디에 대한 회원정보가 없습니다!");
 	location.href="findMemberById-form.jsp";
 </script>
 
 <% }else{ %>
 		아이디 : <%=id %><br>
 		이름 : <%=vo.getName() %><br>
 		주소 : <%=vo.getAddress() %>
 <% } %>
</body>
</html>

 

모델1 구조는 사용자의 요청을 JSP가 전부 다 처리

웹브라우저가 사용자의 요청을 받은 JSP는 자바빈 or 서비스 클래스를 사용하여 웹브라우저가 요청한 작업을 처리

 

장점 : 개발속도가 빠르다 단점 : 유지보수 측면에서 불리
규모가 작고 개발 후에 유지보수가 거의 필요없는 프로젝트에 적합

 

반응형

'Java' 카테고리의 다른 글

[Spring] Spring MVC?  (0) 2021.06.02
DBCP (Database Connection Pool) 연습  (1) 2021.04.25
MVC Architecture Model 2 연습예제  (0) 2021.04.25
Singleton Design Pattern(싱글톤 디자인 패턴)  (0) 2021.04.23
MVC Architecture ( Model 1 / Model 2 )  (0) 2021.04.22

댓글