[Spring] mvc 개인정리1

MVC 기법

Model2 방식 개요

모델 2는 모델 1의 단점을 보완하고자 웹 애플리케이션의 각 기능을 분리하여 구현한다. 클라이언트 요청 처리, 응답 처리, 비즈니스 로직 처리 등의 기능을 모듈화하여 다음과 같은 구조를 띈다.

MVC 디자인 패턴 모델 2 구조에는 여러 하위 개념들이 있는데 가장 많이 사용되는 개념이 MVC이다. MVC는 Model — View — Controller의 약자로 일종의 프로그램 디자인 패턴이다. MVC는 모델 2의 일부로서 위에 기술한 모델 2의 특징과 장점을 그대로 지닌다.

20210531_001344

Controller 우리가 컨트롤러라고 칭하는 것은 사실 서블릿이다. 이 서블릿은 클라이언트의 요청을 받아서 분석한 후, 알맞은 모델을 호출한다. 모델이 요청을 처리해 반환하면 클라이언트에게 결과를 보여주기 위해 JSP를 선택한다. 전체 과정의 흐름을 제어하는 셈이다. Model 모델은 데이터를 저장하거나 수정하거나 데이터베이스 연동과 같은 비즈니스 로직을 수행한다. 일반적으로 DAO나 VO 클래스로 구성되어 있다. View 뷰는 본질적으로 JSP이다. 화면 기능을 담당하여 모델에서 처리한 결과를 화면에 표시한다.

20210531_002031

  1. 브라우저에서 /mem.do로 요청한다.
  2. MemberController 서블릿이 요청을 받고 MemberDAO의 listMembers() 메서드를 호출한다.
  3. MemberDAO의 listMembers() 메서드에서 SQL문으로 회원 정보를 조회한다.
  4. 조회된 정보를 MemberVO에 설정하여 반환한다.
  5. MemberController가 받은 정보를 listMembers.jsp로 전송한다.
  6. listMembers.jsp가 결과를 클라이언트의 화면에 출력한다.

20210531_003957

저 동그라미 부분을 포워딩이라 한다.(컨트롤러와 뷰가 데이터를 주고받는 걸 포워딩이라 함)

박과장이 가진 대이터를 홍대리가 어떻게 가져가야 하나

객체 바인딩이라는 용어가 나왔다.

어떤 특정 메모리 공간에 데이터를 집어넣고 다른 jsp 에 주고싶으면 어떤 공동으로 쓸 수 있는 메모리 공간으로 하면 이 기억공간에 박과장이 가진 걸 집어넣어준다.

속성값 하나를 넣어준다.(SetAttribute) 그럼 주소만 알면 바인딩 되있는 자료를 뺴내 갈 수 있다.

뺴갈떄는 getAttribute로 빼내간다.

컨트롤러와 뷰가 포워딩 될떄 데이터 주고받으려면 특정 메모리 공간에 데이터 집어넣어주는데 이걸 객체 바인딩이라 한다.

그리고 이 그림 안에서 RequestDispatcher(요청의뢰)와 객체 바인딩 에 대해서도 알 수 있다.

20210531_014151

즉 포워딩이랑 jsp와 servlet이 서로 연동되는 핵심이 이 포워드다.

Redirect 로 페이지 전환

: 리다이렉트로 쿼리 던져서 사용.(get방식에 쿼리스트링)으로 데이터 가져옴.

20220403_040612

forward 방법으로 페이지 전환

: 객체 바인딩을 해서 JSP에서 가져가야됨.(Redirect대신 사용)

20220403_040643


포워드와 객체바인딩 예제

20210531_020314

근데 이런 경우 단점이 있는데 여러개 정보 넘기기 어려움(회원 정보라던가)

20210531_020613

이게 리다이렉트 기법이고 마찬가지로 포워드 기법으로 데이터를 넘길 수 있다.

20210531_023229 이건 리다이렉트 기법으로 페이지 전환하고 get방식으로 쿼리스트링 사용(querystring)

리 다이렉트 복습

20210531_024626

uri상에서는 안 나타남. 컨트롤러 상에서 멈춰있음(jsp가 나타나지 않음)

포워딩은 서버로 요청 뿌리고 jsp 주면 컨트롤러가 클라이언트에 요청해서 클라이언트엔 안 나옴.

20210531_025430

서버에서만 이뤄지고 클라이언트 브라우저는 jsp 존재를 알 수 없다 이게 포워드 방식

20210531_025809

왼쪽 컨트롤러 오른쪽 뷰

컨트롤러가 jsp 에 리퀘스트 디스패쳐로 요청처리

20210531_033634

이 방법이 포워드 방법으로 페이지 전환(객체 바인딩으로 값을 jsp에서 가져옴)


20210531_035225

서버단에서만 이뤄져 클라이언트에선 알 수 없다.

참고로 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버전 받으니까 디비가 불러와졌다.

20210531_092643

이게 전형적인 MVC 구조

20210531_095950 MVC 흐름도


jstl, el

JSTL (Jsp Standard Tag Library)

▼ JSTL은?

JSP는 자신만의 태그를 추가할 수 있는 기능을 제공하고 있는데요. 과 같은 커스텀 태그처럼 연산이나 조건문이나 반복문인 if문, for문, DB를 편하게 처리할 수 있는것이 JSTL입니다. ▼ 태그 종류 (1) Core (prefix : c) → 일반 프로그래밍에서 제공하는 것과 유사한 변수선언 → 실행 흐름의 제어 기능을 제공 → 페이지 이동 기술 제공 URI → http://java.sun.com/jsp/jstl/core (2) Formatting (prefix : fmt) → 숫자, 날짜, 시간을 포매팅하는 기능을 제공 → 국제화, 다국어 지원 기능 제공 URI → http://java.sun.com/jsp/jstl/fmt (3) DataBase (prefix : sql) → DB의 데이터를 입력 / 수정 / 삭제 / 조회 하는 기능을 제공 URI → http://java.sun.com/jsp/jstl/sql (4) XML (prefix : x) → XML문서를 처리할 때 필요한 기능 제공 URI → http://java.sun.com/jsp/jstl/xml (5) Function (prefix : fn) → 문자열을 제공하는 함수 제공 URI → http://java.sun.com/jsp/jstl/functions 출처: https://hunit.tistory.com/203 [HunIT Blog] ![20210531_133256](/assets/20210531_133256.png) ##### el EL (Expression Language) ▼ 사용목적 <%= %> , out.println()과 같은 자바코드를 더 이상 사용하지 않고 좀더 간편하게 출력을 지원하기 위한 도구. 배열이나 컬렉션에서도 사용되고, JavaBean의 프로퍼티에서도 사용됩니다. ▼ 문법 Attribute형식에서는 <%= cnt + 1 %>를 쓰지 않고 ${cnt + 1}로 쓰고 Parameter형식에서는 ${param.abc}으로 씁니다. 여기서 cnt는 자바에서는 변수 이름이고, EL 식에서는 Attribute의 이름으로 해석되는데요. 값을 찾을때 Attribute는 작은 Scope에서 큰 Scope로 찾습니다. (page → request → session → application) [ attribute란? : 메소드를 통해 저장되고 관리되는 데이터 ] PageContext / Request에서 사용될때 setAttribute("key", value) → 값을 넣는다. getAttribute("key") → 값을 가져온다. removeAttribue("key") → 값을 지운다. session에서 사용될때 set / get / remove 동일하고 추가로++ invalidate( ) → 값을 전부 지운다. 출처: https://hunit.tistory.com/203 [HunIT Blog] ![20210531_133247](/assets/20210531_133247.png)





© 2021.03. by yacho

Powered by github