#학원에서 배운내용을 정리 & 공부하며 작성한 글이라 틀린내용이 있을수 있습니다.
완성되어있는 코드를 실행순서를 따라가면서 정리해보도록 하겠습니다.
1.
주소창에 StrutsBoard/listAction.action 주소를 치고 게시판사이트에 접속합니다.
2.
struts.xml에서 action태그중 name=listAction이 실행하게 되고 board.listAction.java파일을 실행하게 됩니다.
3.
listAction.java코드를 실행하게 됩니다. (ActionSupport를 상속받은것은 유효성 검사를 위해서지만 요즘은 javascript로 대부분 처리하기때문에 잘 사용하지 않습니다.)
reader는 파일 스트림을 위한것이고
SqlMapper는 SqlMapClient API를 사용하기 위한 sqlMapper 객체입니다.
currentPage부터 page까지는 페이지내에 보이는 게시글에 대한 변수들이므로 생략하도록 하겠습니다.
4.
먼저 1번상자는 ibatis를 사용하기 위한 설정입니다. 생성자영역에 넣어줌으로써 액션페이지를 호출하면서 동시에 생성됩니다. sqlMapConfig.xml에는 database연결 설정에 대한 정보들이 들어있으며 사용하는 태그들을 sqlMapper에 저장해줍니다.
다음 2번상자는 데이터베이스에 있는 값을 가져오는 구문으로써 selectAll을 실행시켜주고 그 값을 List형식으로 전달받아 list변수에 저장합니다.
위코드는 boardSQL.xml의 코드중 한부분으로 글번호순으로 정렬하여 그 값들을 boardRes형식으로 넘겨줍니다.
boardres는 다음과 같이 데이터를 주거나 받을수 있는 형태입니다. 데이터베이스에서 받아온값을 위의 property변수 각각에 맞는 값으로 저장하고 그 값을 넘겨주는것으로 보면 됩니다.
그후 pagingAction 객체를 page로 참조하면서 currentPage,totalCount,BlockCount,blockPage 변수를 매개변수로 넘겨줍니다. paginAction은 페이지를 표시하기 위한 html태그를 생성하는 코드들과 페이지 번호를 만드는 코드들이므로
생략하고 넘어가도록하겠습니다.
위의 코드들이 정상적으로 처리되면 success값을 반환하게 되고 struts.xml에서
<result>/board/boardlist.jsp</result>부분을 실행하게 되고 아래와 같은 페이지를 출력하게 됩니다.
<listAction코드>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 | package board; import com.opensymphony.xwork2.ActionSupport; import com.ibatis.common.resources.Resources; import com.ibatis.sqlmap.client.SqlMapClient; import com.ibatis.sqlmap.client.SqlMapClientBuilder; import java.util.*; import java.io.Reader; import java.io.IOException; import board.pagingAction; public class listAction extends ActionSupport { public static Reader reader; public static SqlMapClient sqlMapper; private List<boardVO> list = new ArrayList<boardVO>();; private int currentPage = 1; private int totalCount; private int blockCount = 10; private int blockPage = 5; private String pagingHtml; private pagingAction page; public listAction() throws IOException { reader = Resources.getResourceAsReader("sqlMapConfig.xml"); sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader); reader.close(); } public String execute() throws Exception { list = sqlMapper.queryForList("selectAll"); totalCount = list.size(); page = new pagingAction(currentPage, totalCount, blockCount, blockPage); pagingHtml = page.getPagingHtml().toString(); int lastCount = totalCount; if (page.getEndCount() < totalCount) lastCount = page.getEndCount() + 1; list = list.subList(page.getStartCount(), lastCount); return SUCCESS; } public List<boardVO> getList() { return list; } public void setList(List<boardVO> list) { this.list = list; } public int getCurrentPage() { return currentPage; } public void setCurrentPage(int currentPage) { this.currentPage = currentPage; } public int getTotalCount() { return totalCount; } public void setTotalCount(int totalCount) { this.totalCount = totalCount; } public int getBlockCount() { return blockCount; } public void setBlockCount(int blockCount) { this.blockCount = blockCount; } public int getBlockPage() { return blockPage; } public void setBlockPage(int blockPage) { this.blockPage = blockPage; } public String getPagingHtml() { return pagingHtml; } public void setPagingHtml(String pagingHtml) { this.pagingHtml = pagingHtml; } public pagingAction getPage() { return page; } public void setPage(pagingAction page) { this.page = page; } } | cs |
<boardSQL.xml>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE sqlMap PUBLIC '-//ibatis.apache.org//DTD Sql Map 2.0//EN' 'http://ibatis.apache.org/dtd/sql-map-2.dtd'> <sqlMap> <typeAlias alias="board" type="board.boardVO" /> <!-- 리절트 맵 정의 --> <resultMap id="boardRes" class="board"> <result property="no" column="no"/> <result property="subject" column="subject"/> <result property="name" column="name"/> <result property="password" column="password"/> <result property="content" column="content"/> <result property="file_orgname" column="file_orgName"/> <result property="file_savname" column="file_savName"/> <result property="readhit" column="readhit"/> <result property="regdate" column="regdate"/> </resultMap> <!-- 공통으로 사용할 select 절 정의 --> <sql id="select-all"> SELECT * FROM sBOARD </sql> <!-- 공통으로 사용할 where-no 절 정의 --> <sql id="where-no"> WHERE no = #no# </sql> <!-- select 쿼리문 정의 --> <select id="selectAll" resultMap="boardRes"> <include refid="select-all" /> ORDER BY no DESC </select> <select id="selectOne" resultMap="boardRes" parameterClass="int"> <include refid="select-all" /> <include refid="where-no" /> </select> <select id="selectLastNo" resultClass="board"> SELECT max(no) as no FROM sBOARD </select> <select id="selectPassword" resultMap="boardRes" parameterClass="board" > <include refid="select-all" /> <include refid="where-no" /> AND password = #password# </select> <!-- insert 쿼리문 정의 --> <insert id="insertBoard" parameterClass="board"> INSERT INTO sBOARD (NO, SUBJECT, NAME, PASSWORD, CONTENT, REGDATE ) VALUES (BOARD_NO_SEQ.NEXTVAL, #subject#, #name#, #password#, #content#, #regdate# ) </insert> <!-- update 쿼리문 정의 --> <update id="updateBoard" parameterClass="board"> UPDATE sBOARD SET SUBJECT = #subject#, NAME = #name#, PASSWORD = #password#, CONTENT = #content# <include refid="where-no" /> </update> <update id="updateFile" parameterClass="board"> UPDATE sBOARD SET FILE_ORGNAME = #file_orgname# ,FILE_SAVNAME = #file_savname# <include refid="where-no" /> </update> <update id="updateReadHit" parameterClass="board"> UPDATE sBOARD SET READHIT = readHit + 1 <include refid="where-no" /> </update> <!-- delete 쿼리문 정의 --> <delete id="deleteBoard" parameterClass="board"> DELETE FROM sBOARD <include refid="where-no" /> </delete> </sqlMap> | cs |
<struts.xml>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <!-- 용량제한 100MB 로 설정. --> <constant name="struts.multipart.maxSize" value="104857600" /> <package name="board" extends="struts-default"> <!-- 글로벌 예외 처리 화면 설정 --> <global-results> <result name="error">/board/pageError.jsp</result> </global-results> <global-exception-mappings> <exception-mapping result="error" exception="java.lang.Exception"/> </global-exception-mappings> <!-- 게시판 리스트 액션. --> <action name="listAction" class="board.listAction"> <result>/board/boardList.jsp</result> </action> <!-- 게시판 쓰기 액션. --> <action name="writeForm" class="board.writeAction" method="form"> <result>/board/boardWrite.jsp</result> </action> <action name="writeAction" class="board.writeAction"> <result type="redirect-action"> <param name="actionName">listAction</param> </result> </action> <!-- 게시판 상세보기 액션. --> <action name="viewAction" class="board.viewAction"> <result>/board/boardView.jsp</result> </action> <!-- 파일 다운로드 액션. --> <action name="fileDownloadAction" class="board.viewAction" method="download"> <result name="success" type="stream"> <param name="contentType">binary/octet-stream</param> <param name="inputName">inputStream</param> <param name="contentDisposition">${contentDisposition}</param> <param name="contentLength">${contentLength}</param> <param name="bufferSize">4096</param> </result> </action> <!-- 비밀번호 체크 액션. --> <action name="checkForm" class="board.viewAction" method="checkForm"> <result>/board/checkPassword.jsp</result> </action> <action name="checkAction" class="board.viewAction" method="checkAction"> <result name="error">/board/checkError.jsp</result> <result>/board/checkSuccess.jsp</result> </action> <!-- 게시판 수정 액션. --> <action name="modifyForm" class="board.viewAction"> <result type="chain">writeForm</result> </action> <action name="modifyAction" class="board.modifyAction"> <result type="chain">viewAction</result> </action> <!-- 게시판 삭제 액션. --> <action name="deleteAction" class="board.deleteAction"> <result type="chain">listAction</result> </action> </package> </struts> | cs |
'● 개인 공부 > 샘플예제코드분석' 카테고리의 다른 글
| struts게시판 코드분석해보기5-deleteAction (0) | 2018.11.11 |
|---|---|
| struts게시판 코드분석해보기4-viewAction (0) | 2018.11.11 |
| struts게시판 코드분석해보기3-writeAction (0) | 2018.11.09 |
| struts게시판 코드분석해보기 (0) | 2018.11.09 |