본문 바로가기

● 개인 공부/샘플예제코드분석

struts게시판 코드분석해보기4-viewAction


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