23/03/15(MVC+JSP)

조영문·2023년 3월 15일
0

JSP

목록 보기
1/13

MVC 패턴

MVC패턴은 디자인패턴 중 하나입니다.
디자인 패턴이란 프로그램이나 어떤 특정한 것을 개발하는 중에 발생했던 문제점들을 정리해서 상황에 따라 간편하게 적용해서 쓸 수 있는 것을 정리하여 특정한 "규약"을 통해 쉽게 쓸 수 있는 형태로 만든 것을 말합니다.
어떠한 앱을 만든다고 한다면..그 앱을 유지보수를 하고 또 다른이들과 공유를 하면서 만들어야 할 떄 좀 더 쉽고 깔끔하게 만들 수 있는 방법을 우리는 고안해야 됩니다. 만약 이러한 방법들을 명확히 하지 않는다면.. 우리는 클래스 함수들을 일일히 다 만들어야 하게 될 겁니다.
라이브러리나 프레임워크가 그에 따른 예입니다.
Model, View, Controller
Controller을 조작하면 Controller은 Model을 통해서 데이터를 가져오고 그 정보를 바탕으로 시각적인 표현을 담당하는 View를 0제어해서 사용자에게 전달한다.

실제 구조는

Model

애플리케이션의 정보, 데이터를 나타냅니다. 데이터베이스, 처음의 정의하는 상수, 초기화값, 변수 등을 뜻합니다.

  • 사용자가 편집하길 원하는 모든 데이터를 가지고 있어야 한다.
  • 뷰나 컨트롤러에 대해서 어떤 정보도 알지 말아야 한다.
  • 변경이 일어나면 변경 통지에 대한 처리 방법을 구현해야만 한다.

View

input 텍스트, 체크박스 항목 등과 같은 사용자 인터페이스 요소를 나타냅니다. 즉, 데이터 및 객체의 입력, 그리고 보여주는 출력을 담당합니다.

  • 모델이 가지고 있는 정보를 따로 저장해서는 안된다.
  • 모델이나 컨트롤러와 같이 다른 구성요소들을 몰라야 된다.
  • 변경이 일어나면 변경통지에 대한 처리방법을 구현해야만 한다.

Controller

데이터와 사용자인터페이스 요소들을 잇는 다리역할을 합니다. 즉, 사용자가 데이터를 클릭하고, 수정하는 것에 대한 "이벤트"들을 처리하는 부분을 뜻합니다.

  • 모델이나 뷰에 대해서 알고 있어야 한다.
  • 모델이나 뷰의 변경을 모니터링 해야 한다.
    서로 분리되어 각자의 역할에 집중할 수 있게끔하여 개발을 하고 그렇게 애플리케이션을 만든다면, 유지보수성, 애플리케이션의 확장성, 그리고 유연성이 증가하고, 중복코딩이라는 문제점 또한 사라지게 되는 것입니다. 그러기 위한 MVC패턴입니다.

team Example(JSP) 예제

teamInsert.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Team Mgr</title>
<link href="style.css" rel="stylesheet" type="text/css">
<script type="text/javascript">
function check() {
	f = document.frm;
	if(f.name.value==""){
		alert("이름을 입력하세요");
		f.name.focus();
		return; //함수 빠져나옴
		}
	if(f.city.value==""){
		alert("사는곳을 입력하세요");
		f.city.focus();
		return; //함수 빠져나옴
		}
	if(f.age.value==""){
		alert("나이를 입력하세요");
		f.age.focus();
		return; //함수 빠져나옴
		}
	if(f.team.value==""){
		alert("팀을 입력하세요");
		f.team.focus();
		return; //함수 빠져나옴
		}
	f.submit();//제출
}

function check2() {
	document.frm.action = "teamInsertProc2.jsp";
	document.frm.submit(); 
}
</script>
</head>
<body>
<div align = "center">
<h1>Team Insert</h1>
<form name="frm" method="post" action="teamInsertProc.jsp">
<table border="1">
<tr>
	<td width="50" align="center">이름</td>
	<td width="150"><input name="name" value="홍길동"></td>
