[Spring] mvc 개인정리1
MVC 기법
Model2 방식 개요
모델 2는 모델 1의 단점을 보완하고자 웹 애플리케이션의 각 기능을 분리하여 구현한다. 클라이언트 요청 처리, 응답 처리, 비즈니스 로직 처리 등의 기능을 모듈화하여 다음과 같은 구조를 띈다.
MVC 디자인 패턴 모델 2 구조에는 여러 하위 개념들이 있는데 가장 많이 사용되는 개념이 MVC이다. MVC는 Model — View — Controller의 약자로 일종의 프로그램 디자인 패턴이다. MVC는 모델 2의 일부로서 위에 기술한 모델 2의 특징과 장점을 그대로 지닌다.
Controller 우리가 컨트롤러라고 칭하는 것은 사실 서블릿이다. 이 서블릿은 클라이언트의 요청을 받아서 분석한 후, 알맞은 모델을 호출한다. 모델이 요청을 처리해 반환하면 클라이언트에게 결과를 보여주기 위해 JSP를 선택한다. 전체 과정의 흐름을 제어하는 셈이다. Model 모델은 데이터를 저장하거나 수정하거나 데이터베이스 연동과 같은 비즈니스 로직을 수행한다. 일반적으로 DAO나 VO 클래스로 구성되어 있다. View 뷰는 본질적으로 JSP이다. 화면 기능을 담당하여 모델에서 처리한 결과를 화면에 표시한다.
- 브라우저에서 /mem.do로 요청한다.
- MemberController 서블릿이 요청을 받고 MemberDAO의 listMembers() 메서드를 호출한다.
- MemberDAO의 listMembers() 메서드에서 SQL문으로 회원 정보를 조회한다.
- 조회된 정보를 MemberVO에 설정하여 반환한다.
- MemberController가 받은 정보를 listMembers.jsp로 전송한다.
- listMembers.jsp가 결과를 클라이언트의 화면에 출력한다.
저 동그라미 부분을 포워딩이라 한다.(컨트롤러와 뷰가 데이터를 주고받는 걸 포워딩이라 함)
박과장이 가진 대이터를 홍대리가 어떻게 가져가야 하나
객체 바인딩이라는 용어가 나왔다.
어떤 특정 메모리 공간에 데이터를 집어넣고 다른 jsp 에 주고싶으면 어떤 공동으로 쓸 수 있는 메모리 공간으로 하면 이 기억공간에 박과장이 가진 걸 집어넣어준다.
속성값 하나를 넣어준다.(SetAttribute) 그럼 주소만 알면 바인딩 되있는 자료를 뺴내 갈 수 있다.
뺴갈떄는 getAttribute로 빼내간다.
컨트롤러와 뷰가 포워딩 될떄 데이터 주고받으려면 특정 메모리 공간에 데이터 집어넣어주는데 이걸 객체 바인딩이라 한다.
그리고 이 그림 안에서 RequestDispatcher(요청의뢰)와 객체 바인딩 에 대해서도 알 수 있다.
즉 포워딩이랑 jsp와 servlet이 서로 연동되는 핵심이 이 포워드다.
Redirect 로 페이지 전환
: 리다이렉트로 쿼리 던져서 사용.(get방식에 쿼리스트링)으로 데이터 가져옴.
forward 방법으로 페이지 전환
: 객체 바인딩을 해서 JSP에서 가져가야됨.(Redirect대신 사용)
포워드와 객체바인딩 예제
근데 이런 경우 단점이 있는데 여러개 정보 넘기기 어려움(회원 정보라던가)
이게 리다이렉트 기법이고 마찬가지로 포워드 기법으로 데이터를 넘길 수 있다.
이건 리다이렉트 기법으로 페이지 전환하고 get방식으로 쿼리스트링 사용(querystring)
리 다이렉트 복습
uri상에서는 안 나타남. 컨트롤러 상에서 멈춰있음(jsp가 나타나지 않음)
포워딩은 서버로 요청 뿌리고 jsp 주면 컨트롤러가 클라이언트에 요청해서 클라이언트엔 안 나옴.
서버에서만 이뤄지고 클라이언트 브라우저는 jsp 존재를 알 수 없다 이게 포워드 방식
왼쪽 컨트롤러 오른쪽 뷰
컨트롤러가 jsp 에 리퀘스트 디스패쳐로 요청처리
이 방법이 포워드 방법으로 페이지 전환(객체 바인딩으로 값을 jsp에서 가져옴)
서버단에서만 이뤄져 클라이언트에선 알 수 없다.
참고로 jdbc 연결에 mysql 버전과 jdbc 연결 커넥터 버전 맞나 확인해야 한다
https://higugu.tistory.com/entry/commysqljdbcexceptionsjdbc4MySQLNonTransientConnectionException-Could-not-create-connection-to-database-server
https://cho001.tistory.com/152
내 경우 커넥터가 5인데 mysql이 8.0.22여서 커넥터를 8버전 받으니까 디비가 불러와졌다.
이게 전형적인 MVC 구조
MVC 흐름도
jstl, el
JSTL (Jsp Standard Tag Library)
▼ JSTL은?
JSP는 자신만의 태그를 추가할 수 있는 기능을 제공하고 있는데요.