MODEL1 & MODEL2 의 차이
표면상 큰 차이는 아래와 같다.
model1 : jsp파일 하나에 html,css,자바스크립트, 자바를 구분없이 섞어서 사용하는 것(디자인요소+로직요소),
model2 : jsp파일에는 html, css같은 디자인요소만 / 데이터는 controller라는 java파일에 분리해서 구현.
model1의 스크립틀릿(<%%>,<%=%>)을 사용하여 값을 불러내고 자바문을 이질적으로 끼워넣어 코드를 복잡하게 만드는 단점을 보완해 유지보수에 도움이 되는 구조가 model2방식이다.
MVC 패턴이란?
Model : view가 표시할 데이터 / 데이터를 획득하는 과정에서 실행되는 자바클래스 전부(vo,dao, service등)
View : model에 포함된 데이터의 표현을 담당. jsp
Controller : 클라이언트의 요청처리를 담당. controller 클래스
MODEL2 (MVC패턴을 활용한 웹애플리케이션 개발방식)
- 실제프로세스는 자바클래스, 컨트롤러, JSP 3개
- JSP에는 디자인요소HTML,CSS만 들어가고 업무로직은 컨트롤러에서 생성.
- 프론트컨트롤러는 개발의 편의성을 높여주기위해 알아서 제공되는 것.
- 컨트롤러는 특정 작업만(특정클라이언트에 종속) 컨트롤해서 자바클래스와 분리하여 같이 사용함.
- 클라이언트가 데이터를 소비하는 방법이 다양하면 VIEW가 많아지고 소비하는 접근형태가 다양해지면 CONTROLLER 가 많아진다.
- 이 모든 작업을 프론트컨트롤러패턴이라고도 부른다.
- 프론트컨트롤러의 JSP 이동방식, 컨트롤러의 JSP로 데이터로 이동하는방식을 알아야함.
하지만 우리가 실질적으로 쓰는 것은 (컨트롤러 → JSP) 데이터이동
- MODEL2개발방식의 특징
- 디자인요소와 로직요소가 분리된다.
- VIEW를 담당하는 JSP에서 스크립틀릿, 표현식을 제거할수있다. (EL, JSTL사용)
- 장점
- 로직요소의 재사용성이 높아진다.
- 디자인요소와 로직요소가 분리되었음으로 복잡도가 감소됨.
- 디자인요소와 로직요소가 분리되었기 때문에 유지보수성이 높아짐.
- 단점
- 프로그램의 구조가 복잡해진다.
- 라이브러리나 프레임워크의 추가 및 설정이 필요하다.
1. 서블릿
- 클라이언트의 요청을 처리할 수 있는 자바 클래스다.
- 클라이언트의 HTTP 요청을 처리하는 자바 클래스는 반드시 HttpServlet을 상속받아야 한다.
- 서블릿을 실행하기 위해서는 서버가 필요하다.
- 서블릿객체의 생성/유지/관리/폐기, 요청에 대한 적절한 서블릿의 실행을 서버가 담당한다.
- HTTP 요청을 처리하는 서블릿은 반드시 웹 애플리케이션 서버가 필요하다.
- Tomcat, jBoss, WebLogic, 제우스 등이 대표적인 웹 애플리케이션 서버 프로그램이다.
- Tomcat
1) 웹 애플리케이션 전용 서버다.
2) HttpServlet/JSP의 생성/유지/관리/폐기, HTTP 요청에 대한 적절한 HttpServlet/JSP의
실행을 담당한다.
3) 서블릿/JSP 엔진이다.
4) 서블릿/JSP 컨테이너다.
* 컨테이너 : 객체의 라이프사이클을 관리한다. / 객체를 담고 있는 객체다./
객체에 대한 적절한 유지관리 및 객체의 사용, 객체의 제공 등을 지원한다.
2. HttpServlet
- HTTP 요청을 처리하는 모든 웹 애플리케이션의 부모 클래스다.
- 주요 메소드
void init()
- HttpServlet객체의 초기화를 담당하는 메소드다.
- Tomcat이 HttpServlet객체를 생성하면, init() 메소드를 실행한다.
- init() 메소드를 재정의하면 객체생성된 후 실행할 작업을 구현할 수 있다.
void destroy()
- HttpServlet객체가 폐기되기 전에 실행되는 메소드다.
- HttpServlet에서 사용한 컴퓨터의 리소스를 해제하는 코드를 포함할 수 있다.
void service(HttpServletRequest request, HttpServletResponse response)
- HTTP 요청이 올때 마다 실행되는 메소드다.
- HTTP 요청을 분석해서 요청 방식을 확인하고, 요청방식에 따라서 아래에 나열된 메소드 중 하나를 실행한다.
- HttpServlet의 service(request, response)의 구현된 기능을 사용하는 대신, service(request, response)를 재정의해서 클라이언트의 HTTP 요청을 처리하는 코드를 직접 작성한다.
- 요청방식에 따라서 아래의 메소드 중 하나를 재정의하는 것이 아니라, 요청방식에 상관없이 실행되는 service(request, response)를 재정의하는 경우가 흔하다.
void doGet(HttpServletRequest request, HttpServletResponse response)
- GET 방식 HTTP 요청을 처리하는 메소드다.
- GET 방식은 데이터를 조회하는 요청이다.
void doPost(HttpServletRequest request, HttpServletResponse response)
- POST 방식 HTTP 요청을 처리하는 메소드다.
- POST 방식은 클라이언트가 전달한 데이터를 서버에 저장하는 요청이다.
void doPut(HttpServletRequest request, HttpServletResponse response)
- PUT 방식 HTTP 요청을 처리하는 메소드다.
- PUT 방식은 서버의 기존 데이터를 수정하는 요청이다.
void doDelete(HttpServletRequest request, HttpServletResponse response)
- DELETE 방식 HTTP 요청을 처리하는 메소드다.
- DELETE 방식은 서버의 기존 데이터를 삭제하는 요청이다.
사용자정의 HttpServlet 작성하기
- HttpServlet 클래스를 상속받는다.
- HttpServlet 클래스의 void service(HttpServletRequest request, HttpServletRespons response) 메소드를 재정의한다.
- 사용자정의 HttpServlet 클래스를 요청URL과 매핑시킨다.
- Model2 방식에서 프론트 컨트롤러를 HttpServlet을 상속받아서 작성하는 경우가 많다.