Integrating Servlet and JSP MVC Architecture

1. MVC Architecture

MVC2

MVC FLow of Control

MVCFlowOfControl

Flow

  1. Browser가 Servlet에게 Request를 보낸다.
  2. Servlet은 Request에 대한 결과가 들어가 있는 Bean을 Instance화 한다.
  3. 서블릿은 JSP 페이지와 커뮤니케이션을 한다.
  4. JSP 페이지는 Bean과 커뮤니케이션을 한다.
  5. JSP 페이지는 Browser에게 응답한다.

RequestDispatcher 란?

RequestDispatcher는 클라이언트로부터 최초에 들어온 요청을 JSP/Servlet 내에서 원하는 자원으로 요청을 넘기는 역할을 수행하거나, 특정 자원에 처리를 요청하고 처리 결과를 얻어오는 기능을 수행하는 클래스

RequestDispatcher의 존재 이유

HttpServletResponse.sendRedirect() 와 차이점

sendRedirect() 메서드를 사용하여 지정한 경로로 페이지를 이동시킬 수 있다.
하지만 sendRedirect()는 HTTP 리다이렉션을 이용하기 때문에 하나의 요청 범위 안에서 처리를 하는것이 아니라 브라우저에게 Response 후 브라우저측에서 지정받은 요청 경로로 다시 재요청을 하는 방식이기에 두 번의 HTTP 트랜잭션이 발생하며, 서버측에서는 최초에 받은 요청중에 처리한 내용을 리다이렉트 된 요청안에서 공유할 수 없는 문제가 있다.

물론 sendRedirect() 에서도 쿠키나 세션등을 이용해 특정 상태를 유지하여 공유할 수는 있다. 하지만 좋은 방법이라고 할 수는 없다.

정리

  • HttpServletResponse : 현재 어플리케이션 이외에 다른 자원의 경로를 요청할 수 있다.
  • RequestDispatcher : 현재 처리중인 서블릿이 속해 있는 웹 어플리케이션 범위 내에서만 요청을 제어할 수 있다.

MVC + RequestDispatcher 시행 절차

  1. 데이터를 포함하여 Bean을 정의한다.
    • 적어도 하나의 getXXX 메서드를 사용하여
  2. Serlvet은 Request를 처리한다.
    • Serlvet은 Request 매개변수를 읽고 누락되거나 잘못된 데이터를 확인하고 비지니스 로직을 실행
  3. 비니지스 로직을 실행하고 결과를 포함한 Bean을 얻는다.
  4. Request, Session or Servlet Context에 Bean을 저장
    • Servlet은 요청의 결과를 나타내는 Bean을 저장하기 위해 요청, Session 또는 Servlet 컨텍스트 오브젝트에 대해 setAttribute를 호출
  5. JSP페이지로 Request를 Forwarding
    • 서블릿은 상황에 맞는 JSP 페이지를 결정하고 RequestDispatcher의 forward 메소드를 사용하여 해당 페이지로 전송
  6. Bean에서 데이터를 추출한다.
    • JSP 페이지는 Bean을 생성하거나 수정하지 않는다. Servlet이 생성 한 데이터를 단순히 추출하여 표시

2. Beans

특정 규칙을 따르는 Java 클래스

  • 반드시 0개의 인자를 갖는다.
    • Tomcat이 Beans를 만듬 - 어떤 인자를 넣을지 판단하지 않는다.
  • Public field를 가져서는 안된다.
  • getXXX, setXXX와 같은 메서드를 통하여야지만 접근할 수 있다.

3. Bean의 Scopes

  • 스프링 프레임워크의 핵심은 스프링이 개발자를 대신해서 빈의 생명주기를 관리해 주고, 애플리케이션에서 빈이 필요한 시점에 스프링이 빈을 주입해 준다. 이 때 스프링은 기본적으로 모든 빈을 싱글톤으로 생성하여 관리한다.
  • Bean이 얼마나 오래 유지되는지를 컨트롤한다.

종류

  1. request
    • Set, Get 하는 부분에서만 유효 (Servlet/JSP)
  2. session
    • 다른 페이지에서도 얼마동안 같은 사용자에게 보여짐
    • 다른 사용자는 볼 수 없음
  3. application
    • 모든 사용자, 모든 페이지에서 볼 수 있음(ex - 방문자 수)
  4. singleton
    • 하나의 Bean 정의에 대해서 Spring IoC-Container 내에 단 하나의 객체만 존재
  5. prototype
    • 하나의 Bean 정의에 대해서 다수의 객체가 존재할 수 있다.
Share :

Comments