본문 바로가기
java spring/servlet&jsp

서블릿 jsp 11 (컨트롤러 나누기)

by 킹차니 2021. 4. 7.

지금까지 서블릿을 컨트롤러와 뷰로 나누었다. 하지만 일반적으로 여기서 컨트롤러를 다시 나눈다.

컨트롤러는 요청을 받으면 그 요청을 서비스에게 다시 보내는 식으로 나누는 것이다.

 

위와 같이

사용자의 요청 -> 컨트롤러가 요청을 받고 처리할 서비스를 서비스에게 전달 ->  서비스에서 처리하고 모델을 만들어서  -> 컨트롤러에게 전달 -> 모델을 받은 컨트롤러가 뷰로 전달 -> 사용자에게 화면 출력

 

일단 컨트롤러의 코드를 보자.

NoticeListController

1. 사용자가 /notice/list의 url을 요청한다. 그렇게 되면 위의 컨트롤러에 매핑되고 

2. doGet메소드가 실행된다. 처음에 요청할 때는 /notice/list 위에 쿼리스트링이 따로 없으므로 각각 field는 "title", query ="" 이다.

3. 그리고 NoticeService의 서비스를 실행시키기 위해 service 객체를 만들고. 

4. service.getNoticeList("title", "", 1)을 실행시킨다.

 

이제 Service로 가보자.

NoticeService

이처럼 서비스에는 컨트롤러 요청하는 여러 서비스를 실행하는 메소드들이 정의 되어있다.

이 중에서 맨 처음에 요청하는 서비스인 getNoticeList메소드를 봐보자.

NoticeService의 getNoticeList메소드

5. getNoticeList메소드는 인자를 바탕으로 DB에서 Notice데이터들을 가져와서 list에 담고 이를 반환해준다. 

 

즉 요 list가 모델이되고 이 모델이 컨트롤러에 전달되는 것이다.

다시 NoticeListController의 40Line을 보자.

 

6. service.getNoticeList가 모델을 반환하면 이 모델을 다시 list에 담는다.

7. request저장소에 "list"라는 이름으로 list를 저장한다.

8. 디스패처의 도움을 받아 list.jsp와 포워딩하여 request 저장소를 공유할 수 있게 된다.

 

이제 뷰를 보자.

list.jsp

9. jstl을 사용하여 items="${list}"에서 request저장소에 있는 list를 뽑아서 var ="n"으로 n이라는 이름으로 지역 변수화 한다.

10. foreach문을 사용하여 n에 있는 데이터들을 출력한다.

 

사용자의 화면 결과는 아래와 같다.

화면에 출력된 결과들