MVC Model 2

Hwawon_2·2022년 3월 14일
0

MVC패턴
M - model:DAO(DB접근로직)
V - view : JSP(사용자에게 보여질 모양)
C - controller : servlet(접속 주소 관리)

전체 적인 컴포넌트 설계
1. 접속
2. 주소 분석
3. 다오 실행
4. 데이터 리턴
5. 포워딩

MVC의 컨트롤러 : 서블릿(포워딩만함)

  • 모델 2 구조에서 서블릿은 MVC패턴의 컨트롤러 역할을 합니다. 서블릿은 웹 브라우저의 요청과 웹 어플리케이션의 전체적인 흐름을 제어합니다.

    컨트롤러의 흐름 제어 처리 로직

  1. 웹 브라우저가 전송한 HTTP 요청을 받아 요청방식에 맞게 doGet(), doPost()를 호출함.
  2. 웹 브라우저가 어떤 기능을 요청했는지 분석함.
  3. 모델을(다오 호출) 사용하여 요청한 기능을 수행.
  4. 모델로부터 전달받은 결과물을 알맞게 가공한 후, request나 session의 setAttribute() 메서드를 이용하여 결과값을 속성에 저장(바인딩). 이렇게 저장한 결과값은 뷰인 JSP에서 사용함.
  5. 웹 브라우저에 결과를 전송할 JSP 페이지를 선택한 후, 해당 JSP로 포워딩(혹은 리다이렉트)함.

MVC의 뷰: JSP(화면)
모델 2 구조에서 JSP는 뷰 역할을 담당합니다. 뷰 역할을 하는 JSP는 컨트롤러에서 request 객체나 session객체에 저장된 데이터를 사용하여 웹 브라우저에 알맞을 화면을 출력합니다.

  • 뷰 역할을 하는 JSP는 웹 브라우저가 요청한 결과를 보여주는 프레젠테이션의 역할을 할 뿐만 아니라 웹 브라우저의 요청을 컨트롤러에 전달해주는 매개체가 되기도합니다.

  • 즉, 뷰 역할을 하는 JSP는 웹 브라우저가 지속적으로 컨트롤러에 요청을 보낼 수 있는 링크나 폼을 제공해서 웹 브라우저가 업무 흐름에 따라 컨트롤러에게 알맞은 요청을 보낼 수 있도록 합니다.

MVC의 모델(다오)

  • 컨트롤러는 서블릿을 통해 구현하고 뷰는 JSP를 통해서 구현하는데 모델은 명확하게 어떤 것을 통해서 구현한다는 규칙은 없습니다. 단지 비즈니스 로직을 처리해주면 모델이 될 수 있습니다.

  • 컨트롤러의 서블릿이 웹 브라우저의 요청을 분석하여 알맞은 모델을 호출하면서부터 모델의 기능이 시작됩니다. 모델은 컨트롤러가 요청한 작업을 처리한 후 알맞은 결과를 컨트롤러에게 전달하는데, 이때 처리한 결과값을 저장하는 객체로 보통 자바빈을 사용합니다.


컨트롤러는 서블릿 통해 구현
뷰는 jsp통해 구현
모델은 클래스파일로 구현


kr.co.ict.servlet - FrontController서블릿을 생성해줍니다.
주소는 *.do , post,get만 선택합니다.

src/main/java - kr.co.ict.servlet.service 패키지를 생성합니다.

서비스를 처리할수 있는 인터페이스를 생성
kr.co.ict.servlet.service - 우클릭 - interface - IBoardService 생성
다형성 원리를 이용해 프론트컨트롤러가 수행할 명령들을 하나의 타입으로 실행할 수 있도록 도와줍니다.

kr.co.ict.servlet.service - BoardListService 클래스 생성

Add unimplemented methods를 눌러주면 됩니다.

ㄴ아이보드서비스 타입으로 보드리스트서비스를 호출할수 있다.
boardListServlet로가서 바인딩까지 복사해와서 붙여줍니다.
(포워딩은 컨틀롤러에서 처리할꺼기 때문)

FrontController
맨 밑에다가

doGet, doPost 어떤 형식으로 요청이 들어올지 모르기 때문에 공용 메서드를 하단에 하나 생성합니다.

private void doRequest()- 요청처리

doGet이랑 doPost가 doRequest를 호출

= 무슨 방식으로 들어오건 doRequset방식으로 처리하게됨

doRequest부분으로 와서(공용메서드)
post방식도 처리하게 될 수 있으므로 인코딩 설정해줍니다.

doRequest로 통일해서 처리 할려면

프론트 컨트롤러는 여러 주소 요청을 처리하기 때문에 uri부터 받아옵니다.

포워딩할 .jsp파일의 경로를 미리 저장해둘 변수

다형성을 이용해 요청주소에 따른 처리해줄 서비스

ㄴ.do로 접속하면 여기로 들어옴

sv = new BoardListService(); 서비스를 만들어주고
execute(request, response)해주고
ui = "/board/boardlist.jsp; 포워딩 주소를 ui에 저장해준다.

ㄴ 타입이 다름에도 불구하고 ,아이보드서비스를 구현한게 보드리스트 서비스이기 때문에 다용성원리로 인해 아이보드서비스 변수에는 뭐든지 다 넣을수 있다.

위쪽 if~else문을 다 호출한 다음 실제로 포워딩 실행해준다.

/boardList.do로 치면
리스트로 잘 이동된다.


ㄴ 뭘로 접속했던지간에 .do로 끝났기 때문에 프론트컨트롤러랑 매칭이됨

boardList.do호출 순서

  1. 브라우저에서 http://localhost:8181/MyFirstWeb/boardList.do 접속
  2. .do로 끝났으므로, *,do 패턴이 입력된 FrontController 진입
  3. doGet이건 doPost건 doRequest로 일원화 호출
  4. 인코딩 설정, uri받아오기 수행
  5. ui변수와 sv변수는 if블럭 밖에서 선언해야 중괄호 닫혀도 유지
  6. if~else if 를 통해 URI매칭을 조사(boardList.do패턴과 일치)
  7. BoardListService를 생성하고 execute호출
  8. BoardListService에서 dao생성, 게시물 전체 가져오기 후 바인딩
  9. 해당 조건문 종료 후 포워딩 수행

그러면 정해진 주소 이외의 주소로 접속햇을떄 메인페이지로 보내주는 포워딩 구문은
ui="/"; 입니다

========문제========
1.BoardDetailServlet을 커맨드 패턴화 시켜보겠습니다.
서비스 클래스를 생성하고 내부 메서드를 옮겨주세여.
-> kr.co.ict.servlet.service - BoardDetailService 클래스를 생성
implements 해주고

BoardDetailServlet에서 바인딩까지 복사

FrontController
else if를 넣어서 추가 해주면 된다.

확인해보면
주소창에 /boarddetail?board_num=1 입력하면 그 창으로 가지는걸 확인 가능

profile
코딩 일기장

0개의 댓글