스프링 MVC 1편 - 서블릿, JSP, MVC 패턴

서은경·2022년 12월 30일
0

Spring

목록 보기
35/43

쥬의!
javex. 이 Jakarta. 로 변경됨에 따라
jsp 의존성 주입 할 때

	implementation group: 'jakarta.servlet.jsp.jstl', name: 'jakarta.servlet.jsp.jstl-api', version: '1.2.7'

요걸로 해줘야함 ~~ 아님 그래들 빌드가 안된다.

MVC 패턴 - 개요

MVC 패턴의 필요 이유

  1. 너무 많은 역할 - 서블릿이나 jsp로 개발하게 되면 비즈니스 로직과 뷰 로직까지 처리해야함
  2. 변경의 라이프 사이클 - 변경 주기가 다를 경우 분리해야함 (ex. UI 변경과 비즈니스 변경은 서로 독립적임 때문에 유지보수 하기 좋지 않다)
  3. 기능 특화 - JSP 같은 뷰 템플릿은 화면을 렌더링 하는데 최적화 되어있기 때문에 이 부분의 업무만 담당하는 것이 가장 효과적

MVC 패턴 - 적용

package hello.servlet.web.servletmvc;

import jakarta.servlet.RequestDispatcher;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;

@WebServlet(name = "mvcMemberFormServlet", urlPatterns = "/servlet-mvc/members/new-form")
public class MvcMemberFormServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String viewPath = "/WEB-INF/views/new-form.jsp";
        RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath);
        dispatcher.forward(request, response);
    }
}

servlet을 컨트롤러로 사용, Jsp를 뷰로 사용

dispatcher.forward(request, response);
다른 서블릿이나 jsp로 이동할 수 있는 기능, 서버 내부에서 다시 호출이 발생

/WEB-INF
이 경로 안에 JSP가 있으면 외부에서 직접 JSP를 호출할 수 없다.

redirect 🆚 forward
리다이렉트는 실제 클라이언트(웹 브라우저)에 응답이 나갔다가 클라이언트가 redirect 경로로 다시 요청한다. 따라서 클라이언트가 인지할 수 있고 URL도 실제로 변경된다.
반면에 포워드는 서버 내부에서 일어나는 호출이기 때문에 클라이언트가 전혀 인지하지 못한다.

MVC 패턴 - 한계

MVC 패턴을 적용하여 컨트롤러의 역할과 뷰를 렌더링하는 역할을 명확하게 구분할 수 있다.

MVC 컨트롤러의 단점

  1. 포워드 중복
    View로 이동하는 코드가 항상 중복 호출
  2. viewPath 중복
  3. 사용하지 않는 코드
    response같은 경우 사용되지 않음
  4. 공통처리의 어려움
    기능이 복잡해질수록 컨트롤러에서 고옽ㅇ으로 처리해야 하는 부분이 더 증가

-> 공통처리가 어렵다는 문제가 있다.
이 문제를 해결하려면 서블릿이 호출 전에 공통 기능을 처리해야함 ! 프론트 컨트롤러 패턴을 통해 문제 해결할 수 있음

디스패쳐 서블릿 ! ! ! ! !

0개의 댓글