Model : 데이터를 처리하는 모듈이고 자바빈즈로 구성 (GuestbookDao,GuestbookVo)
View : 사용자 인터페이스 요소 (ex: 입력창,체크박스)
Controller : 요청받은것을 전달하고 View를 선택하는 역할
복잡한 요구사항 처리
코딩과 유지보수가 쉬움
데이터를 처리하는 모듈
//JDBC Driver 로딩
Class.forName("org.mariadb.jdbc.Driver");
//연결하기
String url = "jdbc:mysql://127.0.0.1:3306/DB이름?charset=utf8";
conn = DriverManager.getConnection(url, "DB계정", "계정비번");
- DB에 저장돼있는 방명록 리스트들을 조회하는기능
- select 쿼리문을 prepareStatement객체로 sql 실행
- resultset에서 제공하는 next()메소드로 select쿼리 결과가 존재하는지 확인
*resultset은 쿼리 결과를 행단위로 저장한다.
- 존재한다면 그 행의 값들(방명록 홈페이지에 표시해야할 정보들 : no,name,regDate,message)을 resultset에서 제공하는 getter메소드(ex:getLong())로 자료형에 맞게 변수에 저장
- 저장한 값들은 List 컬렉션 인터페이스를 구현한 ArrayList에 추가한다.
insert와 delete 메소드는 findall 메소드와 전체적인 구성은 비슷하다
- 차이점
sql문에 바인딩하는 것 추가
데이터를 getter메소드로 얻어오거나 Arraylist에 저장하는 부분은 제거
getters and setters메소드로 구성됨
애플리케이션 화면
<%
List<GuestbookVo> list = (List<GuestbookVo>)request.getAttribute("list");
%>
홈페이지 접속시 요청 (http://localhost:8080/guestbook02/gb) 이
들어왔을 때 컨트롤러에서 조회를 하고
응답된 결과인 DB의 정보를 index.jsp에 보내줘서 list에 담는다
방명록 추가
post방식 사용
방명록 삭제
개인이 설정한 비밀번호를 새창에서 확인하는 방식
그러므로 a태그의 속성인 href로 넘긴다
<td><a href="<%=request.getContextPath()%>/gb?a=deleteform&no=<%=vo.getNo()%>">삭제</a></td>
- getContextPath() 는 http://localhost:8080/guestbook02/delteform.jsp에서 /guestbook02를 가져온다
즉, 상대 경로를 가져오므로 이식성에 장점이 있다.
- 경로에서 &는 다중파라미터를 넘길 때 사용
- 삭제할 게시물은 번호로 구분해야하므로 요청에 no파라미터로 같이 넘겨준다.
나머지는 html 코드로 구성
- index.jsp에서 보낸 요청(http://localhost:8080/guestbook02/gb?a=deleteform&no=삭제할게시물넘버)
을 컨트롤러에서 요청의 파라미터(a=~~~) 구분해서
View 선택(deleteform.jsp)
- 이때 요청도 전달되므로 getparameter로 삭제할 게시물 번호를 얻어와서
post로 다시 전달
<form method="post" action="<%=request.getContextPath()%>/gb?a=delete">
<input type="hidden" name="no" value="<%=request.getParameter("no") %>">
<input type="password" name="password" >
<input type="submit" value="확인">
</form>
나머지는 html 코드
파라미터 구분해서 View 선택, 요청 전달
요청 종류
1. <form action="/guestbook02/gb" method="post">
<input type = "hidden" name = "a" value = "add">
2. "http://localhost:8080/guestbook02/gb"
3. "http://localhost:8080/guestbook02/gb?a=deleteform&no=삭제할게시물넘버"
4. "http://localhost:8080/guestbook02/gb?a=delete"
index에서 방명록 작성(확인버튼)시 넘어오는 값
add파라미터일 때 같이 넘어온 정보들을 getparameter로 각변수에 저장
vo객체를 생성해서 값들을 저장하고 dao객체의 insert메소드를 통해 DB에 insert 시킨다
★ response.sendRedirect("/guestbook02/gb");
추가기능이나 삭제기능은 새로고침시 데이터가 중복돼서 추가되거나 삭제될 수 있으므로 위 구문을 추가해서 메인 페이지로 이동 시킨다.
GuestbookDao 객체의 findAll 메소드의 리턴값을 List객체에 저장한다. * dao객체의 findAll()은 ArrayList값(DB정보들)을 리턴한다.
request.setAttribute("list", list);
// 이름이 "list"인 속성의 값 list를 내장객체인 request의 setAttribute메소드로 저장한다
RequestDispatcher객체의 getRequestDispatcher()를 통해 index.jsp로 View를 선택
RequestDispatcher객체의 forward로 요청과 응답을 전달
전달된 요청은 추후 View인 index.jsp에서 request.getAttribute("list")로 값을 가져온다