MVC(3)

Jiwon·2022년 2월 19일
0

인프런

목록 보기
8/14

템플릿 엔진

템플릿 엔진을 사용하면 HTML을 만들어 내는 것 보다 차라리 HTML 문서에 동적으로 변경해야 하는 부분만 자바 코드를 넣을 수 있다면 더 편리할 것.
-> 템플릿 엔진이 나온 이유.

HTML 문서에서 필요한 곳만 코드를 적용해서 동적으로 변경 가능
( JSP, Thymeleaf, Freemarker, Velocity 등 )

JSP

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

jsp 파일에 꼭 들어가야 하는 코드

<% %>
안에 java 코드 사용 가능

*알면 좋은 부분(?)

  • <%= ~ %>
    이 부분에는 자바 코드를 출력할 수 있다.

MVC 패턴

변경의 라이프 사이클
예를 들어) UI를 일부 수정하는 일과 비즈니스 로직을 수정하는 일은 각각 다르게 발생할 가능성이 매우 높고 대부분 서로에게 영향을 주지 않는다.
-> 이렇게 변경의 라이프 사이클이 다른 부분을 하나의 코드로 관리하는 것은 유지보수하기 좋지 않다.

Controller : (=Servlet)
View : (=JSP)
Model 이라는 것에 데이터를 담아서 서로 전달하는 것
(HttpServletRequest 객체를 사용 / request는 내부 저장소를 가지고 있음)

request.setAttribute() : 데이터 보관
request.getAttribute() : 데이터 조회


컨트롤러에 비즈니스 로직은 두는 것은 좋지 않다. ( 컨트롤러의 역할이 너무 많아지므로 주로 서비스 로직을 따로 만든다.)

실습

dispatcher.forward();

다른 서블릿이나 JSP로 이동할 수 있는 기능이다. 서버 내부에서 다시 호출 발생

/WEB-INF

이 경로안에 JSP가 있으면 외부에서 직접 JSP 호출할 수 없다.
-> 컨트롤러에서 JSP 호출하는 것을 기대함.

JSP와 같은 뷰 템플릿은 화면을 렌더링 하는데 특화된 다양한 기능을 제공한다.

redirect vs forward
redirect : 실제 url경로가 변경, 2번 호출
forward : 서버 내부에서 일어나는 호출

컨트롤러에서 중복 코드가 존재.

  • 포워드 중복
  • viewPath 중복
    - prefix : /WEB-INF/views/
    - suffix : jsp
  • 사용하지 않는 코드 : request, response
  • 공통 처리가 어렵 : (로그 처리)
    -> 따라서 공통 처리 필요해서 Front Controller(수문장) : 서블릿 호출전에 공통기능을 먼저 처리하는 것 . 이 도입

프론트 컨트롤러 도입
앞에 컨트롤러만 두고 뒤에서 로직 연결

profile
과연 나는 ?

0개의 댓글