-
pageController를 POJO로 변환framework/Spring 2018. 8. 7. 16:17반응형
지난 시간에는 frontcontroller를 도입했다. 이렇게 frontcontroller를 도입하고 나면 pagecontroller는 일반 자바 객체로 만들 수가 있다. 이것을 POJO라고 한다. 이 때는 PageController interface의 규칙에 따라 구현해야 한다.
1) controller 패키지 작성
src/main/java 아래에 controller 패키지를 추가한다.
2) controller 패키지 아래에 PageController interface를 만들어 준다.
interface는 구현하는 클래스가 따라야 할 일종의 규약이다. PageController interface에는 service() 메서드를 구현하는데 이는 나중에 스프링을 도입할 때를 대비해 스프링을 흉내낸 것이다.
12345678910package 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 해서 사용한다.
1234567891011121314151617181920212223242526272829package 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;}@Overridepublic 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 수정
1234567891011121314151617181920212223242526272829303132333435363738394041package 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 {@Overrideprotected 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