서블릿과 자바 코드만으로 HTML을 동적으로 만들 수 있다.
하지만
PrintWriter w = response.getWriter();
w.write("<html>");
w.write("<head>");
w.write(" <meta charset=\"UTF-8\">");
w.write(" <title>Title</title>");
w.write("</head>");
w.write("<body>");
w.write("<a href=\"/index.html\">메인</a>");
w.write("<table>");
w.write(" <thead>");
w.write(" <th>id</th>");
w.write(" <th>username</th>");
이런 짓은 사람이 할게 아니다.
따라서, 자바 코드에서 HtTML을 만들지 않고 HTML 문서에 자바 코드를 넣어서 동적 HTML을 만들게 되었고, 이게 템플릿 엔진이다.
(JSP,Thymeleaf등)
이전보다는 편하지만, HTML과 자바 코드가 섞여 지저분
따라서 MVC패턴이 등장
변경 주기
UI의 수정과 비즈니스 로직의 수정은 별개이므로, 분리해서 관리
Model
View
Controller
Service
request.setAttribute()
로 값을 담고
request.setAttribute()
로 값을 꺼낸다.
dispatcher.forward()
통해서 제어권 넘김
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String viewPath = "/WEB_INF/views/new-form.jsp";
RequestDispatcher dispatcher = request.getRequestDispatcher();
dispatcher.forward(request,response);
}
WEB-INF
이 경로 안의 파일은, 외부에서 직접 호출 불가(무조건 컨트롤러를 거쳐서)
Redirect는 실제 클라에 응답이 나갔다가, 클라가 redirect 경로로 다시 요청
Forward는 서버 내부에서 호출하기 때문에, 클라가 인지 못함
공통되는 부분이 많음
공통 처리가 어려움
이런 단점들을 해결하기 위해, 프론트 컨트롤러
패턴 등장