JSP(JavaServer Page)

JSP(JavaServer Page) - 14 : MVC 패턴을 활용한 응용 예제

n.han 2016. 7. 28. 23:10

- 주소록 프로그램


1) 구조


본 프로그램은 다음과 같은 구조로 되어 있다.


2) 설명


(1) index.jsp


- 초기 클라이언트가 request 요청을 보내는 곳이다. pageContext.forward("control.jsp?action=list");로 control.jsp 페이지로


forwarding하고 있다. 여기서 forwarding하는 이유는 클라이언트가 control.jsp로 페이지 전환하는 것을 느낄 필요가 없기 때문이다.


(2) control.jsp


- control 부분을 담당한다. 먼저 <%page, 즉 page 지시자의 errorPage 속성을 통하여 error가 발생 시 처리할 웹 페이지를 지정했다.


- 클라이언트로부터의 request를 request.getMethod().equals("POST")를 통하여 POST 방식인 경우에만 request.setCharacterEncoding("UTF-8")하고 있다.


- <jsp:useBean id="ab" class="jspbook.addrbook.AddrBean" scope="session"/>,

  <jsp:useBean id="addrbook" class="jspbook.addrbook.AddrBook"/>을 통하여 Bean 객체와 Book 객체를 생성했다. 

  또한, <jsp:setProperty name="addrbook" property="*"/>를 통하여 request에 탑재된 파라미터들로 addrbook 객체의 멤버 변수를 초기화 하는 모습을 볼 수 있다.


- request.getParameter("action")을 통해서 action 파라미터의 값을 가져오고, 이 값에 따라 control을 하고 있다.


  1) action == null || action.equals("list")

  => pageContext.forward("list.jsp") : control.jsp에서 페이지 전환이 일어나므로 forwarding한다.

  => DAO 객체인 ab.getDBList() 메서드를 통하여 ArrayList<AddrBook>를 가져오고, 이를 request.setAttribute("datas", data);하여 list.jsp로 보낸다.


  2) action.equals("insertForm")

  => pageContext.forward("insertForm.jsp");


  3) action.equals("insert")

  => ab.insertDB(addrbook) : 위에서 <jsp:setProperty name="addrbook" property="*"/>를 통해서 초기화한 객체를 DAO 객체를 통해서 insert한다.

  => response.sendRedirect("control.jsp?action=list");를 통해 control로 redirection하고, action=list를 주어 control이 list.jsp로 forward할 수 있도록 해준다.


  4) action.equals("edit")

  => AddrBook abook = ab.getDB(addrbook.getAb_id());를 통해서 addrbook에 포함된 id 값을 가져오고, 그 id 값으로 DAO 객체의 getDB() 메서드를 통해서 해당 Book 객체를 가져온다.

  => request.setAttribute("ab", abook)를 통해서 request에 DO 객체를 set하고,

  => edit_form.jsp 페이지로 forwarding한다.


  5) action.equals("update")

  => ab.updateDB(addrbook)를 통해서 update하고, response.sendRedirect(control.jsp?action=list)한다.


  6) action.equals("delete")

  => 삭제할 addrbook 객체의 id를 가져오기 위해서 addrbook.getAb_id()하고, 그 id값을 이용하여 ab.deleteDB(id)한다.

  => response.sendRedirect(control.jsp?action=list);를 통해서 응답을 control.jsp로 redirect하고, action=list를 활용하여 control.jsp가 list.jsp로 forwarding할 수 있도록 한다.


(3) list.jsp


- 수정/삭제를 하려면 location.href="control.jsp?action=edit&id=" + id + "&passwd=" + passwd;를 통해서 페이지 전환한다.


- 주소록 등록 클릭 시, control.jsp?action=insertForm으로 control.jsp로 페이지 이동 후, control.jsp에서 form.jsp로 forwarding할 수 있도록 한다.


- list.jsp에 들어 오려면 request.getAttribute("datas")에 ArrayList<AddrBook> 속성 값이 있다. 이를 향상된 for문과 getter를 활용하여 모든 DO 객체의 멤버 변수의 값을 출력한다. 


(4) form.jsp


- 주소록 목록으로를 클릭하면 control.jsp로 이동하고, ?action=list를 활용하여 list로 control.jsp가 forwarding할 수 있도록 해준다.


- 저장 버튼을 누르면 submit된다. hidden type의 이름이 action이고 값이 insert인 속성을 form에서 post 방식으로 control.jsp로 이동 시 탑재하며, 이 값을 통하여 control.jsp가 addrbook 객체를 DAO 객체를 통하여 insert하고, 다시 control.jsp?action=list로 response.sendRedirect()하여 주소록 목록 페이지를 보여줄 수 있도록 한다.


(5) edit_form.jsp


- <jsp:userBean id="ab" class="jspbook.addrbook.AddrBook" scope="request"/>를 통해서, request에 탑재된 ab 속성에 있는 abook(DO 객체)를 ab라는 레퍼런스 명으로 넣는다.