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 구조
배포 환경
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. 개발 진행흐름
- 사용자가 제일 먼저 볼 HTML 폼 생성
- Controller Servlet ver.1
- HTML 폼이 서블릿 호출시 단순히 파라미터 값을 출력
- 관련 Model Class 완성
- Test Class
- Model Class
- Controller Servlet ver.2
- Servlet에 Model을 조작할 수 있는 기능 추가
- JSP 완성
- Controller Servlet ver.3
- JSP로 요청을 전달(Dispaching)하는 기능 추가
- 전체 어플리케이션 테스트
4. Servlet 흐름
- 사용자가 특정 서블릿 요청
- Container는 DD에 접근하여
항목에서 찾음 과 맵핑된 을 통해 일치하는 이 있는지 찾음 - 찾으면
를 읽음
- 서블릿이 초기화된 적이 없는 경우 class를 로드하고 초기화
- Container는 요청을 처리할 새로운 Thread를 시작하고 Service() 메소드에 Request 객체 참조를 인자로 전달
- Service() 메소드는 HTTP 메소드에 따라 doGet()나 doPost()를 호출
- 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.
댓글 없음:
댓글 쓰기