[꼼꼼한 개발자] 꼼코더

[서블릿 개념 핥기] - 05 - MVC 패턴 적용(실습) (한 번에 이해할 수 있는 글) 본문

Servlet, JSP/개념 핥기

[서블릿 개념 핥기] - 05 - MVC 패턴 적용(실습) (한 번에 이해할 수 있는 글)

꼼코더 2023. 1. 11. 00:12
반응형
 

‼️ 실습은 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 설명 참고) 값을
      c
      ommand 안에 있는 잘라냈던 문자열 기준으로 'key'를 조회하여 객체를 생성한다
      이후 생성한 객체(핸들러)를 handler 에 넣어준다.
    • 만약 “/add”가 들어오면 AddHandler() 가 싱행된다.
    • 이것은 다형성이다.
  • 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의 개념들을 확인해 보았다. 🖐 

 

 

 
Comments