지금까지 서블릿을 컨트롤러와 뷰로 나누었다. 하지만 일반적으로 여기서 컨트롤러를 다시 나눈다.
컨트롤러는 요청을 받으면 그 요청을 서비스에게 다시 보내는 식으로 나누는 것이다.
위와 같이
사용자의 요청 -> 컨트롤러가 요청을 받고 처리할 서비스를 서비스에게 전달 -> 서비스에서 처리하고 모델을 만들어서 -> 컨트롤러에게 전달 -> 모델을 받은 컨트롤러가 뷰로 전달 -> 뷰는 사용자에게 화면 출력
일단 컨트롤러의 코드를 보자.
1. 사용자가 /notice/list의 url을 요청한다. 그렇게 되면 위의 컨트롤러에 매핑되고
2. doGet메소드가 실행된다. 처음에 요청할 때는 /notice/list 위에 쿼리스트링이 따로 없으므로 각각 field는 "title", query ="" 이다.
3. 그리고 NoticeService의 서비스를 실행시키기 위해 service 객체를 만들고.
4. service.getNoticeList("title", "", 1)을 실행시킨다.
이제 Service로 가보자.
이처럼 서비스에는 컨트롤러 요청하는 여러 서비스를 실행하는 메소드들이 정의 되어있다.
이 중에서 맨 처음에 요청하는 서비스인 getNoticeList메소드를 봐보자.
5. getNoticeList메소드는 인자를 바탕으로 DB에서 Notice데이터들을 가져와서 list에 담고 이를 반환해준다.
즉 요 list가 모델이되고 이 모델이 컨트롤러에 전달되는 것이다.
다시 NoticeListController의 40Line을 보자.
6. service.getNoticeList가 모델을 반환하면 이 모델을 다시 list에 담는다.
7. request저장소에 "list"라는 이름으로 list를 저장한다.
8. 디스패처의 도움을 받아 list.jsp와 포워딩하여 request 저장소를 공유할 수 있게 된다.
이제 뷰를 보자.
9. jstl을 사용하여 items="${list}"에서 request저장소에 있는 list를 뽑아서 var ="n"으로 n이라는 이름으로 지역 변수화 한다.
10. foreach문을 사용하여 n에 있는 데이터들을 출력한다.
사용자의 화면 결과는 아래와 같다.
'java spring > servlet&jsp' 카테고리의 다른 글
서블릿 jsp 8(프로젝트 시작하기) (0) | 2021.04.05 |
---|---|
서블릿, jsp 7(EL, 내장객체) (0) | 2021.04.04 |
서블릿, jsp 6 (0) | 2021.04.03 |
서블릿 5( 동적 페이지의 필요성) (0) | 2021.04.01 |
서블릿4(application, session, cookie) (0) | 2021.04.01 |