</tr>
<tr>
	<td align="center">사는곳</td>
	<td><input name="city" value="부산"></td>
</tr>
<tr>
	<td align="center">나이</td>
	<td ><input name="age" value="27"></td>
</tr>
<tr>
	<td align="center">팀명</td>
	<td><input name="team" value="산적"></td>
</tr>
<tr>
	<td align="center" colspan="2">
		<input type="button" value="SAVE" onclick="check()">
		<input type="button" value="SAVE2" onclick="check2()">
	</td>
</tr>
</table>
</form><p>
<a href="teamList.jsp">LIST</a>
</div>
</body>
</html>

teamList.jsp

<%@page import = "ch09.TeamBean" %>
<%@page import = "java.util.Vector" %>
<%@page contentType="text/html; charset=UTF-8"%>
<jsp:useBean id="mgr" class="ch09.TeamMgr"/>

<%
		Vector<TeamBean> vlist = mgr.listTeam();
		//out.println(vlist.size());
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Team Mgr</title>
<link href="style.css" rel="stylesheet" type="text/css">
</head>
<body>
<div align="center">
<h1>Team List</h1>
<table border="1">
<tr>
			<th>번호</th>
			<th>이름</th>
			<th>사는곳</th>
			<th>나이</th>
			<th>팀명</th>
	</tr>
	<%
			for(int i=0;i<vlist.size();i++)
			{
				TeamBean bean = vlist.get(i);
	%>
	<tr align = "center">
	<td><%=bean.getNum() %></td>
	<td>
	<a href ="teamRead.jsp?num=<%=bean.getNum()%>"><%=bean.getName() %>
	</td>
	<td><%=bean.getCity() %></td>
	<td><%=bean.getAge() %></td>
	<td><%=bean.getTeam() %></td>
	</tr>	
	<%
			}//for
	%>
</table><p>
<a href="teamInsert.html">INSERT</a>
</div>
</body>
</html>

teamRead.jsp

<%@page import="ch09.TeamBean"%>
<%@page import="ch09.TeamMgr"%>
<%@page import="ch09.MyUtil"%>
<%@page contentType="text/html; charset=UTF-8"%>
<%
		//teamList.jsp에서 num값을 넘겨받아 처리해야함
		int num = 0;
		TeamBean bean = null;
		if(request.getParameter("num")==null){
			//num값이 넘어오지 않음
			response.sendRedirect("teamList.jsp");
			return;
		}else if(!MyUtil.isNumeric(request.getParameter("num"))){
			//num이 숫자 형태로 넘어오지 않음
			response.sendRedirect("teamList.jsp");
			return;
		}else{
			num = MyUtil.parseInt(request, "num");
			TeamMgr mgr = new TeamMgr();
			bean = mgr.getTeam(num);
		}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Team Mgr</title>
<link href="style.css" rel="stylesheet" type="text/css">
</head>
<body>
<div align="center">
<h1>Team Read</h1>
<table border="1">
	<tr>
		<td>번호</td>
		<td><%=num%></td>
	</tr>
	<tr>
		<td>이름</td>
		<td><%=bean.getName()%></td>
	</tr>
	<tr>
		<td>사는곳</td>
		<td><%=bean.getCity()%></td>
	</tr>
	<tr>
		<td>나이</td>
		<td><%=bean.getAge()%></td>
	</tr>
	<tr>
		<td>팀명</td>
		<td><%=bean.getTeam()%></td>
	</tr>
</table><p/>
<a href="teamList.jsp">LIST</a>&nbsp;&nbsp;
<a href="teamInsert.html">INSERT</a>&nbsp;&nbsp;
<a href="teamUpdate.jsp?num=<%=num %>">UPDATE</a>&nbsp;&nbsp;
<a href="teamDelete.jsp?num=<%=num %>">DELETE</a>&nbsp;&nbsp;
</div>
</body>
</html>

