MVC1, MVC2, MVC3, MVC4 in java
MVC1 & MVC2
MVC1은 클라이언트의 요청이 있을 때 모든 구현 및 응답을 servlet으로 하게 된다. java안에 html을 담아야하기에 view에 적합하지 않다.
MVC2는 클라이언트의 요청이 있을 때 모든 구현 및 응답을 JSP로 하게된다. 동적 프로그래밍이 필요하시 html안에 스크립트릿 표현으로 자바프로그래밍을 해야하기에 동적 기능만을 수행할 때 적합하지 않다.
여기서 응답은 JSP로 하며, 내부적인 동작은 servlet으로 하게되면 MVC3으로 넘어간다.
MVC3
MVC3은 client의 요청에 따라 DB와 상호작용 및 동작시키는건 Controller로 처리를 하며, 응답 결과는 JSP로 만들어서 반환한다.
반환을 하는 방식은 2가지가 있다. Redirect와 forward 방식.
- Redirect
- 데이터 전달 방식 : QueryString
- 기존 클라이언트의 요청을 받은 곳에서는 끊어버리고 새로운 곳으로 돌려버리는 것이다. 그러므로 request객체 등 모든 것이 초기화가 되는 문제점이 있다.
- 데이터를 받을 때 QueryString으로 하게되어, 파라미터가 많을수록 많이 복잡해진다.
- ex) 요청주소?var1=num1&var2=num2 등으로 넘겨준 후 Redirect로 받은 파일에서는 getParameter로 가져온다.
- forward
- 데이터 전달 방식 : ObjectBinding
- 기존에 클라이언트의 요청을 받은 servlet에서 다른 곳으로 새로운 요청을 만들지 않고, RequestDisapatcher 객체를 만들어 응답을 끊지 않고, JSP로 만들어진 응답 결과를 대신 받아와서 응답을 해준다.
- setAttribute로 객체바인딩을 해주면, 전달 받은 곳에서는 스크립트로 표현할 경우 getAttribute로 객체를 받아오거나 JSTL의 경우 메모리 공간에 명시되어있기에 EL을 사용해 바로 사용하면 된다.
MVC4
지금까지의 MVC pattern 에서는 client의 request에 따라서
다수의 Servlet이 request를 직접 받아서 응답을 해주었다.
MVC4 부터는 단일의 servlet이 request, response객체를 받고,
Controller interface를 implements한 request에 알맞는 각 POJO들이 메서드를 실행하고 결과값을 리턴한다.
- 클라이언트의 요청
- 요청된 명령을 frontController가 전부 받는다.
- 명령을 HandlerMapping 객체에 넣으면, 요청에 알맞는 POJO를 반환한다.
- 반환된 Controller(POJO)가 메서드를 실행한다.
- VO, DAO와 상호작용하는 POJO들은 실행 후 view page를 반환하는 POJO로 넘긴다.(redirect)
- view page를 반환하는 POJO들은 forward방식으로 page를 반환한다.
- view page반환 시 context root 관리를 위해서 viewresolver라는 객체를 만들어 관리한다.
[ 패턴에 대한 자세한 구현 과정]
MVC1: https://github.com/moo-on/jsp-tutorial/tree/MVC1
MVC2: https://github.com/moo-on/jsp-tutorial/tree/MVC2
MVC3: https://github.com/moo-on/jsp-tutorial/tree/MVC3
MVC4: https://github.com/moo-on/jsp-tutorial/tree/MVC4
Leave a comment