Dev/Struts

Struts1/JDBC - 게시판 만들기

창문닦이 2019. 3. 19. 12:16

게시글 작성 기능 구현

1. BoardForm 생성(DTO의 기능을 하는 클래스)

package com.board;

import org.apache.struts.action.ActionForm;


//Struts에서 관리하므로 ActionForm 상속

public class BoardForm extends ActionForm{

private static final long serialVersionUID = 1L;//DTO

private int num;

private String name;

private String subject;

private String content;

private String pwd;

private String email;

private int hitCount;

private String ipAddr;

private String created;

getter, setter 생성

}

2. BoardAction(Servlet의 기능을 하는 클래스) write,write_ok method생성

public class BoardAction extends DispatchAction{

Connection conn = DBCPConn.getConnection();

BoardDAO dao = new BoardDAO(conn);

//메소드명 변경 가능


//게시판 작성시

public ActionForward write(ActionMapping mapping, ActionForm form,

HttpServletRequest request, HttpServletResponse response) throws Exception {

//사용자가 오게되면 create페이지를 띄우고자 함.

//입력폼


return mapping.findForward("created");

//created라는 문자열을 가지고 돌아가라

}


//게시판 작성 완료시

public ActionForward write_ok(ActionMapping mapping, ActionForm form,

HttpServletRequest request, HttpServletResponse response) throws Exception {

BoardForm f = (BoardForm)form; //downcast

f.setNum(dao.getMaxNum()+1);

f.setIpAddr(request.getRemoteAddr());

dao.insertData(f);

return mapping.findForward("save");

}

3. web.xml 매핑정보 등록(parameter에 config.xml 등록)

<servlet>

<servlet-name>action</servlet-name>

<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>

<init-param>

<param-name>config</param-name>

<param-value>

/WEB-INF/struts-config.xml,

/WEB-INF/struts-config_test.xml,

/WEB-INF/struts-config_board.xml

</param-value>

</init-param>

<load-on-startup>2</load-on-startup>

</servlet>

