
MVC 디자인 패턴
☞ GUI 기반 Application 설계
☞ 클라이언트의 요청을 받아 처리하여 응답하는 로직을 세개의 로직(Model, View, Controller)로 나누어 개발
☞ Model
◎ Business Logic(클라이언트 요청에 대한 업무 처리)을 담당
◎ Business Service와 Data Access Object로 분리
- Business Service
* Business 로직의 일의 흐름을 관리
* DB관련된 작업을 제외한 로직을 처리
- Data Access Object(DAO)
* Database 관련된 로직만 처리
* DB 관련 로직을 제외한 어떠한 업무처리도 가지지 않는다.
☞ View
◎ 처리결과를 응답하는 로직을 담당(Presentation Logic)
☞ Controller
◎ Client의 요청을 처리하는 전체 흐름을 control하는 역할을 담당
◎ 처리내용
1. client의 요청을 받는다
1-1. client가 요청시 입력한 값을 읽는다.
1-2. client로 부터 받은 값을 검증한다.
2. Business 로직을 호출한다. - Model 호출
3. 응답 처리 로직을 호출한다. - View 호출
MVC 디자인 패턴 예제
calc_form.jsp
☞ folder : WebContent/model2
☞ 계산기를 수행하기 위해서 계산폼을 작성
소스코드
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="/myjsp/calculatorController" method="post">
피연산자1 : <input type="text" name="op1"><br>
피연산자2 : <input type="text" name="op2"><br>
연산자 :
<select name="operator">
<option>+</option>
<option>-</option>
<option>/</option>
<option>x</option>
</select><br>
<input type="submit" value="전송">
</form>
</body>
</html>
CalculatorServlet.java
☞ package : calc.controller
☞ Controller로서 요청 파라미터를 조회하여 입력한 피연산자 2개와 연산자를 넘겨받아 CalculatorService 클래스의 calculate() 메소드를 통해 business logic을 수행하여 연산을 실행하고 결과를 request scope에 binding하여 요청 디스패치방식으로 calc_result.jsp로 전송한다.
소스보기
package calc.controller;
import java.io.IOException;
import java.math.BigDecimal;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import calc.model.CalculatorService;
public class CalculatorServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//Controller
//1.요청 파라미터 조회
String op1 = request.getParameter("op1");
String op2 = request.getParameter("op2");
String operator = request.getParameter("operator");
//2. Business Logic
CalculatorService cs = new CalculatorService();
BigDecimal result = cs.calculate(op1, op2, operator);
//3.응답
request.setAttribute("result", result);
RequestDispatcher rdp = request.getRequestDispatcher("/model2/calc_result.jsp");
rdp.forward(request, response);
}
}
calc_result.jsp
☞ folder : WebContent/model2
☞ Expression Language를 사용하여 Request scope에 binding되어있는 결과를 출력한다.
소스보기
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
계산결과 : ${requestScope.result }<br>
<a href="/myjsp/model2/calc_form.jsp">계산폼</a>
</body>
</html>