2014년 4월 5일 토요일

[Servlet/Jsp] headFirst - Ch3 - 배포 서술자


0. 환경

macbook-pro 13” 2012 mid / 10GB
tomcat7
교재: Head First Servlet/Jsp, 한빛미디어, 2012


1. 학습목표

Web Application Directory

1) 디렉토리 구조를 만들 수 있음
2) 정적 컨텐츠, JSP페이지, 서블릿 클래스, 배포 서술자, 태그 라이브러리, JAR파일, 자바 클래스 파일

Deployment Descriptor

1) 항목의 용도 및 문법 설명
2) 항목을 정확한 구조로 만들 수 있음

배포의 흐름

1) 처음부터 끝까지 전 과정


2. 환경

Maven project 기준으로 pom.xml 설정환경에 따라 달라질 수 있음

Directory 구조

maven개발환경

배포 환경

maven배포환경

1) Tomcat Container 영역

tomcat - webapps - maven_webapp_project

이하 영역은 Web Application 영역으로 어떤 Container를 사용하든지 동일
2) Servlet spec. 영역

WEB-INF - classes
WEB-INF - lib
WEB-INF - web.xml
*.[jsp|html|…]

3) Application 영역

WEB-INF - classes - me - dec7 - 이하


3. 개발 진행흐름

  1. 사용자가 제일 먼저 볼 HTML 폼 생성
  2. Controller Servlet ver.1
    • HTML 폼이 서블릿 호출시 단순히 파라미터 값을 출력
  3. 관련 Model Class 완성
    • Test Class
    • Model Class
  4. Controller Servlet ver.2
    • Servlet에 Model을 조작할 수 있는 기능 추가
  5. JSP 완성
  6. Controller Servlet ver.3
    • JSP로 요청을 전달(Dispaching)하는 기능 추가
  7. 전체 어플리케이션 테스트

4. Servlet 흐름

  1. 사용자가 특정 서블릿 요청
  2. Container는 DD에 접근하여 항목에서 찾음
  3. 과 맵핑된 을 통해 일치하는 이 있는지 찾음
  4. 찾으면 를 읽음
    • 서블릿이 초기화된 적이 없는 경우 class를 로드하고 초기화
  5. Container는 요청을 처리할 새로운 Thread를 시작하고 Service() 메소드에 Request 객체 참조를 인자로 전달
  6. Service() 메소드는 HTTP 메소드에 따라 doGet()나 doPost()를 호출
  7. Thread 완료시 사용자에게 응답 전달

Servlet 요청시

servlet에 요청시 웹 어플리케이션의 컨텍스트 루트 (tomcat에 배포된 project 이름) 를 붙이지 않더라도 상대경로로 인식하고 절대경로로 변경

<form method="POST" action="ABCServlet">

5. MVC 디자인 패턴

비지니스 로직과 프리젠테이션 로직의 분리가 MVC의 핵심

Controller

Servlet
Request객체에서 사용자가 입력한 정보를 추출
모델에 대해 어떤 작업을 해야할지 알아냄

  • 모델 정보를 수정할지
  • 뷰(JSP)에게 전달할 새로운 모델을 만들지

View

JSP, 프리젠테이션 로직
View는 Controller로 부터 Model정보를 읽어 옴

  • 직접 / 간접적 방법 모두 가능
  • View가 찾을 수 있는 곳에 Controller가 두는 방식을 많이 사용

사용자가 입력한 정보를 Controller에게 전달

Model

비지니스 로직
getter, setter 로직 포함
MVC pattern에서 DB와 통신하는 유일한 곳

  • MVC 아키텍쳐에서 Model은 Back-End라고 함
    • 대부분 Model은 일반 자바 클래스로 코딩함
    • Model은 자신이 호출된다는 것을 알 필요 없음
      • 안다면 특정 App에 종속된다는 의미이며 꼭 필요할 경우 Utility Package로 옮겨야 함

6. Dispach

  • Servlet이 JSP를 호출하도록 기능 확장
  • 요청 처리 부탁 (Request dispaching) 매커니즘 제공
    • Container는 자신이 관리하는 컴포넌트끼리 서로 호출할 수 있는 기능

위 기능 이용하여 Servlet은 Model에게 받은 정보를
Request 객체 안에 저장하고 JSP에 요청을 처리해 줄 것을 부탁(Dispatch) 할 수 있음

code

// head first servlet/jsp, ch3, servlet ver.3 code


// 나중에 jsp가 styles란 값으로 result를 읽을 수 있도록 request 객체 속성에 값을 설정
request.setAttribute("styles", result);

// jsp로 작업을 부탁할 RequestDispatcher를 인스턴스화
RequestDispatcher view = request.getRequestDispatcher("result.jsp");

// jsp에게 request, response 객체를 전달
view.forward(request, response);

Written with Dec7.

댓글 없음:

댓글 쓰기