티스토리 뷰
반응형
우리가 만든 회원 리스트는 오로지 하나의 jsp창만을 출력하는 간단한 구조이지만 서블릿이 많아지면 서블릿마다 반복되는 코드들이 늘어난다. 스프링에서는 프론트 컨트롤러를 이용해 이런 작업을 처리한다. 스프링을 흉내내어 프론트콘트롤러를 간단하게 만들어 보자.
1) src/main/java/servlet 패키지 내에 DispatcherServlet 클래스를 작성한다.
2) 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 | package 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 { @Override protected 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와 관련된 코드는 삭제해야 한다.
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 | package 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 { @Override protected 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 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Spring in Action
- GROUP BY
- 마르코프
- 몰라서망신
- 자바스크립트개론
- 전략패턴
- 유지보수
- java
- 자바스크립트 개론
- was
- CONVENTIONS
- DP
- RESTful
- Count
- 크롬
- markov chain
- Markov
- Warning
- 마르코프 연쇄
- 경고
- 동적계획법
- 로그
- 클린코드
- REST API
- restful api
- 코딩의 기술
- 야근
- html
- 문장 생성기
- 디자인패턴
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함