쥬의!
javex. 이 Jakarta. 로 변경됨에 따라
jsp 의존성 주입 할 때
implementation group: 'jakarta.servlet.jsp.jstl', name: 'jakarta.servlet.jsp.jstl-api', version: '1.2.7'
요걸로 해줘야함 ~~ 아님 그래들 빌드가 안된다.
MVC 패턴 - 개요
MVC 패턴 - 적용
package hello.servlet.web.servletmvc;
import jakarta.servlet.RequestDispatcher;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(name = "mvcMemberFormServlet", urlPatterns = "/servlet-mvc/members/new-form")
public class MvcMemberFormServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String viewPath = "/WEB-INF/views/new-form.jsp";
RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath);
dispatcher.forward(request, response);
}
}
servlet을 컨트롤러로 사용, Jsp를 뷰로 사용
dispatcher.forward(request, response);
다른 서블릿이나 jsp로 이동할 수 있는 기능, 서버 내부에서 다시 호출이 발생
/WEB-INF
이 경로 안에 JSP가 있으면 외부에서 직접 JSP를 호출할 수 없다.
redirect 🆚 forward
리다이렉트는 실제 클라이언트(웹 브라우저)에 응답이 나갔다가 클라이언트가 redirect 경로로 다시 요청한다. 따라서 클라이언트가 인지할 수 있고 URL도 실제로 변경된다.
반면에 포워드는 서버 내부에서 일어나는 호출이기 때문에 클라이언트가 전혀 인지하지 못한다.
MVC 패턴 - 한계
MVC 패턴을 적용하여 컨트롤러의 역할과 뷰를 렌더링하는 역할을 명확하게 구분할 수 있다.
-> 공통처리가 어렵다는 문제가 있다.
이 문제를 해결하려면 서블릿이 호출 전에 공통 기능을 처리해야함 ! 프론트 컨트롤러 패턴을 통해 문제 해결할 수 있음
디스패쳐 서블릿 ! ! ! ! !