티스토리 뷰

framework/Spring

FrontController 도입

북항 2018. 8. 3. 17:08
donaricano-btn
반응형

우리가 만든 회원 리스트는 오로지 하나의 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를 도입한 버전까지 완성했다.

반응형
donaricano-btn
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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
글 보관함