/* ์ด ๊ธ์ ๊น์ํ๋์ ๊ฐ์๋ฅผ ๋ณด๊ณ ์ ๋ฆฌํ๋ ค๊ณ ์์ฑํ ๊ธ์ ๋๋ค.
๊ฐ์ธ์ ์ธ ๊ณต๋ถ๋ฅผ ์ํด ์ฌ๋ฆฌ๋ ๊ธ์ด๋ฏ๋ก ์ค๊ฐ ์ค๊ฐ ์ฝ๋๋ ์๋ต๋์์ต๋๋ค. */
1. V2 ๊ตฌ์กฐ
- ๋ชจ๋ ์ปจํธ๋กค๋ฌ์์ ๋ทฐ๋ก ์ด๋ํ๋ ๋ถ๋ถ์ ์ค๋ณต์ด ์๊ณ , ๊น๋ํ์ง ์์๋ค.
String viewPath = "/WEB-INF/views/new-form.jsp";
RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath);
dispatcher.forward(request, response);
- ์ด ๋ถ๋ถ์ ๊น๋ํ๊ฒ ๋ถ๋ฆฌํ๊ธฐ ์ํด ๋ณ๋๋ก ๋ทฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด๋ณด์.
- V1์์๋ Contoroller์์ ๋ฐ๋ก JSP๋ก ์ง์ forward ํด์คฌ๋ค๋ฉด V2์์๋ MyView๋ผ๋ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์
๋ฐํ์ ํ๋๋ก ๊ต์ฒดํ๋ค
2. ๊ตฌํ
MyView
public class MyView {
private String viewPath;
public MyView(String viewPath) {
this.viewPath = viewPath;
}
public void render(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath);
dispatcher.forward(request,response);
}
}
ControllerV2
public interface ControllerV2 {
MyView process(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException;
}
MemberFormControllerV2 - ํ์ ๋ฑ๋ก ํผ
public class MemberFormControllerV2 implements ControllerV2 {
@Override
public MyView process(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
return new MyView("/WEB-INF/views/new-form.jsp");
}
}
- ์ด์ ๊ฐ ์ปจํธ๋กค๋ฌ๋ ๋ณต์กํ dispather.forward()๋ฅผ ์ง์ ์์ฑํด์ ํธ์ถํ์ง ์์๋ ๋๋ค.
MemberSaveCotrollerV2 - ํ์ ์ ์ฅ
public class MemberSaveControllerV2 implements ControllerV2 {
private MemberRepository memberRepository = MemberRepository.getInstance();
@Override
public MyView 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);
return new MyView("/WEB-INF/views/save-result.jsp");
}
}
MemberListCotrollerV2 - ํ์ ์ ์ฅ
public class MemberListControllerV2 implements ControllerV2 {
private MemberRepository memberRepository = MemberRepository.getInstance();
@Override
public MyView process(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List<Member> members = memberRepository.findAll();
request.setAttribute("members", members);
return new MyView("/WEB-INF/views/members.jsp");
}
}
FrontControllerV2
@WebServlet(name = "frontControllerServletV2", urlPatterns = "/front-controller/v2/*")
public class FrontControllerServletV2 extends HttpServlet {
private Map<String, ControllerV2> controllerMap = new HashMap<>();
public FrontControllerServletV2() {
controllerMap.put("/front-controller/v2/members/new-form", new MemberFormControllerV2());
controllerMap.put("/front-controller/v2/members/save", new MemberSaveControllerV2());
controllerMap.put("/front-controller/v2/members", new MemberListControllerV2());
}
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String requestURI = request.getRequestURI();
ControllerV2 controller = controllerMap.get(requestURI);
if(controller == null) {
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
return;
}
MyView view = controller.process(request, response);
view.render(request,response);
}
}
- ControllerV2์ ๋ฐํํ์ ์ด MyView์ด๋ฏ๋ก ํ๋ก ํธ ์ปจํธ๋กค๋ฌ๋ ์ปจํธ๋กค๋ฌ ํธ์ถ ๊ฒฐ๊ณผ๋ก MyView๋ฅผ ๋ฐํ๋ฐ๋๋ค.
๊ทธ๋ฆฌ๊ณ view.render()๋ฅผ ํธ์ถํ๋ฉด forward ๋ก์ง์ ์ํํด JSP๊ฐ ์คํ๋๋ค.
V3์์๋ ๊ตฌํํ๋ ์ปจํธ๋กค๋ฌ๊ฐ ์๋ธ๋ฆฟ ๊ธฐ์ ์ ์ ํ ์ฌ์ฉํ์ง ์๋๋ก ๋ณ๊ฒฝํด๋ณด์.
์ด๋ ๊ฒ ํ๋ฉด ๊ตฌํ ์ฝ๋๋ ๋จ์ํด์ง๋ฉฐ ํ ์คํธ ์ฝ๋ ์์ฑ์ด ์ฌ์์ง๋ค.