1. JSP 웹 프로그래밍의 구조는 모델 1구조와 모델 2구조로 나뉜다.
1) 모델 1구조
- JSP를 요청하면 바로 응답하는 구조
ex)
ex01.jsp 구현
클라이언트(웹 브라우저) ex01.jsp 요청 -> (웹 컨테이너[서블릿 클래스 -> 서블릿 객체]) -> ex01.jsp 응답

- 웹 브라우저의 요청을 JSP가 직접 처리
- 웹 브라우저의 요청을 받은 JSP는 자바빈이나 서비스 클래스를 사용해서 웹 브라우저가 요청한 작업을 처리하고 그 결과를 클라이언트에 출력
2) 모델 2구조
- 웹 브라우저의 요청을 단 하나의 서블릿이 받는다.
- 서블릿은 웹 브라우저의 요청을 알맞게 처리한 후 그 결과를 보여줄 JSP 페이지로 포워딩한다.
- 포워딩을 통해 요청 흐름을 받은 JSP 페이지는 결과 화면을 클라이언트에 전송한다.
- 이 과정에서 서블릿이 로직을 처리한다.

- 모델 2구조의 특징은 웹 브라우저의 모든 요청을 단 하나의 서블릿에서 처리한다는 점
- 하나의 서블릿이 웹 브라우저의 모든 요청을 받기 때문에 서블릿은 웹 브라우저의 요청을 구분하는 방법이 필요
- 서블릿은 웹 브라우저의 요청을 처리한 후 웹 브라우저에 보이게 될 응답 화면을 생성할 JSP를 선택
- 모델 2 구조의 이러한 특징 때문에 MVC 패턴을 이용해서 웹 어플리케이션을 구현할 때 모델 2구조를 사용한다.
2. MVC 패턴
1) MVC 패턴 구성 요소

- 모든 요청을 받는 단 하나의 서블릿을 MVC의 C(컨트롤러)
- 로직 처리(일처리)는 클래스가 하며 이 클래스를 MVC의 M(model) 모델 객체라고 하며, 로직 클래스 또는 CommandHandler(커맨드 핸들러)라고도 한다.
- 화면을 출력하는 JSP 페이지를 MVC의 V(view) 출력 객체라고 한다.
M(모델) : 로직 처리 담당
V(뷰) : 사용자가 보게 될 결과 화면 담당
C(컨트롤러) : 사용자의 입력 처리와 흐름을 제어
2) MVC 패턴의 핵심
- 비즈니스 로직을 처리하는 모델과 결과 화면을 보여주는 뷰를 분리한다.
- 어플리케이션의 흐름 제어나 사용자의 처리 요청은 컨트롤러에 집중된다.
3) MVC 패턴과 모델 2구조의 매핑
컨트롤러 = 서블릿
모델 = 로직 처리 클래스, 자바빈
뷰 = JSP
사용자 = 웹 브라우저 등 다양한 기기
4) MVC의 컨트롤러 : 서블릿

아래 1~5번까지가 서블릿의 역할이다.
(1) 클라이언트(웹 브라우저)의 모든 http 요청을 받음
(2) 서블릿(컨트롤러)는 받은 요청을 분석
(3) 로직 처리를 담당하는 클래스를 찾아서 로직 처리를 시키라고 명령
(4) 모델 객체가 처리한 결과를 서블릿(컨트롤러)에게 돌려주면 화면에 출력하기 위해 request / session / application 객체 등 저장공간에 저장을 함
(5)화면 출력을 담당하는 뷰(view)가 누군지 파악하여 포워딩 또는 리다이렉트 시킴
(6) JSP 페이지로 화면에 출력(jsp 파일이 클라이언트에게 응답)
5) MVC의 모델

- 모델은 컨트롤러가 요청한 작업을 처리한 후 알맞은 결과를 컨트롤러(서블릿)에게 전달하며, 이 때 처리한 결과값을 저장하는 객체로 보통 자바빈을 사용
- 모델은 서비스 클래스나 DAO 클래스를 이용해서 비즈니스 로직을 수행하게 됨
3. 웹 브라우저를 통해서 명령어를 전달하는 방법 2가지
1) 특정 파라미터를 이용해서 명령어 정보를 전달
ex) http://loacalhost/jpsPro/board/view.htm?seq=641
> 글번호가 641번인 게시글의 내용을 상세보기 하겠다.
ex) http://loacalhost/jpsPro/board/list.htm?currentpage=28&searchCondition=2&searchWord=test
> 현재페이지 2번 검색 조건 2(writer), 검색어(test)에 해당하는 글목록을 보겠다.
2) 요청 URL 자체를 명령어로 사용
ex) http://loacalhost/jpsPro/board/view/641
> 글번호가 641번인 게시글의 내용을 상세보기하겠다.
'TIL > View Template' 카테고리의 다른 글
[SIST] JSP_days05/06_게시판 만들기 (0) | 2022.06.27 |
---|---|
[SIST] JSP_days08/09_모델 2구조의 MVC 패턴 게시판 구현 (0) | 2022.06.24 |
[SIST] JSP_days08_JSTL(표준 태그 라이브러리) (0) | 2022.06.24 |
[SIST] JSP_days07_표현언어(Expression Language) == EL (0) | 2022.06.23 |
[SIST] JSP_days07_세션(session) (0) | 2022.06.23 |