teamInsertProc.jsp

<!-- ch09/teamInsertProc.jsp -->
<%@page import="ch09.TeamMgr"%>
<%@page import="ch09.TeamBean"%>
<%@ page contentType="text/html; charset=UTF-8"%>
<%
	TeamMgr mgr = new TeamMgr();
	TeamBean bean = new TeamBean();
	
	String name = request.getParameter("name");
	String city = request.getParameter("city");
	int age = Integer.parseInt(request.getParameter("age"));
	String team = request.getParameter("team");
	
	bean.setName(name);
	bean.setCity(city);
	bean.setAge(age);
	bean.setTeam(team);
	
	mgr.insertTeam(bean);
	response.sendRedirect("teamList.jsp");
%>

teamInsertProc2.jsp

<!-- ch09/teamInsertProc2.jsp -->
<%@page contentType="text/html; charset=UTF-8"%>
<jsp:useBean id="bean" class="ch09.TeamBean"/>
<jsp:useBean id="mgr" class="ch09.TeamMgr"/>
<jsp:setProperty property="*" name="bean"/>
<%
	mgr.insertTeam(bean); //저장
	response.sendRedirect("teamList.jsp");
%>

teamUpdate.jsp

<%@page import="ch09.MyUtil"%>
<%@page import="ch09.TeamBean"%>
<%@page contentType="text/html; charset=UTF-8"%>
<jsp:useBean id="mgr" class="ch09.TeamMgr"/>
<%
	int num = MyUtil.parseInt(request,"num");
	TeamBean bean = mgr.getTeam(num);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Team Mgr</title>
<link href="style.css" rel="stylesheet" type="text/css">
</head>
<body>
<div align="center">
<h1>Team Update</h1>
<form name="frm" method="post" action="teamUpdateProc.jsp">
<table border="1">
<tr>
	<td width="50" align="center">이름</td>
	<td width="150"><input name="name" value="<%=bean.getName()%>"></td>
</tr>
<tr>
	<td width="50" align="center">번호</td>
	<td width="150"><input name="num" value="<%=num%>" readonly></td>
</tr>
<tr>
	<td align="center">사는곳</td>
	<td><input name="city" value="<%=bean.getCity()%>"></td>
</tr>
<tr>
	<td align="center">나이</td>
	<td ><input name="age" value="<%=bean.getAge()%>"></td>
</tr>
<tr>
	<td align="center">팀명</td>
	<td><input name="team" value="<%=bean.getTeam()%>"></td>
</tr>
<tr>
	<td align="center" colspan="2">
		<%-- <input type="hidden" name="num" value="<%=bean.getNum()%>"> --%>
		<input type="submit" value="UPDATE">
	</td>
</tr>
</table>
</form><p>
<a href="teamRead.jsp?num=<%=num%>">READ</a>
</div>
</body>
</html>

teamUpdateProc.jsp

<!-- ch09/teamUpdateProc.jsp -->
<%@ page contentType="text/html; charset=UTF-8"%>
<jsp:useBean id="mgr" class="ch09.TeamMgr"/>
<jsp:useBean id="bean" class="ch09.TeamBean"/>
<jsp:setProperty property="*" name="bean"/>
<%
	boolean result = mgr.updateTeam(bean);
	out.print(result);
%>

teamDelete.jsp

<%@ page contentType="text/html; charset=UTF-8"%>
<jsp:useBean id="mgr" class="ch09.TeamMgr"/>
<%
	int num = Integer.parseInt(request.getParameter("num"));
	mgr.deleteTeam(num);
	response.sendRedirect("teamList.jsp");
%>

TeamMgr.java

package ch09;

import java.awt.font.GlyphVector;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Vector;

public class TeamMgr {

	private DBConnectionMgr pool;
	//생성자
	public TeamMgr() {
		pool = DBConnectionMgr.getInstance();
	}
	
