검색결과 리스트
글
struts2] struts2 + ibatis 활용한 게시판1-3
struts2 + ibatis 를 활용한 게시판
* 게시판 글쓰기 및 수정, 파일업로드 기능
1. bbs.xml
- 글 작성하기 위해 <insert>추가 및 sql문 정의
- 파라미터를 여러개 받아야 하기 때문에 parameterClass를 객체로 지정한다.
즉, 여기서는 위에 정의한 alias인 bbsvo로 지정하면 된다.
- insert에 idx로 이용되는 컬럼명은 sequence로 가져와야하기 때문에
dual table을 이용해서 미리 시퀀스 값을 가져온다.
-<selectKey>속성인 resultClass은 실행했을때 리턴되는값을 명시
keyProperty에 idx가 아래의insert절의 #idx#에 맵핑된다.
2. Bbs.java
- interface에 메소드 정의
3. BbsImple.java
- interface에 정의된 메소드를 구현
- insert절은 insert, delete절은 delete, select은 queryForList 호출
-
4. struts.xml
- 1. add 액션추가
- 2. add_ok action 추가
5.write.jsp
- action에서 result로 write.jsp를 호출하였기때문에 해당 페이지에서 글작성할수있는 페이지 작성
- insertForm.jsp페이지를 해당 폼으로 설정
<s:form action="add_ok" method="post" enctype="multipart/form-data">
<s:include value="insertForm.jsp"></s:include>
</s:form>
6. insertForm.jsp
- struts2의 taglib를 이용해서 글보기시 session에 사용자 및 글제목등 관련 필드 내용을 session에
등록한다.
이렇게 하는이유는 insertForm.jsp 하나의 폼을 가지고 delete 및 uptate시에도 동일 폼을 사용하기
때문에 세션으로부터 그 폼을 가져와서 재활용하려고 하는것이다. 이렇게되면 delete.jsp 같은
페이지를 동일한 폼을 만들지 않아도 되고 글 상세보기시 session에 폼에 대한 data를 세션에 등록
한다. 그렇게 되면 수정버튼을 클릭시 db로부터 값을 불러오지 않고 세션에 등록된 값을 가져와서
글쓴이,제목,내용등을 사용자에게 보여줄수있는 것이다.
7.AddAction 클래스 정의
- struts.xml에서 정의한 클래스 및 메서드 정의(AddAction.java / clear()) - 1.add action
- write.jsp에서 action으로 정의한 struts.xml에 action등록 - 2. add_ok action
- 파일업로드시 File변수명+FileName 이라고 해야 Struts2에서 자동으로 파일명을 인식한다.
ex> File s_file 파일명얻어내기 : s_fileFileName
- AddAction클래스가 호출되면 필드로 선언된 변수에 값이 셋팅이 되고 난후에 execute()메서드가
호출된다.
8.FileService.java
- 파일업로드를 하기 위한 FileService 파일 작성
- 아래 fileupload에서 한 예제를 가지고 그대로 사용하면된다.
* bbs.xml
<insert id="insertBbs" parameterClass="bbsvo">
<selectKey keyProperty="idx" resultClass="int">
select BBS_idx.NEXTVAL AS idx FROM dual
</selectKey>
<!--
resultClass 이것을 실행했을때 리턴되는것 명시
keyProperty에 idx가 아래의insert절의 #idx#에 맵핑된다.
-->
insert into BBS_T(idx,subject,writer,writedate,contents,s_file,pwd,readhit,ip)
values (<!-- 아래서 전달되는 변수는 parameterClass에서 찾는다. -->
#idx#,#subject#,#writer#,sysdate,#contents#,#s_file#,#pwd#,#readHit#,#ip#
<!-- getSubject(),getWriter()이런 메소드가 호출되면서 파라미터에 맵핑된다. -->
)
</insert>
* Bbs.java
- interface에 메소드 정의
public void addBbs(BbsVO n);
* BbsImple.java
public void addBbs(BbsVO n) {
insert("insertBbs",n); //insert(ag id값, 넘겨줄인자값)
}
* struts.xml
<action name="add" class="action.AddAction" method="clear">
<result>/write.jsp</result>
</action>
<action name="add_ok" class="action.AddAction">
<result name="input">/list.jsp</result>
<result type="redirect-action" name="success">list</result>
</action>
*write.jsp
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="StyleSheet" href="/css/style.css" type="text/css">
<link rel="StyleSheet" href="text.css" type="text/css">
<s:head/> <!-- taglib가 가지고 있는 head값 -->
</head>
<body>
<s:form action="add_ok" method="post" enctype="multipart/form-data">
<s:include value="insertForm.jsp"></s:include> //insertForm.jsp를 해당페이지에 폼으로 include
</s:form>
</body>
</html>
* insertForm.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td valign="top">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td align="center" height="10"></td>
</tr>
<tr>
<td align="center"><u><b>BBS 글쓰기</b></u></td>
</tr>
<tr>
<td align="center" valign="top"><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td> </td>
</tr>
</table>
<table width="556" border="0" cellspacing="0" cellpadding="0">
<tr>
<td height="2" bgcolor="#C3C3C3"></td>
</tr>
<tr>
<td bgcolor="#E5E5E5"><table width="100%" border="0" cellspacing="1" cellpadding="2">
<tr>
<td width="90" height="20" align="center" bgcolor="#669AB3">
<s:text name="작성자"/>
</td>
<td bgcolor="#F2F7F9" align="left">
<s:textfield name="writer" value="%{#session.selectBoard.writer}" cssStyle="width:100px" theme="simple"/>
</td>
</tr>
<tr>
<td height="20" align="center" bgcolor="#669AB3"><s:text name="제목"/></td>
<td bgcolor="#F2F7F9" align="left"><s:textfield name="subject" value="%{#session.selectBoard.subject}" cssStyle="width:450px" theme="simple"/></td>
</tr>
<tr>
<td height="20" align="center" bgcolor="#669AB3"><s:text name="내용"/></td>
<td bgcolor="#F2F7F9" align="left"><s:textarea name="contents" value="%{#session.selectBoard.contents}" cssStyle="width: 450px; height: 200px" theme="simple"/></td>
</tr>
<tr>
<td height="20" align="center" bgcolor="#669AB3"><s:text name="첨부파일"/></td>
<td bgcolor="#F2F7F9" align="left"><s:file name="s_file" cssStyle="width:300px" theme="simple"/>
</td>
</tr>
<tr>
<td height="20" align="center" bgcolor="#669AB3"><s:text name="비밀번호"/></td>
<td bgcolor="#F2F7F9" align="left"><s:password name="pwd" cssStyle="width:200px" theme="simple"/>
<font color="#0066CC">* 삭제.수정시 필요</font> </td>
</tr>
</table></td>
</tr>
</table>
<table width="556" border="0" cellspacing="0" cellpadding="0">
<tr>
<td height="20" valign="middle"><img src="/images/sub_it/point_line.gif" width="556" height="3"></td>
</tr>
<tr>
<td align="right"> <table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="315" align="center">
</td>
<td width="241" align="right"> <s:submit src="images/but_submit.gif" theme="simple"/>
<s:reset theme="simple"/>
</td>
</tr>
</table></td>
</tr>
</table></td>
</tr>
<tr>
<td height="19"></td>
</tr>
</table>
</td>
</tr>
</table>
*AddAction.java
package action;
import java.io.File;
import java.util.Map;
import javax.servlet.Servlet;
import org.apache.struts2.ServletActionContext;
import service.FileService;
import vo.BbsVO;
import com.opensymphony.xwork2.ActionContext;
import dao.Bbs;
import dao.DaoService;
public class AddAction {
String writer,subject,contents,pwd;
File s_file;
String s_fileFileName,serverFullPath; //s_fileFileName이라고 작성해야 된다.
public String clear() throws Exception{
/*현재 사용되고 있는 session정보 가져오기*/
Map<String,BbsVO> map = ActionContext.getContext().getSession();
map.clear();
return "success";
}
public String execute() throws Exception{
/*ibatis의 Dao객체 얻기*/
Bbs bbs = (Bbs)DaoService.getDao(Bbs.class);
BbsVO vo = new BbsVO(); //ibatis에서 인자로 vo를 받기때문에 값을 셋팅하고 인자로 넣어준다.
vo.setWriter(writer);
vo.setSubject(subject);
vo.setContents(contents);
vo.setS_file(s_fileFileName);
vo.setReadHit(0);
vo.setPwd(pwd);
vo.setIp(ServletActionContext.getRequest().getRemoteAddr());
String basePath="D:/jspwork/Struts2_ibatis/WebContent/upload"; //저장할경로 설정
FileService fs = new FileService(); //서버에 파일을 저장시키위해 객체생성
serverFullPath = fs.saveFile(s_file, basePath, s_fileFileName); // 서버에 저장(파일객체,저장경로,파일명)
bbs.addBbs(vo); //위에서 셋팅한 vo객체를 ibatis 인자로 넘겨준다(이런방식으로 여러개의 파라미터를 전달할수있다)
return "success";
}
// 일반적인 setter//getter 메소드 정의
}
RECENT COMMENT