Skip to main content

JSP & MVC

·209 words·1 min· loading
Table of Contents
SpringMVC1 - This article is part of a series.
Part 4: This Article

템플릿 엔진
#

서블릿과 자바 코드만으로 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등)


JSP
#

이전보다는 편하지만, HTML과 자바 코드가 섞여 지저분 따라서 MVC패턴이 등장

  • 비즈니스 로직은 다른 곳에서 처리
  • JSP는 화면만그리게

MVC 패턴
#

변경 주기 UI의 수정과 비즈니스 로직의 수정은 별개이므로, 분리해서 관리

  • Model

    • 뷰에 출력할 데이터를 담아두는 역활
  • View

    • 모델에 담겨있는 데이터로 화면을 랜더링(HTML)
  • Controller

    • Http 요청을 받아서 검증하고, 비즈니스 로직 실행
    • 뷰에 전달할 데이터를 모델에 담음
  • Service

    • 컨트롤러에서 전부 다 담당하기 어려울경우에, 서비스에서 비즈니스 로직을 담당

request.setAttribute()로 값을 담고 request.setAttribute()로 값을 꺼낸다.


MVC 적용
#

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 VS Forward
#

Redirect는 실제 클라에 응답이 나갔다가, 클라가 redirect 경로로 다시 요청 Forward는 서버 내부에서 호출하기 때문에, 클라가 인지 못함


MVC 한계
#

  • 공통되는 부분이 많음
  • 공통 처리가 어려움

이런 단점들을 해결하기 위해, 프론트 컨트롤러 패턴 등장

SpringMVC1 - This article is part of a series.
Part 4: This Article