[꼼꼼한 개발자] 꼼코더
[서블릿 개념 핥기] - 05 - MVC 패턴 적용(실습) (한 번에 이해할 수 있는 글) 본문
반응형
‼️ 실습은 FrontController 패턴으로 MVC를 적용한다.
🎮 JSP에서 MVC패턴을 구현하는 방법
- 서비스 하는 기능마다 서블릿을 정의하고 등록
- Front Controller를 만들어 모든 요청을 받는 서블릿을 정의하고 등록
👨🏻💻 실습 ( FrontController 패턴으로 MVC 적용)
- controller와 model이라는 이름으로 패키지를 생성해 준다.
🕴🏻 모델 개념 준비
- model 패키지 속 AddService.java, MinService.java 이름으로 파일을 만들어 준다.
🏎 핸들러 준비 - java파일 생성
- controller 패키지에 AddHandler.java, minHandler.java,
FrontController.java CommandHandler.java 총 4개의 자바파일을 만들어준다 - 중요한 점은 이 파일들은 인터페이스이다.
☕️ CommandHandler.java
- 코드속 handlerAction()은 무언갈 동작하겠다 라는 뜻으로 정의한 함수이다.
- 동작시 request, reponse를 받아서 동작하고 String으로 반환하겠다.라는 내용
☕️ AddHandler.java
- AddHandler.java는 위에서 생성한 모델패키지에 있는 add객체(AddService.java를) 생성해서 사용할 준비를 한다.
- 요청이 들어왔을 때 Parameter를 통하여 더하기 기능 동작 후 결과물을 request에 담는다.
- 반환 값은 add.jsp라는 view 경로를 반환한다.
☕️ MinHandler.java
- MinHandle는 위에서 생성한 모델패키지에 있는 min객체(MinService.java를) 생성해서 사용할 준비를 한다.
- 요청이 들어왔을 때 Parameter를 통하여 빼기 기능 동작 후 결과물을 request에 담는다.
- 반환 값은 min.jsp라는 view 경로를 반환한다.
이제 브라우저에서 ‘/add’라는 요청이 들어오게 되면 AddHandler가 선택이 되고
AddService()를 통해서 처리한다.(이 부분이 모델에 개념)
결과는 request객체에 담아놔서 문자열로 view 경로를 반환한다.
그 경로와 일치한 jsp 파일을 선택(add.jsp 선택)
선택 후 request 담겨있던 데이터를 이용해서 표현식을 처리해 주고 결과물을 응답하게 된다.
‘/min’의 요청에 경우도 min관련 mvc가 동작하게 된다 이러한 것들을 구분하는 것이 컨트롤러에 역할이다.
🕹(프론트) 컨트롤러 준비 - 직접 핸들러 객체 생성하는 방법
이제 프론트 컨트롤러를 준비해보자 여기서 FrontController만 유일하게 Servlet이다.
클라이언트의 요청을 받아서 처리하고 응답을 줄 수 있는 하나의 서블릿이다.
이 서블릿은 요청이 들어왔을 때 요청이 무엇인지 구분해야 되고 그 요청에 맞는 기능으로 연결을 해줘야 한다.
그래서 미리 준비를 해야 한다.
☕️ FrontController.java
그림(1) init() 코드 설명)
- Map<> 타입의 HashMap<>(); 객체를 commandHandlerMap이름으로 생성한다.
- init()은 서블릿 객체가 생성될 때 최초에 한 번 호출되는 초기화 하는 메소드 이다.
- commandHandlerMap에 .put을 사용하여
1번 key = “/add”, value = new AddHandler() 객체를
2번 key = “/min”, value = new MinHandler() 객체를
넣어 '동작 준비를 위한 객체생성 준비'값을 commandHandlerMap안에 저장 한다.
그림(2) service() 코드 설명)
- 브라우저에서 요청하는 내용이 처리될 때 서비스 함수가 동작을 한다.
- String requestURI = req.getRequestURI().toString();
- 요청받은 URI 값을 requestURI 에 넣어준다.
- ex) 브라우저에 localhost:8080/exammvc/add? 요청시 /exammvc/add 값이 requestURI 변수 에 담기게 된다.
- String command = requestURI.substring(req.getContextPath().length());
- requestURI안에 있는 데이터를 기준으로 문자 특정부분을 잘라서 결과를 command 안에 넣어준다.
- ex) /exammvc/add에서 /add를 잘라서 command 변수에 '/add'를 넣어준다.
- handler = commandHandlerMap.get(command);
- commandHandlerMap 안에 저장된 (키 = 벨류(객체 생성 * 그림 1 설명 참고) 값을
command 안에 있는 잘라냈던 문자열 기준으로 'key'를 조회하여 객체를 생성한다
이후 생성한 객체(핸들러)를 handler 에 넣어준다. - 만약 “/add”가 들어오면 AddHandler() 가 싱행된다.
- 이것은 다형성이다.
- commandHandlerMap 안에 저장된 (키 = 벨류(객체 생성 * 그림 1 설명 참고) 값을
- viewPage = handler.handlerAction(req, resp);
- 동작한 메소드의 결과 값을 viewPage에 넣어준다.
- 이때 req안에는 계산의 결과 값 viewPage에는 경로의 결과 값이 들어있게 된다.
- req.getRequestDispatcher(viewPage).forward(req, resp);
- 위에 코드의 값들을 가지고 화면에 표현할 jsp로 포워딩
👨🏻💻 서블릿 등록
- 이전 방법(3번 글 참고)과 다른 것은 <sevlet>에 등록한 FrontController는 모든 요청을 받아드리는 서블릿이다.
- <url-pattern> 에 있는 ‘/’ 부분이다 이 부분은 “모든 요청을 전부 받겠다” 라는 뜻
📺 뷰 작성
- WEB-INF 파일 속 add.jsp, min.jsp파일을 생성한다.
- WEB-INF 파일내에는 외부에서 직접 요청이 불가하다.
🔚 동작과 마무리
이제 실행 후 결과를 보면 잘 나오는 걸 확인할 수 있다.
지금까지 Servlet, JSP, MVC의 개념들을 확인해 보았다. 🖐
위 글은 'IT 핥기' 유튜버 님의 영상을 참고하여 작성하였습니다. https://www.youtube.com/@ithotgi
'Servlet, JSP > 개념 핥기' 카테고리의 다른 글
[서블릿 개념 핥기] - 04 - MVC 패턴 적용(이론) (한 번에 이해할 수 있는 글) (0) | 2023.01.11 |
---|---|
[서블릿 개념 핥기] - 03 - JSP, Servlet의 활용 (한 번에 이해할 수 있는 글) (0) | 2023.01.10 |
[서블릿 개념 핥기] - 02 - 서블릿이란? + 실습 (한 번에 이해할 수 있는 글) (2) | 2023.01.10 |
[서블릿 개념 핥기] - 01 - JSP란 무엇인가?(한 번에 이해할 수 있는 글) (0) | 2023.01.10 |
Comments