JSP - Model1 , Model2 그리고 Spring MVC패턴이란
JSP Model1
-
JSP가 결과의 출력만 담당
-
프로젝트를 JSP( Controller + View ) 와 Java Bean( Model ) 로 구성 즉, 로직( Controller ) 과 화면( View )가 통합되어 있다는 말
동작방식
JSP가 결과의 출력만 담당
프로젝트를 JSP( Controller + View ) 와 Java Bean( Model ) 로 구성 즉, 로직( Controller ) 과 화면( View )가 통합되어 있다는 말
동작방식
-
클라이언트가 웹 브라우져를 통해서 hello.jsp 파일 요청
-
웹 서버가 요청을 받아서 hello.jsp에 대한 요청을 servlet(JSP) Container로 전달
-
해당하는 JSP 파일을 실행
-
JSP와 Java Bean을 사용하여 클라이언트에게 response를 위한 html 문서를 구성
-
요청이 들어왔던 곳으로 response
servlet controller 쪽에서 일어나는 작업
Controller와 View가 결합되어 있는 형태라는 것은 한 파일에 같이 있다는 개념으로 이해해도 무방
코드작성 방식
Model1을 적용하는 프로젝트는 ?
- 규모가 작고 개발 후에 유지보수가 거의 필요없는 프로젝트에 적합
장점
- 개발 속도가 빠르다
단점
- 유지보수 측면은 불리하다
JSP Model2
-
JSP가 출력뿐만 아니라 요청에 대한 모든 로직들을 처리
-
프로젝트를 Model, View, Controller의 세가지 요소로 모듈화하여 개발
동작방식
JSP가 출력뿐만 아니라 요청에 대한 모든 로직들을 처리
프로젝트를 Model, View, Controller의 세가지 요소로 모듈화하여 개발
동작방식
-
클라이언트가 웹 브라우져를 통해서 hello.jsp 요청
-
웹 서버가 요청 처리를 위해서 해당 페이지를 찾아서 Web Container로 전달
-
Servlet(Controller)이 응답
-
이에 필요한 Java Bean을 불러서 데이터를 가져옴
-
데이터를 이용하여 View와 연결 -> 주로 Controller가 View와 Model1을 합치는 기능을 수행
-
생성한 웹 페이지를 웹 서버 쪽으로 전송
-
웹 서버가 전송받은 웹 페이지를 클라이언트에게 전송
Model2를 적용하는 프로젝트는 ?
- 규모가 크고 개발 후에도 주기적으로 유지보수가 필요한 프로젝트
장점
- 협업과 유지보수에 유리
단점
- 설계가 어려워 개발시간이 오래걸림
Model2의 Dispatcher 방식이란 ?
- 외부에서 direct로 경로 접근을 방지하기 위해 url 본래의 주소가 아닌 실행문에 따라 자동으로 이동 할 수 있도록 만드는 방식
( 외부에서는 '경로' 가 보이지 않음 )
Dispatcher 를 집중적으로 적용하기 전 model
-
controller 와 view를 연결하기 위해 forwarding이 사용 됨
- contoller는 -> dispatcher를 이용해서 -> view와 forwarding을 하게 된다.
이 방식을 적용할 경우 page를 하나씩 추가할때마다 contoller , view를 생성하게 되는데 많아 질수록 비효율적이고 관리 또한 힘들어진다.
따라서 dispatcher servlet은 하나만 두고 여러개의 controller들의 기능만 별도로 분리하는 작업을 하기 위해 dispatcher 집중화 구조로 바꾼다.
forwarding
servlet에서 -> servlet으로 code의 흐름을 이어가는 역할
( 현재 작업 내용을 이어갈 수 있도록 무언가를 공유 )
redirect
현재 작업과 전혀 상관없이 새로운 요청
Dispatcher를 집중화 한 후의 model
-
servlet 역할은 dispatcher 하나만 두고 기능별로 contoller를 생성 후 dispatcher servlet이 찾아서 수행하도록 설계 구조를 변경한다.
- 일반적인 업무 로직들은 POJO 클래스( 일반 클래스 ) 로 만든다.
Dispatcher 와 forwarding 예제
UseMvcModel2.java ( Dispatcher Servlet 선언 )
package com.newlecture.web.jsp;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
// 실행은 view에서 하는것이 아니라 이제는 controller에서 실행한다.
@WebServlet("/UseMvcModel2")
public class UseMvcModel2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
int num = 0;
String num_ = req.getParameter( "num" );
if( num_ != null && !num_.equals( "" ) ) num = Integer.parseInt( num_ );
String result = "";
if( num % 2 != 0 ) result = "홀수 입니다.";
else result = "짝수입니다.";
req.setAttribute( "result" , result );
RequestDispatcher dispatcher = req.getRequestDispatcher( "jsp/useMvcModel2.jsp" ); // jsp이지만 servlet 역할을 함
// jsp view 와 연결하기 위해 forward 선언
// 현재 작업 내용을 담고 있다면 -> useMvcModel2.jsp로 작업 내용이 이어지면서 요청이 진행 됨
dispatcher.forward( req , resp );
}
}
useMvcModel2.jsp ( view 선언 )
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!-- ----------------------------------------------------------------------------------------- -->
<!DOCTYPE html>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
out.write(" useMvcModel2.jsp page ===== ");
out.write( "<br ><br >");
%>
<!-- 출력만 할 수 있도록 -->
<%= request.getAttribute( "result" ) %>
</body>
</html>
< 실행결과 >
UseMvcModel2.java( dispatcher servlet 실행 시 ) -> useMvcModel2.jsp 페이지를 통해 결과값을 출력한다.
pageContext
page에서 혼자 사용할 수있는 저장소
Request
forward사이에서 사용할 수있는 저장소
Session
현재 session에서 공유될 수있는 저장소
page
모든 session, 모든 페이지에서 공유될 수있는 저장소
Spring MVC pattern
- Model, View, Controller의 세 가지 요소로 모듈화하여 개발
Model, View, Controller란
-
Model
-
DB와 관계된 내용 기술
-
client의 요청에 필요한 자료를 DB에서 가져와 -> controller로 전달
-
View
- 사용자에게 보여지는 UI 내용 기술
( 어떤 view가 보여질지는 controller가 결정
-
Controller
- client의 요청을 받고 적절한 model에게 동작을 지시
( model이 처리하여 반환한 데이터를 -> view로 전달 )
동작구조
Model, View, Controller란
Model
-
DB와 관계된 내용 기술
-
client의 요청에 필요한 자료를 DB에서 가져와 -> controller로 전달
View
- 사용자에게 보여지는 UI 내용 기술
( 어떤 view가 보여질지는 controller가 결정
Controller
- client의 요청을 받고 적절한 model에게 동작을 지시
( model이 처리하여 반환한 데이터를 -> view로 전달 )
동작구조
장점
- 유지보수를 하는 측면에서 유리
단점
- 초기 설계 및 구현 진행 시 시간 소요 됨
Reference Site
Author And Source
이 문제에 관하여(JSP - Model1 , Model2 그리고 Spring MVC패턴이란), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hanseo0109/JSP-Model1-Model2-SpringMVCpattern저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)