 <servlet-mapping>

<servlet-name>action</servlet-name>

<url-pattern>*.do</url-pattern>

</servlet-mapping>


4. struts-config_board.xml (forward 경로 등록)

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts-config PUBLIC

"-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"

"http://struts.apache.org/dtds/struts-config_1_3.dtd">

       

<struts-config>

<form-beans>

<form-bean name="boardForm" type="com.board.BoardForm"/>

</form-beans>


<action-mappings>

<!-- /board.do가 오면 BoardAction 클래스로 가라. -->

<!-- parameter는 변수. 찾아가야하는 메소드명을 기재 -->

<action path="/board" type="com.board.BoardAction" name="boardForm" scope="request" parameter="method">

<forward name="created" path="/board/created.jsp"/>

</action>

</action-mappings>


</struts-config>       

5. created.jsp - 게시판 작성 jsp 페이지(View)

<body>

<div id="bbs" >

<div id="bbs_title">

게 시 판(Struts1+JDBC)

</div>

<form action="" name="myForm" method="post">

<div id="bbsCreated">

<div class="bbsCreated_bottomLine">

<dl>

<dt>제&nbsp;&nbsp;&nbsp;&nbsp;목</dt>

<dd>

<input type="text" name="subject" size="74" maxlength="100" class="boxTF"/>

</dd>

</dl>

</div>

<div class="bbsCreated_bottomLine">

<dl>

<dt>작성자</dt>

<dd>

<input type="text" name="name" size="35" maxlength="20" class="boxTF"/>

</dd>

</dl>

</div>

<div class="bbsCreated_bottomLine">

<dl>

<dt>E-Mail</dt>

<dd>

<input type="text" name="email" size="35" maxlength="50" class="boxTF"/>

</dd>

</dl>

</div>

<div id="bbsCreated_content">

<dl>

<dt>내&nbsp;&nbsp;&nbsp;&nbsp;용</dt>

<dd>

<textarea rows="12" cols="63" name="content" class="boxTA"></textarea>

</dd>

</dl>

</div>

<div class="bbsCreated_noLine">

<dl>

<dt>패스워드</dt>

<dd>

<input type="password" name="pwd" size="35" maxlength="7" class="boxTF"/>

&nbsp;(게시물 수정 및 삭제시 필요)

</dd>

</dl>

</div>

</div>

<div id="bbsCreated_footer">

<input type="hidden" name="method" value="write_ok"/>

<input type="button" value="등록하기" class="btn2"

onclick="sendIt();" />

<input type="reset" value="다시입력" class="btn2"

onclick="document.myForm.subject.focus();" />

<input type="button" value="작성취소" class="btn2"

onclick="javascript:location.href='<%=cp %>/board.do?method=list';" />

</div>

</form>

</div>

</body>




게시판 리스트 조회 기능 구현

1. BoardDAO(DB에 Access하는 클래스) method 생성

public class BoardDAO {

private Connection conn;

public BoardDAO(Connection conn){

this.conn = conn;

}

//게시글 카운팅

public int getMaxNum(){

int maxNum = 0;

PreparedStatement pstmt = null;

ResultSet rs = null;

String sql ;

try {

sql = "select nvl(max(num),0) from board";

pstmt = conn.prepareStatement(sql);

rs = pstmt.executeQuery();

if(rs.next()){

maxNum = rs.getInt(1);

}

rs.close();

pstmt.close();

} catch (Exception e) {

System.out.println(e.toString());

}

return maxNum;

}

//게시글 database 입력

public int insertData(BoardForm dto){

int result = 0;

PreparedStatement pstmt = null;

String sql;

try {

sql = "insert into board (num,name,pwd,email,subject,content,";

sql += "ipAddr,hitCount,created) values (?,?,?,?,?,?,?,0,sysdate)";

pstmt = conn.prepareStatement(sql);

pstmt.setInt(1, dto.getNum());

pstmt.setString(2, dto.getName());

pstmt.setString(3, dto.getPwd());

pstmt.setString(4, dto.getEmail());

pstmt.setString(5, dto.getSubject());

pstmt.setString(6, dto.getContent());

pstmt.setString(7, dto.getIpAddr());

result = pstmt.executeUpdate();

pstmt.close();

} catch (Exception e) {

System.out.println(e.toString());

}

return result;

}

//게시글 갯수 카운팅

public int getDataCount(String searchKey, String searchValue){

int result = 0;

PreparedStatement pstmt = null;

ResultSet rs = null;

String sql;

try {

searchValue = "%" + searchValue +"%" ;

sql = "select nvl(count(*),0) from board ";

sql += "where " + searchKey + " like ? ";

pstmt = conn.prepareStatement(sql);

pstmt.setString(1, searchValue);

rs = pstmt.executeQuery();

if(rs.next())

result = rs.getInt(1);

rs.close();

pstmt.close();

} catch (Exception e) {

System.out.println(e.toString());

}

return result;

}

//리스트 출력

public List<BoardForm> getLists(int start, int end, String searchKey, String searchValue){

List<BoardForm> lists = new ArrayList<BoardForm>();

PreparedStatement pstmt = null;

ResultSet rs = null;

String sql;

try {

searchValue = "%" + searchValue + "%";

sql = "select * from (";

sql += "select rownum rnum, data.* from (";

sql += "select num,name,subject,hitCount,";

sql += "to_char(created,'YYYY-MM-DD') created ";

sql += "from board where " + searchKey + " like ? ";

sql += "order by num desc) data) ";

sql += "where rnum>=? and rnum<=? ";

pstmt = conn.prepareStatement(sql);

pstmt.setString(1, searchValue);

pstmt.setInt(2, start);

pstmt.setInt(3, end);

rs = pstmt.executeQuery();

while(rs.next()){

BoardForm dto = new BoardForm();

dto.setNum(rs.getInt("num"));

dto.setName(rs.getString("name"));

dto.setSubject(rs.getString("subject"));

dto.setHitCount(rs.getInt("hitCount"));

dto.setCreated(rs.getString("created"));

lists.add(dto);

}

rs.close();

pstmt.close();

} catch (Exception e) {

System.out.println(e.toString());

}

return lists;

}

}

2. BoardAction list 메소드 생성

//게시판 리스트 조회시

public ActionForward list(ActionMapping mapping, ActionForm form,

HttpServletRequest request, HttpServletResponse response) throws Exception {

String cp = request.getContextPath();

MyUtil myUtil = new MyUtil();

int numPerPage = 10;

int totalPage = 0;

int totalDataCount = 0;

String pageNum = request.getParameter("pageNum");

int currentPage = 1;

if(pageNum!=null)

currentPage = Integer.parseInt(pageNum);

String searchKey = request.getParameter("searchKey");

String searchValue = request.getParameter("searchValue");

if(searchValue==null){

searchKey = "subject";

searchValue = "";

}

if(request.getMethod().equalsIgnoreCase("GET"))

searchValue = URLDecoder.decode(searchValue,"UTF-8");

totalDataCount = dao.getDataCount(searchKey, searchValue);

if(totalDataCount!=0)

totalPage = myUtil.getPageCount(numPerPage, totalDataCount);

if(currentPage>totalPage)

currentPage = totalPage;

int start = (currentPage-1)*numPerPage+1;

int end = currentPage*numPerPage;

List<BoardForm> lists = dao.getLists(start, end, searchKey, searchValue);

String param = "";

String urlArticle = "";

String urlList = "";

if(!searchValue.equals("")){

searchValue = URLEncoder.encode(searchValue,"UTF-8");

param = "&searchKey="+searchKey;

param += "&searchValue=" + searchValue;

}

urlList = cp + "/board.do?method=list" +param;

urlArticle = cp +"/board.do?method=article&pageNum="+currentPage;

urlArticle += param;

request.setAttribute("lists", lists);

request.setAttribute("urlArticle", urlArticle);

request.setAttribute("pageNum", pageNum);

request.setAttribute("pageIndexList", myUtil.pageIndexList(currentPage, totalPage, urlList));

request.setAttribute("totalPage", totalPage);

request.setAttribute("totalDataCount", totalDataCount);

return mapping.findForward("list");

}

3. struts-config_board.xml (forward 경로 등록)

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts-config PUBLIC

"-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"

"http://struts.apache.org/dtds/struts-config_1_3.dtd">

       

<struts-config>

<form-beans>

<form-bean name="boardForm" type="com.board.BoardForm"/>

</form-beans>

<action-mappings>

<!-- 별칭 설정 가능 -->

<!-- http://localhost:8080/struts1/boardList.do 요청시 리스트페이지 조회 -->

<action path="/boardList" forward="/board.do?method=list"/>

<!-- /board.do가 오면 BoardAction 클래스로 가라. -->

<!-- *.do urlPattern을 config 파일에 등록해놓았음을 기억 -->

<!-- parameter는 변수. 찾아가야하는 메소드명을 기재 -->

<action path="/board" type="com.board.BoardAction"

name="boardForm" scope="request" parameter="method">

<forward name="created" path="/board/created.jsp"/>

<forward name="save" redirect="true" path="/board.do?method=list"/>

<forward name="list" path="/board/list.jsp"/>

</action>

</action-mappings>

</struts-config>     


4. list.jsp - 게시판 리스트 조회 jsp 페이지(View)

<%@ page contentType="text/html; charset=UTF-8"%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%

request.setCharacterEncoding("UTF-8");

String cp = request.getContextPath();

%>

<!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=UTF-8">

<title>게 시 판</title>

<link rel="stylesheet" href="<%=cp %>/board/css/style.css" type="text/css" />

<link rel="stylesheet" href="<%=cp %>/board/css/list.css" type="text/css" />

<script type="text/javascript">

function searchData() {

var f= document.searchForm;

f.action = "<%=cp%>/board.do?method=list";

f.submit();

}

</script>

</head>

<body>

<div id="bbsList">

<div id="bbsList_title">

게 시 판(Struts1+JDBC)

</div>

<div id="bbsList_header">

<div id="leftHeader">

<form action="" name="searchForm" method="post">

<select name="searchKey" class="selectField">

<option value="subject">제목</option>

<option value="name">작성자</option>

<option value="content">내용</option>

</select>

<input type="text" name="searchValue" class="textField"/>

<input type="button" value="검  색" class="btn2" onclick="searchData();"/>

</form>

</div>

<div id="rightHeader">

<input type="button" value=" 글올리기 " class="btn2"

onclick="javascript:location.href='<%=cp%>/board.do?method=write';"/>

</div>

</div>

<div id="bbsList_list">

<div id="title">

<dl>

<dt class="num">번호</dt>

<dt class="subject">제목</dt>

<dt class="name">작성자</dt>

<dt class="created">작성일</dt>

<dt class="hitCount">조회수</dt>

</dl>

</div>

<div id="lists">

<c:forEach var="dto" items="${lists }">

<dl>

<dd class="num">${dto.num }</dd>

<dd class="subject">

<a href="${urlArticle }&num=${dto.num}">

${dto.subject }</a></dd>

<dd class="name">${dto.name }</dd>

<dd class="created">${dto.created }</dd>

<dd class="hitCount">${dto.hitCount }</dd>

</dl>

</c:forEach>

</div>

<div id="footer">

<p>

<c:if test="${totalDataCount!=0 }">

${pageIndexList }

</c:if>

<c:if test="${totalDataCount==0 }">

등록된 게시물이 없습니다.

</c:if>

</p>

</div>

</div>

</div>

</body>

</html>



게시글 조회 기능 구현

http://localhost:8080/struts1/board.do?method=list

클라이언트 브라우저의 요청주소의 board.do라는 주소와 method=list라는 파라미터를 함께 가져가서 config파일을 찾아가게 된다

/board.do가 오면 반드시 action으로 가게된다 (BoardAction클래스로 이동하라고 작성되어 있음 + BoardForm을 함께 가져감)


단일 게시글이 조회되는 페이지 구현 순서

1. DAO생성 (Model)

2. struts-config_board.xml(Controller 역할) 포워드되어 view가 될 페이지 정보를 등록

3. boardAction (Servlet 역할) 기능 구현

4. article.jsp(View)

1. BoardDAO updateHitCount(), getReadData() 추가 

//조회수 증가

public int updateHitCount(int num){

int result = 0;

PreparedStatement pstmt = null;

String sql;

try {

sql = "update board set hitCount=hitCount+1 where num=? ";

pstmt = conn.prepareStatement(sql);

pstmt.setInt(1, num);

result = pstmt.executeUpdate();

pstmt.close();

} catch (Exception e) {

System.out.println(e.toString());

}

return result;

}

//게시글 조회

public BoardForm getReadData(int num){

BoardForm dto = null;

PreparedStatement pstmt = null;

ResultSet rs = null;

String sql;

try {

sql = "select num,name,pwd,email,subject,content,ipAddr,hitCount,";

sql += "created from board where num=? ";

pstmt = conn.prepareStatement(sql);

pstmt.setInt(1, num);

rs = pstmt.executeQuery();

if(rs.next()){

dto = new BoardForm();

dto.setNum(rs.getInt("num"));

dto.setName(rs.getString("name"));

dto.setPwd(rs.getString("pwd"));

dto.setEmail(rs.getString("email"));

dto.setSubject(rs.getString("subject"));

dto.setContent(rs.getString("content"));

dto.setIpAddr(rs.getString("ipAddr"));

dto.setHitCount(rs.getInt("hitCount"));

dto.setCreated(rs.getString("created"));

}

rs.close();

pstmt.close();

} catch (Exception e) {

System.out.println(e.toString());

}

return dto;

}

2. struts-config_board.xml(forward 경로 등록)

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts-config PUBLIC

"-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"

"http://struts.apache.org/dtds/struts-config_1_3.dtd">

       

<struts-config>

<form-beans>

<form-bean name="boardForm" type="com.board.BoardForm"/>

</form-beans>

<action-mappings>

<action path="/boardList" forward="/board.do?method=list"/>

<action path="/board" type="com.board.BoardAction"

name="boardForm" scope="request" parameter="method">

<!-- 컨트롤러의 역할. 분배기 -->

<forward name="created" path="/board/created.jsp"/>

<!-- save일 경우 리다이렉트 진행 -->

<forward name="save" redirect="true" path="/board.do?method=list"/>

<forward name="list" path="/board/list.jsp"/>

<forward name="article" path="/board/article.jsp"/>

</action>

</action-mappings>

</struts-config>   


3. BoardAction article method 생성

//하나의 게시글 조회시

public ActionForward article(ActionMapping mapping, ActionForm form,

HttpServletRequest request, HttpServletResponse response) throws Exception {

리스트페이지에서

localhost:8080/struts1/board.do?method=article&pageNum=1&searchKey=subject&searchValue=1&num=19

넘겨오는 주소에서의 파라미터값을 받아주는 작업 필요


int num = Integer.parseInt(request.getParameter("num"));

String pageNum = request.getParameter("pageNum");

String searchKey = request.getParameter("searchKey");

String searchValue = request.getParameter("searchValue");

if(searchValue!=null)

searchValue = URLDecoder.decode(searchValue,"UTF-8");//파라미터값 받을때 디코딩

dao.updateHitCount(num);

BoardForm dto = dao.getReadData(num);

if(dto==null)

return mapping.findForward("list");

int lineSu = dto.getContent().split("\n").length;

dto.setContent(dto.getContent().replaceAll("\n","<br/>"));

String param = "pageNum="+pageNum;

if(searchValue!=null){

param += "&searchKey="+searchKey;

param += "&searchValue="+URLEncoder.encode(searchValue,"UTF-8");//보낼때 다시 인코딩

}

request.setAttribute("dto", dto);

request.setAttribute("params", param);

request.setAttribute("lineSu", lineSu);

request.setAttribute("pageNum", pageNum);

return mapping.findForward("article");

}

4. article.jsp - 게시글 조회 jsp 페이지(View)

<%@ page contentType="text/html; charset=UTF-8"%>

<%

request.setCharacterEncoding("UTF-8");

String cp = request.getContextPath();

%>

<!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=UTF-8">

<title>게 시 판</title>

<link rel="stylesheet" href="<%=cp %>/board/css/style.css" type="text/css" />

<link rel="stylesheet" href="<%=cp %>/board/css/article.css" type="text/css" />

</head>

<body>

<div id="bbs">

<div id="bbs_title">

게 시 판(Struts1+JDBC)

</div>

<div id="bbsArticle">

<div id="bbsArticle_header">

${dto.subject }

</div>

<div class="bbsArticle_bottomLine">

<dl>

<dt>작성자</dt>

<dd>${dto.name }</dd>

<dt>줄수</dt>

<dd>${linesu }</dd>

</dl>

</div>

<div class="bbsArticle_bottomLine">

<dl>

<dt>등록일</dt>

<dd>${dto.created }</dd>

<dt>조회수</dt>

<dd>${dto.hitCount }</dd>

</dl>

</div>

<div id="bbsArticle_content">

<table width="600" border="0">

<tr>

<td style="padding: 20px 80px 20px 62px;" valign="top" height="200">

${dto.content }

</td>

</tr>

</table>

</div>

</div>

<div class="bbsArticle_noLine" style="text-align: right;">

from ${dto.ipAddr }

</div>

<div id="bbsArticle_footer">

<div id="leftFooter">

<input type="button" value=" 수정 " class="btn2"

onclick="javascript:location.href='<%=cp%>/board.do?method=updated&num=${dto.num}&${params }';" />

<input type="button" value=" 삭제 " class="btn2"

onclick="javascript:location.href='<%=cp%>/board.do?method=deleted&num=${dto.num}&${params }';" />

</div>

<div id="rightFooter">

<input type="button" value=" 리스트 " class="btn2"

onclick="javascript:location.href='<%=cp%>/board.do?method=list&${params }';" />

</div>

</div>

</div>

</body>

</html>



게시글 수정 기능 구현

1. struts-config_board.xml 포워드 경로 지정

<forward name="updated" path="/board/updated.jsp"/>

2. BoardAction updated 메소드 추가(수정할 게시글을 읽어오는 기능)

//하나의 게시글을 수정하기 위한 입력페이지

public ActionForward updated(ActionMapping mapping, ActionForm form,

HttpServletRequest request, HttpServletResponse response)

throws Exception {

int num = Integer.parseInt(request.getParameter("num"));

String pageNum = request.getParameter("pageNum");

String searchKey = request.getParameter("searchKey");

String searchValue = request.getParameter("searchValue");

BoardForm dto = dao.getReadData(num);

if(dto==null)

return mapping.findForward("list");

dto.setContent(dto.getContent().replaceAll("\n","<br/>"));

String param = "";

if(searchValue!=null){

param += "&searchKey="+searchKey;

param += "&searchValue="+URLEncoder.encode(searchValue,"UTF-8");//보낼때 다시 인코딩

}

request.setAttribute("dto", dto);

request.setAttribute("params", param);

request.setAttribute("pageNum", pageNum);

return mapping.findForward("updated");

}


3. updated.jsp (created.jsp 복사해서 생성)

<%@ page contentType="text/html; charset=UTF-8"%>

<%

request.setCharacterEncoding("UTF-8");

String cp = request.getContextPath();

%>

<!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=UTF-8">

<title>게 시 판</title>

<link rel="stylesheet" href="<%=cp %>/board/css/style.css" type="text/css" />

<link rel="stylesheet" href="<%=cp %>/board/css/created.css" type="text/css" />

<script type="text/javascript" src="<%=cp %>/board/js/util.js"></script>

<script type="text/javascript" >

function sendIt(){

f = document.myForm;

str = f.subject.value;

str = str.trim();//util.js에 있는 trim함수 호출

if(!str){

alert("\n제목을 입력하세요.");//공백제거후 내용이 없으면

f.subject.focus();

return;

}

f.subject.value = str;

str = f.name.value;

str = str.trim();

if(!str){

alert("\n이름을 입력하세요.");

f.name.focus();

return;

}

f.name.value = str;

if(f.email.value){

if(!isValidEmail(f.email.value)){

alert("\n정상적인 E-mail을 입력하세요");

f.email.focus();

return;

}

}

str = f.content.value;

str = str.trim();

if(!str){

alert("\n내용을 입력하세요.");

f.content.focus();

return;

}

f.content.value = str;

str = f.pwd.value;

str = str.trim();

if(!str){

alert("\n패스워드를 입력하세요.");

f.pwd.focus();

return;

}

f.pwd.value = str;

f.action = "<%=cp %>/board.do?method=updated_ok&num=${dto.num}&pageNum=${pageNum}${params}";

f.submit();

}

</script>

</head>

<body>

<div id="bbs" >

<div id="bbs_title">

게 시 판(Struts1+JDBC)

</div>

<form action="" name="myForm" method="post">

<div id="bbsCreated">

<div class="bbsCreated_bottomLine">

<dl>

<dt>제&nbsp;&nbsp;&nbsp;&nbsp;목</dt>

<dd>

<input type="text" name="subject" value="${dto.subject}" size="74" maxlength="100" class="boxTF"/>

</dd>

</dl>

</div>

<div class="bbsCreated_bottomLine">

<dl>

<dt>작성자</dt>

<dd>

<input type="text" name="name" value="${dto.name}" size="35" maxlength="20" class="boxTF"/>

</dd>

</dl>

</div>

<div class="bbsCreated_bottomLine">

<dl>

<dt>E-Mail</dt>

<dd>

<input type="text" name="email" value="${dto.email}" size="35" maxlength="50" class="boxTF"/>

</dd>

</dl>

</div>

<div id="bbsCreated_content">

<dl>

<dt>내&nbsp;&nbsp;&nbsp;&nbsp;용</dt>

<dd>

<textarea rows="12" cols="63" name="content" class="boxTA">${dto.content}</textarea>

</dd>

</dl>

</div>

<div class="bbsCreated_noLine">

<dl>

<dt>패스워드</dt>

<dd>

<input type="password" name="pwd" value="${dto.pwd}" size="35" maxlength="7" class="boxTF"/>

&nbsp;(게시물 수정 및 삭제시 필요)

</dd>

</dl>

</div>

</div>

<div id="bbsCreated_footer">

<input type="button" value="수정하기" class="btn2"

onclick="sendIt();" />

<input type="button" value="수정취소" class="btn2"

onclick="javascript:location.href='<%=cp %>/board.do?method=list&pageNum=${pageNum}${params }';" />

</div>

</form>

</div>

</body>

</html>

4. BoardDAO updateData method 구현

//게시글 수정

public int updateData(BoardForm dto){

int result = 0;

PreparedStatement pstmt = null;

String sql;

try {

sql = "update board set name=?,pwd=?,email=?,subject=?,content=? ";

sql += "where num=?";

pstmt = conn.prepareStatement(sql);

pstmt.setString(1, dto.getName());

pstmt.setString(2, dto.getPwd());

pstmt.setString(3, dto.getEmail());

pstmt.setString(4, dto.getSubject());

pstmt.setString(5, dto.getContent());

pstmt.setInt(6, dto.getNum());

result = pstmt.executeUpdate();

pstmt.close();

} catch (Exception e) {

System.out.println(e.toString());

}

return result;

}

5. BoardAction updated_ok method 구현(수정 반영 기능 구현)

수정부분은 config로 가지않고 수정하는 목표를 이뤘으므로 리스트 페이지를 호출해주는거만 하면 됨

//하나의 게시글 수정시

public ActionForward updated_ok(ActionMapping mapping, ActionForm form,

HttpServletRequest request, HttpServletResponse response) throws Exception {

int num = Integer.parseInt(request.getParameter("num"));

String pageNum = request.getParameter("pageNum");

String searchKey = request.getParameter("searchKey");

String searchValue = request.getParameter("searchValue");

BoardForm f = (BoardForm)form;

f.setNum(num);

dao.updateData(f);

String param = "";

if(searchValue!=null){

param += "&searchKey="+searchKey;

param += "&searchValue="+URLEncoder.encode(searchValue,"UTF-8");//보낼때 다시 인코딩

}

받는 페이지가 없으므로 setAttribute를 작성할 필요없음

//request.setAttribute("params", param);

//request.setAttribute("pageNum", pageNum);

return mapping.findForward("updated_ok");

<forward name="updated_ok" redirect="true" path="/board.do?method=list"/>

config에 작성하는 forward 경로와 ActionForward 객체는 동일한 개념

ActionForward af = new ActionForward();

af.setRedirect(true);

af.setPath("/board.do?method=list&pageNum="+pageNum+param);

return af;

}



삭제 기능 추가

1. BoardDAO deleteData method 생성

//게시글 삭제

public int deleteData(int num){

int result = 0;

PreparedStatement pstmt = null;

String sql;

try {

sql = "dlete board where num=? ";

pstmt = conn.prepareStatement(sql);

pstmt.setInt(1, num);

result = pstmt.executeUpdate();

pstmt.close();

} catch (Exception e) {

System.out.println(e.toString());

}

return result;

}

2. BoardAction deleted method 생성(실행 후 Redirect 진행)

//하나의 게시글 삭제시

public ActionForward deleted(ActionMapping mapping, ActionForm form,

HttpServletRequest request, HttpServletResponse response) throws Exception {

int num = Integer.parseInt(request.getParameter("num"));

String pageNum = request.getParameter("pageNum");

String searchKey = request.getParameter("searchKey");

String searchValue = request.getParameter("searchValue");

dao.deleteData(num);

String param = "";

if(searchValue!=null){

param += "&searchKey="+searchKey;

param += "&searchValue="+URLEncoder.encode(searchValue,"UTF-8");//보낼때 다시 인코딩

}

ActionForward af = new ActionForward();

af.setRedirect(true);

af.setPath("/board.do?method=list&pageNum="+pageNum+param);

return af;

}


'Dev > Struts' 카테고리의 다른 글

Struts2 세팅  (0) 2019.03.21
Struts1/iBatis - 파일 업로드 기능 구현  (0) 2019.03.21
Struts1/iBatis - 게시판 만들기  (2) 2019.03.20
iBatis(2.0) 및 log4j 세팅  (0) 2019.03.20
Struts1 세팅 및 기본 예제 & MVC 패턴  (0) 2019.03.18