템플릿 엔진을 사용하면 HTML을 만들어 내는 것 보다 차라리 HTML 문서에 동적으로 변경해야 하는 부분만 자바 코드를 넣을 수 있다면 더 편리할 것.
-> 템플릿 엔진이 나온 이유.
HTML 문서에서 필요한 곳만 코드를 적용해서 동적으로 변경 가능
( JSP, Thymeleaf, Freemarker, Velocity 등 )
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
jsp 파일에 꼭 들어가야 하는 코드
<% %>
안에 java 코드 사용 가능
*알면 좋은 부분(?)
변경의 라이프 사이클
예를 들어) 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 : 서버 내부에서 일어나는 호출
컨트롤러에서 중복 코드가 존재.
프론트 컨트롤러 도입
앞에 컨트롤러만 두고 뒤에서 로직 연결