모델1 구조 : 웹브라우저의 요청(request)을 받아들이고, 웹 브라우저에 응답(response)하는 것을 jsp페이지가 단독으로 처리하는 구조
모델2 구조 : 요청(request) 처리, 데이터 접근(data access), 비즈니스 로직(business logic)을 포함하고 있는 컨트롤러와 뷰를 엄격히 구분하여 처리하는 구조
[ Controller - Servlet / View - JSP Page ]
MVC 패턴 (Model-View-Controller pattern) -> 디자인 패턴 중 하나 / 소스 관리 용이
- 전통적인 GUI(Graphic User Interface) 기반의 어플리케이션을 구현하기 위한 디자인 패턴
- 사용자의 입력을 받아서 입력에 대한 처리를 하고, 그 결과를 다시 사용자에게 표시하기 위한 최적화된 설계
MVC 패턴의 요소
1) 모델(Model) : 로직을 가지는 부분
- DB와의 연동을 통해서 데이터를 가져와 작업 처리
- 처리한 작업의 결과를 데이터로서 DB에 저장하는 일을 처리
- JavaBean, Java class(처리 로직)가 이에 해당
- DAO와 DTO를 합친 것과 같음
DAO(Data Access Object) : DB를 연동하는 클래스
DTO(Data Transfer Object) : 해당 테이블의 구조를 그대로 설계한 클래스-JavaBean
2) 뷰(View) : 요청에 대한 응답 결과를 화면에 표시 -> 사용자 인터페이스 제공
- JSP페이지의 request는 컨트롤러인 서블릿과 같은 객체로 공유
${requestScope.result} 또는 request.getAttribute("result")와 같이 사용해서 결과를 화면에 표시
- 정보를 보여주는 역할'만'을 담당
- JSP페이지가 이에 해당
3) 컨트롤러(Controller) : 어플리케이션의 흐름 제어 -> 서블릿(Servlet) 이 이에 해당
- 사용자의 요청을 받아서 요구 사항을 분석 후 로직 처리를 모델에게 넘겨줌
- 모델이 처리한 로직 처리결과를 사용자에게 응답하기 위해 뷰로 보냄
- 웹브라우저의 요청을 받는 진입점
컨트롤러의 작업 처리 과정
① 웹 브라우저의 요청을 받음 -> 서블릿의 서비스 메소드인 doGet() 또는 doPost()를 통해서
② 웹 브라우저가 요구하는 작업을 분석 -> 사용자가 요구한 작업에 맡는 로직이 실행되도록 요구 작업 분석
③ 모델을 사용해서 요청한 작업을 처리
④ 로직 처리결과를 requests객체의 속성에 저장 -> 처리 결과는 같은 request객체 영역에서 공유
⑤ 뷰(JSP페이지)를 선택 후 해당 뷰로 forwarding -> 처리 결과를 저장한 request객체를 뷰로 전달
컨트롤러인 서블릿에 사용자의 요청을 파라미터로 명령어 전달
- 간편하긴 하나 웹 브라우저를 통해 정보 노출
- 사용자가 어떤 요청을 했는지 판단하기 위한 가장 일반적인 방법
- 명령어와 로직을 연결하는 properties 매핑 파일이 필요
- 컨트롤러인 서블릿에 요청 파라미터 정보를 덧붙여서 사용
http://localhost:8080/studyjsp/MessageContoller?message=aaa
컨트롤러인 서블릿에 요청 URI 자체를 명령어로 사용
- 요청되는 URI가 실제 페이지가 아니고 명령어이므로 악의적인 명령어로부터 사이트가 보호되며,
요청되는 URL이 좀 더 자연스러워 진다는 장점
http://127.0.0.1:8080/studyjsp/ch17/test.do
'Programming > Jsp' 카테고리의 다른 글
[JSP] 내장객체(Implicit Object)와 영역(Scope) (0) | 2020.07.21 |
---|---|
[JSP] JDBC 커넥션풀 설정 소스 / server.xml / web.xml (0) | 2020.07.21 |
[JSP/Servlet] HTTP Redirect / Dispatcher (forward, include) (0) | 2020.07.21 |
[JSP] 표현 언어 EL(Expression Language) 문법 (0) | 2020.07.14 |
[JSP/DB] JDBC 데이터베이스 연동 - Oracle SQL (0) | 2020.07.08 |