1.
글목록에서 글을 누릅니다.
글을 누르면 viewAction으로 이동하게 설정되어있고, get방식으로 글번호와 페이지 번호를 함께 넘겨 줍니다.
2.
strtus.xml에서 action name="viewAction" 부분이 실행하게 되고 viewAction.java가 동작하게 됩니다.
3.
그리고 조회수를 1올려주기위해 updateReadHit을 호출시켜줍니다.(ibatis)
4.
boardsql.xml에 updateReadhit코드
5.
글 정보를 불러오기위해 selectOne을 호출합니다.
6.
select-all은 select * from sBoard이고
where-no은 where no=#no#이다.
위 구문을 통해 불러온 데이터는 resultClass에 저장하게되고 resultClass는 getResultclass()을 통해 넘겨주게된다.
7.
그리고 jsp페이지에서 다음과 같이 사용하며 불러온 값들을 페이지에 표시해주게 된다.
<viewAction코드>
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 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 | 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.io.Reader; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.io.IOException; import java.net.URLEncoder; public class viewAction extends ActionSupport { public static Reader reader; public static SqlMapClient sqlMapper; private boardVO paramClass = new boardVO(); private boardVO resultClass = new boardVO(); private int currentPage; private int no; private String password; private String fileUploadPath = "/Users/ho/Documents/save/"; private InputStream inputStream; private String contentDisposition; private long contentLength; public viewAction() throws IOException { reader = Resources.getResourceAsReader("sqlMapConfig.xml"); sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader); reader.close(); } public String execute() throws Exception { paramClass.setNo(getNo()); sqlMapper.update("updateReadHit", paramClass); resultClass = (boardVO) sqlMapper.queryForObject("selectOne", getNo()); return SUCCESS; } public String download() throws Exception { resultClass = (boardVO) sqlMapper.queryForObject("selectOne", getNo()); File fileInfo = new File(fileUploadPath + resultClass.getFile_savname()); setContentLength(fileInfo.length()); setContentDisposition("attachment;filename=" + URLEncoder.encode(resultClass.getFile_orgname(), "UTF-8")); setInputStream(new FileInputStream(fileUploadPath + resultClass.getFile_savname())); return SUCCESS; } public String checkForm() throws Exception { return SUCCESS; } public String checkAction() throws Exception { paramClass.setNo(getNo()); paramClass.setPassword(getPassword()); resultClass = (boardVO) sqlMapper.queryForObject("selectPassword", paramClass); if (resultClass == null) return ERROR; return SUCCESS; } public boardVO getParamClass() { return paramClass; } public void setParamClass(boardVO paramClass) { this.paramClass = paramClass; } public boardVO getResultClass() { return resultClass; } public void setResultClass(boardVO resultClass) { this.resultClass = resultClass; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getFileUploadPath() { return fileUploadPath; } public void setFileUploadPath(String fileUploadPath) { this.fileUploadPath = fileUploadPath; } public int getNo() { return no; } public void setNo(int no) { this.no = no; } public InputStream getInputStream() { return inputStream; } public void setInputStream(InputStream inputStream) { this.inputStream = inputStream; } public String getContentDisposition() { return contentDisposition; } public void setContentDisposition(String contentDisposition) { this.contentDisposition = contentDisposition; } public long getContentLength() { return contentLength; } public void setContentLength(long contentLength) { this.contentLength = contentLength; } public int getCurrentPage() { return currentPage; } public void setCurrentPage(int currentPage) { this.currentPage = currentPage; } } | cs |
<strtus.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 |
<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게시판 코드분석해보기5-deleteAction (0) | 2018.11.11 |
|---|---|
| struts게시판 코드분석해보기3-writeAction (0) | 2018.11.09 |
| struts게시판 코드분석해보기2-listAction(메인페이지) (0) | 2018.11.09 |
| struts게시판 코드분석해보기 (0) | 2018.11.09 |