servlet
=> 템플릿 엔진 사용
: html 에다가 자바코드를 넣는 것.
ex) JSP, Thymeleaf (고전 : JSP -> 최근 :Thymeleaf)
servlet --> jsp
<jsp파일>
1. html 태그 위에서 <%%>내에 로직을 작성하고
--> request, reponse 그냥 사용 가능 (jsp도 내부적으로 servlet으로 변환되어 사용됨)
2. html 내에서 <%%>내에 자바 코드 작성
servlet보다 jsp가 조금 더 편하긴 하지만 하나의 jsp 파일에 비지니스 로직 + view부분 모두 작성해 주어야 함.
변경의 라이프 사이클이 다른 부분은 분리해야 함
MVC 패턴 시작
비지니스 로직은 서블릿 처럼 다른곳에서 처리하고, JSP는 목적에 맞게 HTML로 View을 그리도록!
MVC 패턴 적용
서블릿 -> 컨트롤러
JSP -> 뷰
HttpServletRequest 객체 -> 모델
경로
jsp에서
form action ="/save"면 절대경로
form action ="save"면 상대경로 --> 현재 path에서 이동(마지막 경로만 save로 변환)
dispatcher.forward() : 다른 서블릿이나 JSP로 이동할 수 있는 기능
: 클라이언트에 응답이 갔다 웹브라우저가 다시 redirect X
: 그냥 서버에서 method 호출하듯이 한번 실행
원래 web-app내에 있는 파일의 경로 localhost:8080뒤에 입력하면 페이지 호출 되었음.
WEB-INF폴더 내에 있는 파일들은 controller를 거쳐서만 호출되고 싶은 파일들. 따라서 외부에서 직접적으로 경로로 호출되지 않음 (servlet단에서 forward를 통해서만 호출)
redirect vs forward
redirect는 실제 클라이언트에 응답이 나갔다가, 클라이언트가 redirect 경로로 다시 요청한다. 따라서 클라이언트가 인지할 수 있고 URL경로도 실제로 변경됨. (두번 호출)
forward는 서버 내부에서 일어나는 호출이기 때문에 클라이언트가 인지하지 못한다.
MVC 패턴 한계
MVC 패턴을 적용한 덕분에 컨트롤러의 역할과 뷰를 렌더링 하는 역할 명확하게 구분 가능
뷰는 단순하게 모델에서 필요한 데이터를 꺼내고, 화면을 만들면 되지만 컨트롤러는 아직 중복이 많고, 필요하지 않은 코드도 존재
<단점>
--> 우리들만의 프레임워크.. spring MVC도 프론트 컨트롤러 패턴을 구현한 것임.