반응형
01. JSP 기반의 웹어플리케이션 구성 방법
- JSP MODEL1 : JSP가 업무로직과 출력 처리 함께
- JSP MODEL2 : JSP에서는 출력 처리만
02. JSPmodel1 VS JSPmodel2(mvc패턴)
JSP MODEL1
- 클라가 JSP를 요청
- (예) 이벤트 통해, URL주소를 직접 입력해..
- JSP는 데이타를 처리하고 처리결과를 출력함 ( business layout , presentation layout 모두 JSP가)
- JSP가 다 함 (DB연동까지 할 수 있지만, 우리는 DAO가 할 수 있도록 만듦
- 단점
- HTML부터 만들어줘야 HTML을 JSP로 변경해서 자바코드 삽입 가능
- 잘못해서 사용하면 오류 발생 가능 (디자이너와 개발자의 서로 코드 영역 침범 가능)
- 장점
- 소형 프로그램에서 만들면 쉬움
JSP MODEL2
- 클라가 단 하나의 서블릿만 요청
- 서블릿은 웹브라우저의 요청을 구분할 수 있는 방법이 필요함
- 서블릿은 데이타 처리만 함
- JSP는 출력 처리만 함
- 장점
- 디자이너와 프로그래머의 업무처리를 분리하였으므로 유지보수의 효율성 높아짐
- 생산성 높아짐
- 단점
- 파일이 너무 많아짐 (이동시킬 일이 많음)
- 기존 JSP + 서블릿과 로직처리클래스를 만들어야 하므로 파일이 너무 많아짐
03. MVC 디자인패턴
- 객체지향 프로그램을 만들기 위한 하나의 기술 중 하나
- JSP 모델2 와 MVC패턴은 완벽히 일치
Model
- 비지니스 영역의 상태정보 처리
- 비지니스 로직 처리 클래스, 자바빈 EX) DAO클래스
View
- 비지니스 영역에 대한 프레젠테이션 담당 (사용자가 보게 될 화면)
- ex)JSP
Controller
- 사용자의 입력 및 흐름 제어 담당
- 필요한 모델(DAO클래스) 가져다가 데이타 처리, 필요한 뷰(JSP) 가져다 출력 처리
- ex)서블릿
핵심
- 비지니스 로직을 처리하는 모델과 결과화면을 보여주는 뷰가 분리되어있음
- 흐름제어나 처리요청은 컨트롤러에게 집중됨
장점
- 하는 일이 분리되어 있어 유지보수 작업이 간단해짐 - 생산성 높아짐
- 어플리케이션 확장성 높아짐
1) Controller : [Servlet]
웹브라우저의 요청에 대해 [서블릿]이 데이타를 처리하는 순서
- 웹브라우저가 전송한 HTTP 요청 받음 - 서블릿의 doGet 메소드나 doPost 메소드가 호출됨
- 브라우저가 어떤 기능을 요청했는지 분석함 ex) 게시판 목록을 요청? 글쓰기 요청?
- 모델을 사용해 요청 기능 수행
- 모델로부터 전달받은 결과물을 알맞게 가공 후 request나 session의 setAttribute() 이용해 결과값을 속성에 저장
- 웹브라우저에 보여줄 JSP를 선택 후 JSP로 포워딩 or 리다이렉트이동
2) View : [JSP]
- 비즈니스 로직과 관련 코드가 없다는 점 제외하고는 일반 JSP와 동일한 형태
- request 기본객체나 session 기본객체에 저장한 데이터를 사용해 웹브라우저에 알맞는 결과를 출력해줌
- 즉, 웹브라우저가 요청한 결과를 보여주는 역할(프레젠테이션 역할) or
- 웹브라우저의 요청을 컨트롤러에게 전달하는 매개체
- ex) 링크, action, src..
3) Model : [DAO], [Service] ..etc
- 명확히 어떤 것을 통해 구현된다는 것이 없음
- 비즈니스 로직만 처리해준다면 모델이 될 수 있음
- 서블릿(컨트롤러)을 통해 요청을 받으면 비즈니스 로직을 수행함
- 그 수행결과를 서블릿(컨트롤러)에게 전달함
- MyBatis (DAO를 더 쉽게 만들어주는 프레임워크)
반응형
'jsp' 카테고리의 다른 글
[jsp] 31. 회원정보 관리 프로그램 (feat. JSP model2 (MVC패턴)) (0) | 2024.07.19 |
---|---|
[jsp] 29. 회원정보 관리 프로그램(MVC) (0) | 2024.07.18 |
[jsp] 28. JSTL(Java Standard Tag Library) (0) | 2024.07.18 |
[jsp] 27. EL 커스텀태그 @taglib (0) | 2024.07.17 |
[jsp] 26. filter클래스 만드는법 (context-param VS init-param) (0) | 2024.07.16 |