250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 스프링컨테이너
- @configuration
- 서블릿
- 오버라이딩
- fielderror
- 티스토리챌린지
- 의존관계
- 김영한
- http 메시지 컨버터
- 코딩테스트
- 코드트리
- objecterror
- 싱글톤
- 인터페이스
- 오블완
- ocp
- java
- html form
- HttpServletResponse
- 스프링
- equals()
- 프록시
- JSON
- 백준
- 코드트리조별과제
- 추상클래스
- 다형성
- DI
- 테스트코드
- 참조변수
Archives
- Today
- Total
minOS
MVC 프레임워크 만들기 - 프론트 컨트롤러 Ver 1 본문
728x90
프론트 컨트롤러 Ver 1
VER 1 구조
서블릿과 비슷한 모양의 컨트롤러 인터페이스를 도입한다. 각 컨트롤러들은 이 인터페이스를 구현하면 된다. 프론트 컨 트롤러는 이 인터페이스를 호출해서 구현과 관계없이 로직의 일관성을 가져갈 수 있다.
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); } }
참고) 기존 코드
@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); //서블릿에서 JSP 호출 } }
보다시피 내부 로직은 기존 서블릿과 같다.FrontControllerServletV1 - 프론트 컨트롤러
@WebServlet(name="frontControllerServletV1",urlPatterns = "/front-controller/v1/*") public class FrontControllerServletV1 extends HttpServlet { //key == url , value = controller 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 { System.out.println("FrontControllerServletV1.service"); String requestURI = request.getRequestURI(); ControllerV1 controller = controllerMap.get(requestURI); if (controller == null){ response.setStatus(HttpServletResponse.SC_NOT_FOUND); return; } controller.process(request,response); } }
key는 요청 url 이고 value는 각 url 에 해당하는 컨트롤러인 해쉬맵을 만든다.
request.getRequestURI()을 통해 url을 추출하여 해쉬맵에 키를 집어 넣으면 요청 url에 알맞는 컨트롤러가 나오는 것을 볼 수 있다. 각 컨트롤러에서 기존 로직을 수행한다.
해쉬맵에 요청 url인 key 가 없다면 404 상태 코드 반환한다.
urlPatterns = "/front-controller/v1/*" * 은 v1 하위 모든 요청을 해당 컨트롤러가 받는다는 뜻이다.
ex)/front-controller/v1/a/b , /front-controller/v1/save 등 ..
728x90
'TIL > 김영한의 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술' 카테고리의 다른 글
MVC 프레임워크 만들기 - 프론트 컨트롤러 Ver 3 (0) | 2024.07.01 |
---|---|
MVC 프레임워크 만들기 - 프론트 컨트롤러 Ver 2 (0) | 2024.06.29 |
MVC 프레임워크 만들기 - 프론트 컨트롤러 도입 (0) | 2024.06.29 |
서블릿, JSP, MVC 패턴 - MVC 패턴 (0) | 2024.06.26 |
서블릿, JSP, MVC 패턴 - JSP로 회원 관리 웹 애플리케이션 만들기 (0) | 2024.06.24 |