우선 간단히 구조를 살펴보도록 합시다.
simpleboard패키지안에 actions, controller, jdbcdriver, model이 있습니다.
actions
deleteAction클래스 - 글을 지울 때 쓰이는 액션
listAction클래스 - 글목록을 보여줄 때 쓰이는 액션
modifyAction클래스 - 글을 수정할 때 쓰이는 액션
modifyformAction클래스 - 글을 수정할 때 비밀번호를 입력해서 맞는지 확인할 때 쓰이는 액션
showAction클래스 - 글을 볼 때 쓰이는 액션
writeAction클래스 - 글을 쓸 때 쓰이는 액션
controller
KoRequestProcessor클래스 - 잘은 모르지만 한글을 가능하게 해주는 클래스입니다.
jdbcdriver
DBCInit클래스 - DB를 초기화시키는 클래스가 있습니다.
model
Board클래스 - 객체에 내용을 담을 수 있게 해주는 빈클래스입니다.
BoardDAO클래스 - write, delete, modify, getList 등 실제적으로 수행하는 메소드를 모아놓은 클래스입니다.
클래스 구조는 대충 이렇습니다.
간단합니다. 예를 들면 write.do액션이 들어오면 writeAction을 수행하는데 이 클래스 안에서 DAO를 생성해서 write메소드를 호출하는 형식으로 되어있습니다.
나머지 delete나 modify도 같은 형식으로 이루어져 있습니다.
조금 다른 list보기를 설명해보도록 하겠습니다.
struts-config에 다음과 같이 액션매핑에 액션을 정의합니다.
<action path="/list"
type="simpleboard.actions.listAction"
scope="request">
<forward name="success" path="/list.jsp"/>
</action>
list.do를 실행하면 listAction을 실행하는데 성공을 리턴하면 list.jsp를 포워드하라는 뜻입니다.
listAction을 보도록 합시다.
listAction.java
[code]
package simpleboard.actions;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import java.util.List;
import simpleboard.model.Board;
import simpleboard.model.BoardDAO;
public class listAction extends Action {
final int countPerPage = 10;
public ActionForward execute( ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception{
int currentPage;
int totalPage;
String pageNum = request.getParameter("page");
if (pageNum == null)
pageNum = "1";
currentPage = Integer.parseInt(pageNum);
BoardDAO dao = new BoardDAO();
List<Board> BoardList = dao.getList(currentPage, countPerPage);
totalPage = dao.getTotalPage(countPerPage);
HttpSession session = request.getSession();
session.setAttribute("boardlist", BoardList);
request.setAttribute("currentpage", new Integer(currentPage));
request.setAttribute("totalpage", new Integer(totalPage));
request.setAttribute("nextpage", new Integer(currentPage+1));
request.setAttribute("prevpage", new Integer(currentPage-1));
return mapping.findForward("success");
}
}
[/code]
우선 list.do?page=숫자 형식으로 실행하는데 list.do로 실행하게되면 1로 인식을 하게 됩니다.
그리고 받은 값을 DAO의 geList에 2개의 인자를 전달합니다(현재페이지번호, 한페이지당게시물수).
현재페이지번호에 맞는 게시물들을 List에 다 받게 됩니다. 이것을 session에 저장해서 list.jsp에 출력해주는 식입니다.
그리고, 총페이지수와 다음페이지, 이전페이지 값을 전달해줘서 처음인지 끝인지를 판단할 수 있게하고 다음페이지와 이전페이지를 수행하도록 값을 넘겨줍니다.
이제 list.jsp를 보도록 합시다.
list.jsp
[code]
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>심플보드에 오신 것을 환영합니다</title>
</head>
<body>
<center>
<table border="1" width="500" height="50">
<tr>
<td align="center" bgcolor="dddddd">간단한 게시판 (Simple Board)</td>
</tr>
</table>
<table width=500 border="1">
<tr bgcolor="#7eaee9" height="25">
<th width="40" align="center">번호</th>
<th width="380" align="center">제목</th>
<th width="80" align="center">글쓴이</th>
</tr>
<logic:iterate id="list" name="boardlist">
<tr>
<td><bean:write name="list" property="id"/></td>
<td><html:link page="/show.do" paramId="id"
paramName="list" paramProperty="id">
<bean:write name="list" property="title"/>
</html:link>
</td>
<td><bean:write name="list" property="name"/></td>
</tr>
</logic:iterate>
<tr>
<td colspan="3">
<logic:notEqual name="currentpage" value="1" scope="request" >
<html:link page="/list.do" paramId="page" paramName="prevpage">
[이전페이지]
</html:link>
</logic:notEqual>
<bean:write name="currentpage"/>
<logic:notEqual name="currentpage"
value="<%= request.getAttribute("totalpage").toString() %>"
scope="request" >
<html:link page="/list.do" paramId="page" paramName="nextpage">
[다음페이지]
</html:link>
</logic:notEqual>
</td>
</tr>
<tr>
<td colspan="3" align="right">
<html:link page="/writeForm.do">글쓰기</html:link>
</td>
</tr>
</table>
<table border="1" width="500" height="28">
<tr>
<td align="center" bgcolor="dddddd">제작자 : 성종천(mudchobo@nate.com)</td>
</tr>
</table>
</center>
</body>
</html>
[/code]
잘 보면 26번라인에 logic:iterate부분은 그 사이를 boardlist에 있는 수만큼 반복해서 출력하라는 것입니다. bean:write를 이용해서 값을 출력하는 것입니다.
그 다음 [다음페이지] [이전페이지] 표현 부분은 링크에다가 뒤에 paramId가 page고 nextpage값이 3이면
list.do?page=3 이라고 요청하게 되는 것입니다.
logic:notEqual은 name에 있는 값이 value값이랑 비교해서 같지 않으면 그 태그안에 있는 내용을 수행하라는 뜻입니다. 스트럿츠의 태그라이브러리가 궁금하신 분은
http://blog.naver.com/wildxing?Redirect=Log&logNo=20033916985
이 분 블로그에서 검색을 "태그라이브러리" 로 검색하면 다나옵니다. 보셔서 참조하세요.
스트럿츠의 태그라이브러리를 사용하니까 jsp코드가 매우 깔끔해집니다.
오늘은 여기까지-_-;
-
스트럿츠로 제작한 게시판 소스입니다.