	//리스트
	public Vector<TeamBean> listTeam(){
		Connection con = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		String sql = null;
		Vector<TeamBean> vlist = new Vector<TeamBean>();
		try {
			con = pool.getConnection();
			sql = "select * from tblTeam";
			pstmt = con.prepareStatement(sql);
			rs = pstmt.executeQuery();
			while(rs.next()) {
				TeamBean bean = new TeamBean();
				bean.setNum(rs.getInt("num"));
				bean.setName(rs.getString("name"));
				bean.setCity(rs.getString("city"));
				bean.setAge(rs.getInt("age"));
				bean.setTeam(rs.getString("team"));
				vlist.addElement(bean);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			pool.freeConnection(con, pstmt, rs);
		}
		return vlist;
	}
	//저장
	public void insertTeam(TeamBean bean) {
		Connection con = null;
		PreparedStatement pstmt = null;
		String sql = null;
		try {
			con = pool.getConnection();
			sql = "INSERT INTO tblteam "
				+ "VALUES(NULL,?,?,?,?)";
			pstmt = con.prepareStatement(sql);	
			pstmt.setString(1, bean.getName());
			pstmt.setString(2, bean.getCity());
			pstmt.setInt(3, bean.getAge());
			pstmt.setString(4, bean.getTeam());
			pstmt.executeUpdate();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			pool.freeConnection(con, pstmt);
		}
		return;
	}
	//한개의 레코드 가져오기
	public TeamBean getTeam(int num) {
		Connection con = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		String sql = null;
		TeamBean bean = new TeamBean();
		try {
			con = pool.getConnection();
			sql = "SELECT *"
				+ " FROM tblteam "
				+ " WHERE num=?";
			pstmt = con.prepareStatement(sql);
			pstmt.setInt(1, num);
			rs = pstmt.executeQuery();
			while(rs.next()){
				bean.setName(rs.getString("name"));
				bean.setCity(rs.getString("city"));
				bean.setAge(rs.getInt("age"));
				bean.setTeam(rs.getString("team"));
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			pool.freeConnection(con, pstmt, rs);
		}
		return bean;
	}
	//수정
	public boolean updateTeam(TeamBean bean) {
		Connection con = null;
		PreparedStatement pstmt = null;
		String sql = null;
		boolean flag = false;
		try {
			con = pool.getConnection();
			sql = "UPDATE tblteam "
				+ " SET name = ?, city = ?,"
				+ "age = ?, team = ? "
				+ " WHERE num= ? ";
			pstmt = con.prepareStatement(sql);
			pstmt.setString(1, bean.getName());
			pstmt.setString(2, bean.getCity());
			pstmt.setInt(3, bean.getAge());
			pstmt.setString(4, bean.getTeam());
			pstmt.setInt(5, bean.getNum());
			int cnt = pstmt.executeUpdate();
			if(cnt==1) flag = true;
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			pool.freeConnection(con, pstmt);
		}
		
		return flag;
	}
	//삭제
	public void deleteTeam(int num) {
		Connection con = null;
		PreparedStatement pstmt = null;
		String sql = null;
		try {
			con = pool.getConnection();
			sql = "DELETE FROM tblteam "
				+ " WHERE num=?";
			pstmt = con.prepareStatement(sql);
			pstmt.setInt(1, num);
			pstmt.executeUpdate();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			pool.freeConnection(con, pstmt);
		}
	}
}

MyUtil.java

package ch09;

import javax.servlet.http.HttpServletRequest;

public class MyUtil {
	//매개변수가 숫자이면 true, 숫자가 아니면 false
	public static boolean isNumeric(String s) {
		  try {
		      Integer.parseInt(s);
		      return true;
		  } catch(NumberFormatException e) {
		      return false;
		  }
	}
	
	public static int parseInt(HttpServletRequest request, 
			String name) {
		return Integer.parseInt(request.getParameter(name));
	}
}

git

https://github.com/youngmoon97/JSP

0개의 댓글