-
jsp mvc model2Servlet-JSP 2022. 1. 24. 18:35
**유튜브 뉴렉쳐님의 강의를 들으면서 공부하고 정리한 내용입니다.
model1.패턴의 경우는 controller와 view가 다른 페이지로 분리되지 않고 한 페이지 안에서 위 아래로 나누어서 작성하는 방식이였다.
model2 패턴은 기존의 방식에서 벗어나서 아예 html 코드랑 java 코드랑 다른 페이지로 분리 해 주는 방법을 사용 하고 있다.
view단만 클라이언트의 요청이 왔을때 서블릿으로 만들어 져서 만들어야 하는 분량이 줄어들고 controller와 model 는 미리 컴파일 해서 배치 하기 때문에 실행 속도가 개선 될 뿐 아니라 자바와 html 코드가 분리 되어 있어서 유지 보수 또한 용이해진다.
model2에서는 controller 부분과 view 부분을 분리 하는 것이 첫번째 해야 할 일이다.
model2에서는 controller 부분에 하나의 요소가 더 더해지게 된다.
바로 Dispatcher 이다.
controller와 jsp 를 연결 해주기 위해서는 forward 라는 방법을 사용하게 된다.
forward 란?
controller에서 view단으로, 서블릿에서 서블릿으로 이전 되면서 흐름을 이어 받아서 코드를 진행 할 때 사용 하는 것이다. dispatcher를 통해서 forwarding을 하게 된다.우리는 앞으로 프로젝트를 진행하면서 controller와 view를 계속 추가 하게 될 것인데 그럴때마다 controller는 dispatcher라는 것을 통해서 포워딩을 하게 된다.
모든 컨트롤러마다 가지고 있는 공통적이 디스패쳐의 기능이 비효율적으로 보이기 떄문에 이 디스패쳐를 하나만 두고
컨트롤러의 기능을 전문으로 가지고 있는 것을 별도로 분리하게 된다.
디스패쳐 서블릿은 하나만 두고 업무 프로세서의 컨트롤러들은 별도의 POJO 클래스를 만들어서 일반 클래스의 형태로 만들어준다.
사용자 요청이 들어오게 되면 이 디스패쳐가 사용자 요청을 가지고 적절한 컨트롤러를 찾아주어 수행하게 되고 내가 진행한 로직에 해당하는 적당한 VIEW를 호출할 수 있도록 다시 디스패쳐에서 관련된 내용을 알려주게 되면 디스패쳐가 VIEW 단을 호출 하게 되는 것이다.
우선 MODEL1에서 나아가 컨트롤러랑 뷰단을 나눠서 만드는 것을 해보자

빨간 색으로 체크 한 부분이 기존에 사용했던 파일에서 컨트롤러 단에 해당하는 내용이다 .
이것을 따로 페이지를 만들어서 작성해보자

이렇게 나눠주게 되었다.
그럼 이제 컨트롤러와 뷰단을 연결 해 주는 도구가 필요하다.
컨트롤러 단에서 만든 result를 뷰단에 있는 result로 옮겨주기 위해서 필요한것은 둘 사이에 사용 할 저장소가 필요하게 된다.
저장소로 사용 할 수 있는 것은 포워딩이 있는데 이것은 redirect와 비교 가 되는데 둘의 차이점은
redirect : 현재 작업 했던 내용과 전혀 상관 없이 새로운 요청을 할 수 있는 것
forward : 현재 작업 한 내용을 이어 갈 수 있도록 공유 해 주는 것이러하다.
디스패쳐를 사용 해서 포워딩을 해 줄 것인데
request.getRequestDispatcher("spag.jsp");이렇게 해서 사용하면 된다.
이렇게 사용하게 되면 현재 spag.java라는게 있는데 spag.jsp로 전달을 하고 싶다 하는 의미이다.
경로 앞에 / 가 붙지 않았는데 그 이유는 url상에서 같은 디렉토리 안에 있기 때문이다.
RequestDispatcher dispatcher = request.getRequestDispatcher("spag.jsp"디스패쳐를 변수로 선언 해 주고
dispatcher.forward(request, response);dispatcher.forward해주면 request와 response를 공유 할 수 있게 된다.
디스패쳐는 현재 작업한 내용에서 요청을 받아서 응답으로 흐름이 이어지게 해주는 것이기 때문이다.
result를 공유하기 위해 저장하는 저장소로 request를 사용하게 된다. .
👇상태를 저장 할 때 사용 할 수 있는 저장소들
pagecontext : 페이지 내에서 혼자서 사용 할 수 있는 저장소
request : 포워드 관계에서 사용 할 수 있는 저장소
session : 현재 세션에서 사용 할 수 있는 저장소
page : 모든 세션 모든 페이지에서 사용 할 수 있는 저장소
cookie : 클라이언트에 저장 할 수 있는 저장소cookie를 제외하고 서버상에 저장 할 수 있는 저장소는 네가지이다.
request.setAttribute("result", result); RequestDispatcher dispatcher = request.getRequestDispatcher("spag.jsp"); dispatcher.forward(request, response);request.setAttribute를 사용해서 연결하고자 하는 값을 담아 주면 된다.
그리고 뷰단에서는 getAttribute를 이용해서 넣어 둔 값을 꺼내주는 것이다

그리고 실행은 무조건 콘트롤러 단에서 해 준다. 콘트롤러단에서 데이터를 만들어서 뷰단에서 내용을 출력해주기 떄문이다.
그럼

이렇게 출력이 되게 되고

url 창에 값을 입력하면 내용이 변경 되는 것도 확인 할 수 있다.
'Servlet-JSP' 카테고리의 다른 글
EL(Expression Language) 저장소 (0) 2022.01.24 EL(Expression Language) (0) 2022.01.24 JSP MVC model1 (0) 2022.01.23 JSP로 Hello Servlet 출력 해 보기 (0) 2022.01.23 JSP란? (0) 2022.01.20