diff --git a/spring-mvc/servlet/src/main/java/com/example/servlet/web/frontcontroller/v1/ControllerV1.java b/spring-mvc/servlet/src/main/java/com/example/servlet/web/frontcontroller/v1/ControllerV1.java new file mode 100644 index 00000000..3ffb76b9 --- /dev/null +++ b/spring-mvc/servlet/src/main/java/com/example/servlet/web/frontcontroller/v1/ControllerV1.java @@ -0,0 +1,11 @@ +package com.example.servlet.web.frontcontroller.v1; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +public interface ControllerV1 { + + void process(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException; +} diff --git a/spring-mvc/servlet/src/main/java/com/example/servlet/web/frontcontroller/v1/FrontControllerServletV1.java b/spring-mvc/servlet/src/main/java/com/example/servlet/web/frontcontroller/v1/FrontControllerServletV1.java new file mode 100644 index 00000000..984aedfa --- /dev/null +++ b/spring-mvc/servlet/src/main/java/com/example/servlet/web/frontcontroller/v1/FrontControllerServletV1.java @@ -0,0 +1,44 @@ +package com.example.servlet.web.frontcontroller.v1; + +import com.example.servlet.web.frontcontroller.v1.controller.MemberFormControllerV1; +import com.example.servlet.web.frontcontroller.v1.controller.MemberListControllerV1; +import com.example.servlet.web.frontcontroller.v1.controller.MemberSaveControllerV1; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +@WebServlet(name = "frontControllerServletV1", urlPatterns = "/front-controller/v1/*") +public class FrontControllerServletV1 extends HttpServlet { + + private final Map controllerMap = new HashMap<>(); + + // 요청 URI 와 controller 매핑 + public FrontControllerServletV1() { + controllerMap.put("/front-controller/v1/members/new-form", new MemberFormControllerV1()); + controllerMap.put("/front-controller/v1/members/save", new MemberSaveControllerV1()); + controllerMap.put("/front-controller/v1/members", new MemberListControllerV1()); + } + + @Override + protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + System.out.println("FrontControllerServletV1.service"); + + String requestURI = request.getRequestURI(); // 요청 URI + + ControllerV1 controller = controllerMap.get(requestURI); + + // 해당 요청의 controller 가 없으면 404 리턴 + if (controller == null) { + response.setStatus(HttpServletResponse.SC_NOT_FOUND); + return; + } + + controller.process(request, response); + } +} diff --git a/spring-mvc/servlet/src/main/java/com/example/servlet/web/frontcontroller/v1/controller/MemberFormControllerV1.java b/spring-mvc/servlet/src/main/java/com/example/servlet/web/frontcontroller/v1/controller/MemberFormControllerV1.java new file mode 100644 index 00000000..65423aee --- /dev/null +++ b/spring-mvc/servlet/src/main/java/com/example/servlet/web/frontcontroller/v1/controller/MemberFormControllerV1.java @@ -0,0 +1,19 @@ +package com.example.servlet.web.frontcontroller.v1.controller; + +import com.example.servlet.web.frontcontroller.v1.ControllerV1; + +import javax.servlet.RequestDispatcher; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +public class MemberFormControllerV1 implements ControllerV1 { + + @Override + public void process(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + String viewPath = "/WEB-INF/views/new-form.jsp"; + RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath); + dispatcher.forward(request, response); + } +} diff --git a/spring-mvc/servlet/src/main/java/com/example/servlet/web/frontcontroller/v1/controller/MemberListControllerV1.java b/spring-mvc/servlet/src/main/java/com/example/servlet/web/frontcontroller/v1/controller/MemberListControllerV1.java new file mode 100644 index 00000000..63a252e7 --- /dev/null +++ b/spring-mvc/servlet/src/main/java/com/example/servlet/web/frontcontroller/v1/controller/MemberListControllerV1.java @@ -0,0 +1,28 @@ +package com.example.servlet.web.frontcontroller.v1.controller; + +import com.example.servlet.domain.member.Member; +import com.example.servlet.domain.member.MemberRepository; +import com.example.servlet.web.frontcontroller.v1.ControllerV1; + +import javax.servlet.RequestDispatcher; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.List; + +public class MemberListControllerV1 implements ControllerV1 { + + private final MemberRepository memberRepository = MemberRepository.getInstance(); + + @Override + public void process(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + List members = memberRepository.findAll(); + + request.setAttribute("members", members); + + String viewPath = "/WEB-INF/views/members.jsp"; + RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath); + dispatcher.forward(request, response); + } +} diff --git a/spring-mvc/servlet/src/main/java/com/example/servlet/web/frontcontroller/v1/controller/MemberSaveControllerV1.java b/spring-mvc/servlet/src/main/java/com/example/servlet/web/frontcontroller/v1/controller/MemberSaveControllerV1.java new file mode 100644 index 00000000..582152bd --- /dev/null +++ b/spring-mvc/servlet/src/main/java/com/example/servlet/web/frontcontroller/v1/controller/MemberSaveControllerV1.java @@ -0,0 +1,33 @@ +package com.example.servlet.web.frontcontroller.v1.controller; + +import com.example.servlet.domain.member.Member; +import com.example.servlet.domain.member.MemberRepository; +import com.example.servlet.web.frontcontroller.v1.ControllerV1; + +import javax.servlet.RequestDispatcher; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +public class MemberSaveControllerV1 implements ControllerV1 { + + private final MemberRepository memberRepository = MemberRepository.getInstance(); + + @Override + public void process(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + String username = request.getParameter("username"); + int age = Integer.parseInt(request.getParameter("age")); + + Member member = new Member(username, age); + memberRepository.save(member); + + // Model 에 데이터를 보관 + request.setAttribute("member", member); + + // View 로 이동 + String viewPath = "/WEB-INF/views/save-result.jsp"; + RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath); + dispatcher.forward(request, response); + } +}