ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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() 메서드를 구현하는데 이는 나중에 스프링을 도입할 때를 대비해 스프링을 흉내낸 것이다.


    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
Designed by Tistory.