JSP가 결과의 출력만 담당
프로젝트를 JSP( Controller + View ) 와 Java Bean( Model ) 로 구성 즉, 로직( Controller ) 과 화면( View )가 통합되어 있다는 말
동작방식
클라이언트가 웹 브라우져를 통해서 hello.jsp 파일 요청
웹 서버가 요청을 받아서 hello.jsp에 대한 요청을 servlet(JSP) Container로 전달
해당하는 JSP 파일을 실행
JSP와 Java Bean을 사용하여 클라이언트에게 response를 위한 html 문서를 구성
요청이 들어왔던 곳으로 response
Controller와 View가 결합되어 있는 형태라는 것은 한 파일에 같이 있다는 개념으로 이해해도 무방
코드작성 방식
Model1을 적용하는 프로젝트는 ?
JSP가 출력뿐만 아니라 요청에 대한 모든 로직들을 처리
프로젝트를 Model, View, Controller의 세가지 요소로 모듈화하여 개발
동작방식
클라이언트가 웹 브라우져를 통해서 hello.jsp 요청
웹 서버가 요청 처리를 위해서 해당 페이지를 찾아서 Web Container로 전달
Servlet(Controller)이 응답
이에 필요한 Java Bean을 불러서 데이터를 가져옴
데이터를 이용하여 View와 연결 -> 주로 Controller가 View와 Model1을 합치는 기능을 수행
생성한 웹 페이지를 웹 서버 쪽으로 전송
웹 서버가 전송받은 웹 페이지를 클라이언트에게 전송
Model2를 적용하는 프로젝트는 ?
Model2의 Dispatcher 방식이란 ?
controller 와 view를 연결하기 위해 forwarding이 사용 됨
이 방식을 적용할 경우 page를 하나씩 추가할때마다 contoller , view를 생성하게 되는데 많아 질수록 비효율적이고 관리 또한 힘들어진다.
따라서 dispatcher servlet은 하나만 두고 여러개의 controller들의 기능만 별도로 분리하는 작업을 하기 위해 dispatcher 집중화 구조로 바꾼다.
forwarding
servlet에서 -> servlet으로 code의 흐름을 이어가는 역할
( 현재 작업 내용을 이어갈 수 있도록 무언가를 공유 )
redirect
현재 작업과 전혀 상관없이 새로운 요청
servlet 역할은 dispatcher 하나만 두고 기능별로 contoller를 생성 후 dispatcher servlet이 찾아서 수행하도록 설계 구조를 변경한다.
Dispatcher 와 forwarding 예제
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 );
}
}
<%@ 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, 모든 페이지에서 공유될 수있는 저장소
Model, View, Controller란
Model
DB와 관계된 내용 기술
client의 요청에 필요한 자료를 DB에서 가져와 -> controller로 전달
View
Controller
동작구조
Reference Site