// NoticeController.java // 공지사항 리스트
package controllers.customer;
public class NoticeController implements Controller { // 스프링이 제공 (Controller)
private NoticeDao noticeDao;
public void setNoticeDao(NoticeDao noticeDao) { // setter
this.noticeDao = noticeDao;
}
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
throws Exception {
String _page = request.getParameter("pg");
String _field = request.getParameter("f");
String _query = request.getParameter("q");
int page = 1;
String field = "TITLE";
String query = "%%"
if(_page == null && _page.equals("")) page = Integer.parseInt(_page);
if(_field == null && _field.equals("")) field = _field;
if(_query == null && _query.equals("")) query = _query;
List<Notice> list = noticeDao.getNotices(page, field, query); // 페이지번호, 검색항목, 검색어
ModelAndView mv = new ModelAndView("notice.jsp");
mv.addObject("listData", list);
return mv;
}
}
실행 호출 : notice.tst?pg={param.pg}&f={param.f}&q={param.q}
실행 결과 : 공지사항 리스트 정보 (listData)
- 코드 설명 -
* NoticeDao 클래스 인스턴스를 별도로 생성. (기존 예제에서는 handleRequest 함수 이내에서 처리함)
* Setter 함수도 생성.
* 이전의 고전적인 JSP 방식에서는 DB처리를 위한 noticeDao 클래스를 만들어 그 인스턴스 객체를 사용하여 작업하였지만, 여전히, 객체를 생성, 호출하는 부분이 분리되지 않음. 매번 만들어야 함. 또한 함수 내에 있는 NoticeDao는 빈(Bean) 객체로 생성할 수도 없고, XML에서 접근 불가. XML을 활용하면 noticeDao의 생성과 초기화, 디펜던시 등을 분리하여 관리할 수 있음. DB등의 정보가 변경되어도 XML파일만 수정.
package controllers.customer;
public class NoticeDetailController implements Controller { // 스프링이 제공 (Controller)
private NoticeDao noticeDao;
public void setNoticeDao(NoticeDao noticeDao) { // setter
this.noticeDao = noticeDao;
}
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
throws Exception {
String seq = request.getParameter("seq");
Notice notice = noticeDao.getNotice(seq);
ModelAndView mv = new ModelAndView("noticeDetail.jsp");
mv.addObject("noticeData", notice);
return mv;
}
}
실행 호출 : noticeDetail.tst?pg={param.pg}&f={param.f}&q={param.q}
실행 결과 : noticeData 객체를 페이지에 전달하여 적절한 내용을 출력함.
<bean name="noticeDao" class="dao.NoticeDao">
// 빈 객체 생성하고 값(레퍼런스)를 주입.
// setNoticeDao() 호출을 통한 값(레퍼런스) 배정 (value or ref )
<bean name="customer/notice.tst" class="controllers.customer.NoticeController">
<property name="noticeDao" ref="noticeDao"></property>
</bean>
<bean name="customer/noticeDetail.tst" class="controllers.customer.NoticeDetailController">
<property name="noticeDao" ref="noticeDao"></property>
</bean>
* XML에서 noticeDao 객체를 각 빈(Bean) noticeController와 NoticeDetailController에 생성하고, 주입.
// noticeDetail.jsp // 공지사항 상세 정보 표시 페이지
<div id=notice-article-detail">
<dl class="article-detail-row">
<dt class="article-detail-title">제목</dt>
<dd class="article-detail-data">
${notice.title}
</dd>
</dl>
<dl class="article-detail-row">
<dt class="article-detail-title">작성일</dt>
<dd class="article-detail-data">
${notice.regDate}
</dd>
</dl>
…
</div>
이러한 AOP 구현에 있어서 XML 방식의 문제점.
* XML에 URL 수만큼 Bean객체를 생성하여 객체 값을 설정 해야하는 어려움이 있음.
* 문제가 되는 이유는 Controller 클래스에는 URL에 매핑되는 오버라이드(Override)된 handleRequest 함수가 하나씩만 배정되어 있음.
* URL에 반응하는 Controller가 함수 하나 하나마다 매번 캡슐(java 페이지) 생성해야 하므로, 코드 작성의 어려움이 있음. 즉 소스 페이지(JSP, XML, JAVA 등)가 여러 곳에 산재하게 됨. -> 웹 서비스 규모에 따른 너무 많은 개체 수 관리.
출처: http://ooz.co.kr/224?category=818548 [이러쿵저러쿵]
'Web Programming > spring' 카테고리의 다른 글
Spring MVC 프로세스 (0) | 2018.08.29 |
---|---|
Spring AOP with Annotation (0) | 2018.08.29 |
Spring MVC jsp jstl (0) | 2018.08.29 |
Spring MVC Model2 (0) | 2018.08.29 |
Spring 빈 후처리기 (0) | 2018.08.29 |