MVC패턴이란?
- 구현된 개발코드를 의미하는게 아니라, 어플리케이션 개발 시 디자인과 로직은 분리시켜 개발해야 추후 변경사항이 발생했을 때 많은 리소스(개발시간, 인력)를 소모하지 않고 유지보수할 수 있다는 IT의 전해 내려오는 개발방법이론(개발패턴)
- 자바로 구현한 MVC패턴을 모델2방식이라 한다.
- ms개발자, .net개발자도 사용 즉, 어떠한 개발에도 사용되는 방식
Model
- 중립적 로직이라서 스윙, 웹 모두 사용할 수 있는 중립적 코드 일반클래스로 정의하면 된다.
- DAO, DTO와 같은 클래스들이라고 말할 수 있다.
View
- 디자인적인 요소를 담당하는 부분이다.
- JSP와 같이 태그들이 들어가는 코드라고 말할 수 있다.
Controller
- 로직인 Model과 디자인인 View를 분리시키기 위한 용도
- 웹이건, 응용프로그램이건 모든 컨트롤러 5대역할
1. 요청을 받는다.
2. 요청을 분석한다..
3. 알맞는 로직 객체에게 일을 시킨다.(지가 직접안함)
4. 일 시킨 후(3단계) 결과가 있다면 결과를 보관한다.
5. 디자인에 그 결과를 반영한다.
- Servlet과 같은 클래스이다.
게시판목록페이지의 코드로 예를 들어보자
아래의 코드는 게시판목록의 View담당하는 JSP코드이다.
DAO와 같은 클래스를 가지고 있지 않다.
<%@page import="com.webapp1216.board.model.Notice"%>
<%@page import="com.webapp1216.common.board.Pager"%>
<%@page import="java.util.List"%>
<%@ page contentType="text/html;charset=utf-8"%>
<%
List<Notice> list = (List<Notice>)session.getAttribute("noticeList");
Pager pager = new Pager();
pager.init(request, list); // 페이지 처리에 대한 계산!!
%>
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
table {
border-collapse: collapse;
border-spacing: 0;
width: 100%;
border: 1px solid #ddd;
}
th, td {
text-align: left;
padding: 16px;
}
tr:nth-child(even) {
background-color: #f2f2f2;
}
img{
width:100px;
}
</style>
</head>
<body>
<table>
<tr>
<th>No</th>
<th>제목</th>
<th>작성자</th>
<th>작성일</th>
<th>조회수</th>
</tr>
<%int num = pager.getNum(); %>
<%int cusPos = pager.getCurPos(); %>
<%for(int i=0;i<pager.getPageSize();i++){ %>
<%if(num<1)break; %>
<%Notice notice= list.get(cusPos++); %>
<tr>
<td><%=num-- %></td>
<td><a href="/board/detail?notice_id=<%=notice.getNotice_id()%>"><%=notice.getTitle() %></a></td>
<td><%=notice.getWriter() %></td>
<td><%=notice.getRegdate() %></td>
<td><%=notice.getHit() %></td>
</tr>
<%} %>
<tr>
<td colspan="6" style="text-align: center">
<%if(pager.getFirstPage()-1<=0){ %>
<a href="javascript:alert('처음페이지입니다.')">◀</a>
<%}else{ %>
<a href="list.jsp?currentPage=<%=pager.getFirstPage()-1%>">◀</a>
<%} %>
<%for(int i=pager.getFirstPage();i<=pager.getLastPage();i++) {%>
<%if(i<=pager.getTotalPage()){ %>
<a href="list.jsp?currentPage=<%=i%>">[<%=i %>]</a>
<%} %>
<%} %>
<%if(pager.getLastPage()>=pager.getTotalPage()){ %>
<a href="javascript:alert('마지막페이지입니다.')">▶</a>
<%}else{ %>
<a href="list.jsp?currentPage=<%=pager.getLastPage()+1%>">▶</a>
<%} %>
</td>
</tr>
-<tr>
<td colspan="6">
<button type="button" onClick="location.href='regist_form.jsp'">글등록</button>
</td>
</tr>
</table>
</body>
</html>
아래의 코드는 M와 V를 연결해주는 역할의 Controller이다.
어떠한 디자인적인 요소가 들어가지 않았다.
/*
* javaEE 개발패턴 중 mvc패턴을 적용한 개발방법을 가리켜 model2방식이라 일컫는다.
* 특히 jsp가 디자인에 사용되고 있으며, 웹 상의 요청을 받고 응답이 가능한 서블릿이 컨트롤러로서 역할을 수행하게 된다.
*/
package com.webapp1216.board.controller;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.webapp1216.board.model.Notice;
import com.webapp1216.board.model.NoticeDAO;
//클라이언트의 목록요청을 처리하는 서블릿 정의!!
public class ListServlet extends HttpServlet{
NoticeDAO dao = new NoticeDAO();
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List<Notice> list = dao.selectAll();
//어떻게 list.jsp까지 살려서 보낼까???
//세션? 클라이언트가 브라우저 프로세스를 닫지 않거나, 일정 시간내에 재접속했을 때 서버측의 메모리에
//담겨진 정보를 사용할 수 있는 기술...(새로운 접속인 경우 세션 객체를 새로 생성되고, 세션아이디가 새롭게 발급됨..)
//session을 어케 가져오지?
//jsp에서의 session내장객체는 자료형이 HttpSession이다!!
HttpSession session = request.getSession();//이 요청과 관련한 세션을 얻는다!
session.setAttribute("noticeList", list);//세션 객체에 보관!
//결과페이지 선택
response.sendRedirect("/board/list.jsp");
}
}
아래의 코드는 DAO를 담당하는 모델의 코드이다.
DB와의 연결을 통해 요청에 대한 응답하기위한 데이터를 처리하는 부분이다.
package com.webapp1216.board.model;
import java.util.ArrayList;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import com.webapp1216.mybatis.config.MybatisConfigManager;
public class NoticeDAO {
MybatisConfigManager manager = MybatisConfigManager.getInstance();
// CRUD
public List<Notice> selectAll() {
List<Notice> list =null;
SqlSession sqlSession = manager.getSqlSession();
list = sqlSession.selectList("Notice.selectAll");
manager.close(sqlSession);
return list;
}
}
'프로그래밍 > JSP' 카테고리의 다른 글
JSP | 서블릿(Servlet) 이해 (0) | 2020.12.16 |
---|---|
JSP | session (0) | 2020.12.16 |
JSP | 커넥션풀(Connection Pool) (0) | 2020.12.11 |
JSP | MyBatis 사용해보기 (0) | 2020.12.10 |
JSP - 페이징 이해 (0) | 2020.12.08 |