-
FrontController 도입framework/Spring 2018. 8. 3. 17:08반응형
우리가 만든 회원 리스트는 오로지 하나의 jsp창만을 출력하는 간단한 구조이지만 서블릿이 많아지면 서블릿마다 반복되는 코드들이 늘어난다. 스프링에서는 프론트 컨트롤러를 이용해 이런 작업을 처리한다. 스프링을 흉내내어 프론트콘트롤러를 간단하게 만들어 보자.
1) src/main/java/servlet 패키지 내에 DispatcherServlet 클래스를 작성한다.
2) DispatcherServlet에서는 모든 요청을 잡아서 다른 페이지 컨트롤러(서블릿)에 위임한다.
12345678910111213141516171819202122232425262728293031323334package servlet;import java.io.IOException;import javax.servlet.RequestDispatcher;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;// app 이하로 들어오는 요청은 모두 프론트 콘트롤러에서 처리한다.@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");// 다른 서블릿 (페이지 컨트롤러)으로 위임한다.RequestDispatcher rd = req.getRequestDispatcher(pathInfo);rd.include(req, resp);// 다른 서블릿 (페이지 컨트롤러)가 실행을 끝낸 후 view 이름을 저장한 jsp를 실행한다.String view = (String)req.getAttribute("view");System.out.println(view);rd = req.getRequestDispatcher(view);rd.include(req, resp);}}cs 3) 페이지 콘트롤러 서블릿에도 attribute에 주소를 추가해주고 requestdispatcher와 관련된 코드는 삭제해야 한다.
123456789101112131415161718192021222324252627282930313233343536package servlet;import java.io.IOException;import java.util.List;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 dao.MemberDao;import domain.Member;@WebServlet("/member/list")public class MemberList extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=UTF-8");try {ServletContext sc = this.getServletContext();MemberDao memberDao = (MemberDao) sc.getAttribute("memberDao");List<Member> list = memberDao.selectList();request.setAttribute("list", list);request.setAttribute("view", "/view/list.jsp");} catch (Exception e) {e.printStackTrace();}}}cs 34이제 frontcontroller를 도입한 버전까지 완성했다.
반응형'framework > Spring' 카테고리의 다른 글
애노테이션으로 요청 핸들러 다루기 (0) 2018.08.09 pageController를 POJO로 변환 (0) 2018.08.07 마이바티스(mybatis) 도입 (0) 2018.08.02 JSP 도입과 MVC 패턴 (0) 2018.07.31 JDBC+DAO 활용한 회원 리스트 만들기 (0) 2018.07.30