/* ์ด ๊ธ์ ๊น์ํ๋์ ๊ฐ์๋ฅผ ๋ณด๊ณ ์ ๋ฆฌํ๋ ค๊ณ ์์ฑํ ๊ธ์ ๋๋ค.
๊ฐ์ธ์ ์ธ ๊ณต๋ถ๋ฅผ ์ํด ์ฌ๋ฆฌ๋ ๊ธ์ด๋ฏ๋ก ์ค๊ฐ ์ค๊ฐ ์ฝ๋๋ ์๋ต๋์์ต๋๋ค. */
์คํ๋ง MVC 1ํธ - ๋ฐฑ์๋ ์น ๊ฐ๋ฐ ํต์ฌ ๊ธฐ์ | ๊น์ํ - ์ธํ๋ฐ
๊น์ํ | ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ๋ ํ์ํ ๋ชจ๋ ์น ๊ธฐ์ ์ ๊ธฐ์ด๋ถํฐ ์ดํดํ๊ณ , ์์ฑํ ์ ์์ต๋๋ค. ์คํ๋ง MVC์ ํต์ฌ ์๋ฆฌ์ ๊ตฌ์กฐ๋ฅผ ์ดํดํ๊ณ , ๋ ๊น์ด์๋ ๋ฐฑ์๋ ๊ฐ๋ฐ์๋ก ์ฑ์ฅํ ์ ์์ต
www.inflearn.com
1. V1์ ๊ตฌ์กฐ
- ์ด๋ฒ ๋ชฉํ๋ ๊ธฐ์กด ์ฝ๋๋ฅผ ์ต๋ํ ์ ์งํ๋ฉด์, ํ๋ก ํธ ์ปจํธ๋กค๋ฌ๋ฅผ ๋์ ํ๋ ๊ฒ์ด๋ค.
2. ๊ตฌํ
ControllerV1 - interface
public interface ControllerV1 {
void process(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException;
}
- ์๋ธ๋ฆฟ๊ณผ ๋น์ทํ ๋ชจ์์ ์ปจํธ๋กค๋ฌ ์ธํฐํ์ด์ค๋ฅผ ๋์ ํ๋ค.
- ๊ฐ ์ปจํธ๋กค๋ฌ๋ค์ ์ด ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ฉด ๋๋ค.
- ํ๋ก ํธ ์ปจํธ๋กค๋ฌ๋ ์ด ์ธํฐํ์ด์ค๋ฅผ ํธ์ถํด์ ๊ตฌํ๊ณผ ๊ด๊ณ์์ด ๋ก์ง์ ์ผ๊ด์ฑ์ ๊ฐ์ ธ๊ฐ ์ ์๋ค
MemberFormControllerV1 - ํ์ ๋ฑ๋ก ์ปจํธ๋กค๋ฌ
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);
}
}
MemberSaveControllerV1 - ํ์ ์ ์ฅ ์ปจํธ๋กค๋ฌ
public class MemberSaveControllerV1 implements ControllerV1 {
private 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);
String viewPath = "/WEB-INF/views/save-result.jsp";
RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath);
dispatcher.forward(request, response);
}
}
MemberListControllerV1 - ํ์ ๋ชฉ๋ก ์ปจํธ๋กค๋ฌ
public class MemberListControllerV1 implements ControllerV1 {
private MemberRepository memberRepository = MemberRepository.getInstance();
@Override
public void process(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List<Member> members = memberRepository.findAll();
request.setAttribute("members", members);
String viewPath = "/WEB-INF/views/members.jsp";
RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath);
dispatcher.forward(request, response);
}
}
FrontControllerServletV1 - ํ๋ก ํธ ์ปจํธ๋กค๋ฌ
@WebServlet(name = "frontControllerServletV1", urlPatterns = "/front-controller/v1/*")
public class FrontControllerServletV1 extends HttpServlet {
private Map<String, ControllerV1> controllerMap = new HashMap<>();
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 {
String requestURI = request.getRequestURI();
ControllerV1 controller = controllerMap.get(requestURI);
if(controller == null) {
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
return;
}
controller.process(request, response);
}
}
- urlPatterns = '/fornt-controller/v1/*' ๋ /front-controller/v1์ ํฌํจํ ํ์ ๋ชจ๋ ์์ฒญ์ ์ด ์๋ธ๋ฆฟ์์ ๋ฐ๋ ๋ค๋ ๋ป์ด๋ค.
- controllerMap์ key๋ ๋งคํ URL, value๋ ํธ์ถ๋ ์ปจํธ๋กค๋ฌ์ด๋ค.
- ๋จผ์ requestURI๋ฅผ ์กฐํํด์ ์ค์ ํธ์ถํ ์ปจํธ๋กค๋ฌ๋ฅผ controllerMap์์ ์ฐพ๋๋ค(์์ผ๋ฉด 404).
์ปจํธ๋กค๋ฌ๋ฅผ ์ฐพ๊ณ controller.process(request, response)๋ฅผ ํธ์ถํด์ ํด๋น ์ปจํธ๋กค๋ฌ๋ฅผ ์คํํ๋ค.
๋ค์ ์๊ฐ์๋ ์ค๋ณต์ ์ ๊ฑฐํ์ฌ ์ข ๋ ๊น๋ํ ์ฝ๋๋ก V2๋ฅผ ๋ง๋ค์ด๋ณด์!