티스토리 뷰
반응형
지난 시간에는 frontcontroller를 도입했다. 이렇게 frontcontroller를 도입하고 나면 pagecontroller는 일반 자바 객체로 만들 수가 있다. 이것을 POJO라고 한다. 이 때는 PageController interface의 규칙에 따라 구현해야 한다.
1) controller 패키지 작성
src/main/java 아래에 controller 패키지를 추가한다.
2) controller 패키지 아래에 PageController interface를 만들어 준다.
interface는 구현하는 클래스가 따라야 할 일종의 규약이다. PageController interface에는 service() 메서드를 구현하는데 이는 나중에 스프링을 도입할 때를 대비해 스프링을 흉내낸 것이다.
1 2 3 4 5 6 7 8 9 10 | package controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public interface PageController { String service(HttpServletRequest request, HttpServletResponse response) throws Exception; } | cs |
3) MemberListController 클래스를 만든다.
전에 사용하던 MemberListServlet을 복사해 와서 MemberListController을 만들자. 이 클래스는 당연히 PageController를 implements 해서 사용한다.
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 | package controller; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import dao.MemberDao; import domain.Member; public class MemberListController implements PageController { MemberDao memberDao; public MemberListController(MemberDao memberDao) { this.memberDao = memberDao; } @Override public String service(HttpServletRequest request, HttpServletResponse response) throws Exception { response.setContentType("text/html;charset=UTF-8"); List<Member> list = memberDao.selectList(); request.setAttribute("list", list); return "/view/list.jsp"; } } | cs |
4) Listener에 객체 구현
POJO로 작성된 객체는 톰캣에 자동으로 생성되지 않기 때문에 Listener에 직접 등록 해야 한다. ContextLoaderListener에 다음과 같은 코드를 추가하면 된다.
sc.setAttribute("member/list", new MemberListController(memberDao));
5) DispatcherServlet 수정
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 32 33 34 35 36 37 38 39 40 41 | package servlet; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletContext; 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 controller.PageController; @WebServlet("/app/*") public class DispatcherServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String pathInfo = req.getPathInfo(); resp.setContentType("text/html;charset=UTF-8"); // ServletContext에 저장된 PageController를 찾는다. ServletContext sc = req.getServletContext(); PageController pageController = (PageController)sc.getAttribute(pathInfo); String view = ""; try { view = pageController.service(req, resp); } catch (Exception e) { e.printStackTrace(); } RequestDispatcher rd = req.getRequestDispatcher(view); rd.include(req, resp); } } | cs |
반응형
'framework > Spring' 카테고리의 다른 글
Spring in Action 요약 1. 스프링 속으로 (0) | 2019.04.29 |
---|---|
애노테이션으로 요청 핸들러 다루기 (0) | 2018.08.09 |
FrontController 도입 (0) | 2018.08.03 |
마이바티스(mybatis) 도입 (0) | 2018.08.02 |
JSP 도입과 MVC 패턴 (0) | 2018.07.31 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- REST API
- 문장 생성기
- 유지보수
- Markov
- 디자인패턴
- 야근
- markov chain
- 자바스크립트 개론
- 전략패턴
- 몰라서망신
- 경고
- Count
- RESTful
- 코딩의 기술
- 클린코드
- html
- 마르코프
- restful api
- 로그
- GROUP BY
- java
- DP
- Spring in Action
- 자바스크립트개론
- 동적계획법
- CONVENTIONS
- 크롬
- was
- 마르코프 연쇄
- Warning
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함