MelonPeach

5.스프링 게시판 만들기 / 게시판 작성 기능 구현

 

이전 포스팅까지는 게시판을 만들기위한 기본설정을 하였는데요..

이제는 게시판에 글을 작성하는 작업을 하려고 합니다.

먼저 게시판에 글을 작성하기 위해선 오라클에서 테이블을 만들어야하는데요.

 

 


 

MP_BOARD라는 테이블을 생성합니다.

순서대로 BNO : 게시판 번호, TITLE : 게시판 제목, CONTENT : 게시판 내용, WRITER : 작성자,

REGDATE : 등록일.. PRIMARY KEY(BNO)를 기본키라고하는데 기본키를 BNO로 하겠다는 말입니다.

나중에 이 기본키를 이용하여 수정, 삭제, 댓글 등등.. 하기위해 쓰일겁니다. 

 

CREATE TABLE MP_BOARD(
    BNO NUMBER NOT NULL,
    TITLE VARCHAR2(100)     NOT NULL,
    CONTENT VARCHAR2(2000)  NOT NULL,
    WRITER VARCHAR2(100)    NOT NULL,
    REGDATE DATE            DEFAULT SYSDATE,
    PRIMARY KEY(BNO)
);

 

 

오라클 시퀀스 생성

 

이 명령어는 테이블의 게시판 번호를 1부터 자동으로 1씩 증가시켜준다는 말입니다.

 

CREATE SEQUENCE MP_BOARD_SEQ
START WITH 1
INCREMENT BY 1;

 

 

 

테이블만 만들었지 데이터는 넣어주지 않았기때문에 조회를하면 데이터가 없다는걸 알 수 있습니다.

 


 

 

 

INSERT명령어를 통해 데이터를 넣고 다시 SELECT명령어를 하게되면 이렇게 데이터가 들어갑니다

데이터가 들어갔다면 항상 COMMIT;를 하여 저장해줍니다.

 

INSERT INTO MP_BOARD(BNO, TITLE, CONTENT, WRITER)
     VALUES (MP_BOARD_SEQ.NEXTVAL, '제목입니다', '내용입니다', 'MELONPEACH');

SELECT * FROM MP_BOARD;
COMMIT;

오라클에서 작성하고 오류없이 잘 나온다면 이 쿼리들은 이클립스에 XML파일에 옮겨서 사용하게 됩니다.


 

 

 

 

src/main/resources/mappers에 boardMapper.xml에 들어가서 코드를 작성해줍니다.

 

   <!-- 게시판 글 작성 -->
   <insert id="insert">
	   INSERT INTO MP_BOARD(    BNO 
	   					      , TITLE 
	   					      , CONTENT 
	   					      , WRITER  )
	                 VALUES(    MP_BOARD_SEQ.NEXTVAL 
	                 		  , #{title}
	                 		  , #{content}
	                 		  , #{writer}  )
   
   </insert>

 

 

 

프로젝트 경로

 

src/main/java에 패키지를 만들어줍니다.

kr.co.controller

kr.co.dao 

kr.co.service 

kr.co.vo

여기서 controller의 역할은 웹에서 처리해야할 데이터를 받고, 

이 데이터를 담당할 service를 선택하여 호출합니다.

그리고 처리한 데이터를 다음 페이지에서 볼 수 있게 셋팅하며 이동할 페이지를 리턴합니다.

service는 데이터를 dao를 통해 넘겨주거나 받으면서 비즈니스 로직을 수행하는 역할을 합니다.

dao는 DB를 통해 데이터를 조회하거나 수정 삭제 하는 역할을 합니다.

vo는 DB에 있는 테이블 컬럼 값을 java에서 객체로 다루기 위해 사용합니다.

 

 

 


 

 

 

kr.co.vo에 BoardVO.java 파일을 만들어주고 그림과 같이 코드를 작성해 줍니다.

 


 

 

 

그리고 BoardVO안쪽 아래에 Alt + Shift + s를 누르거나 오른쪽 버튼 > Source에 

Generate Getters and Setters에 들어갑니다.

 


 

 

 

체크박스에 모두 체크해주신 후에 OK버튼을 클릭합니다.

 

package kr.co.vo;

import java.util.Date;

public class BoardVO {

	private int bno;
	private String title;
	private String content;
	private String writer;
	private Date regdate;
	
	public int getBno() {
		return bno;
	}
	public void setBno(int bno) {
		this.bno = bno;
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	public String getWriter() {
		return writer;
	}
	public void setWriter(String writer) {
		this.writer = writer;
	}
	public Date getRegdate() {
		return regdate;
	}
	public void setRegdate(Date regdate) {
		this.regdate = regdate;
	}
	
}

 

 

 

 

kr.co.dao에 BoardDAO와 BoardDAOImpl을 만들어서 코드를 작성해 줍니다.

 

package kr.co.dao;

import kr.co.vo.BoardVO;

public interface BoardDAO {

	// 게시글 작성
	public void write(BoardVO boardVO) throws Exception;
}
package kr.co.dao;

import javax.inject.Inject;

import org.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Repository;

import kr.co.vo.BoardVO;

@Repository
public class BoardDAOImpl implements BoardDAO {

	@Inject
	private SqlSession sqlSession;
	
	// 게시글 작성
	@Override
	public void write(BoardVO boardVO) throws Exception {
		sqlSession.insert("boardMapper.insert", boardVO);
		
	}

}

 

 

 

 

kr.co.service에 BoardService와 BoardServiceImple을 만들어서 코드를 작성해 줍니다.

 

package kr.co.service;

import kr.co.vo.BoardVO;

public interface BoardService {

	// 게시글 작성
	public void write(BoardVO boardVO) throws Exception;
	
}
package kr.co.service;


import javax.inject.Inject;

import org.springframework.stereotype.Service;

import kr.co.dao.BoardDAO;
import kr.co.vo.BoardVO;

@Service
public class BoardServiceImpl implements BoardService {

	@Inject
	private BoardDAO dao;
	
	// 게시글 작성
	@Override
	public void write(BoardVO boardVO) throws Exception {
		dao.write(boardVO);
	}

}

 

 

 

 

kr.co.controller에 BoardController.java 파일을 만들고 코드를 작성해 줍니다.

 

package kr.co.controller;

import javax.inject.Inject;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import kr.co.service.BoardService;
import kr.co.vo.BoardVO;

@Controller
@RequestMapping("/board/*")
public class BoardController {

	private static final Logger logger = LoggerFactory.getLogger(BoardController.class);
	
	@Inject
	BoardService service;
	
	// 게시판 글 작성 화면
	@RequestMapping(value = "/board/writeView", method = RequestMethod.GET)
	public void writeView() throws Exception{
		logger.info("writeView");
		
	}
	
	// 게시판 글 작성
	@RequestMapping(value = "/board/write", method = RequestMethod.POST)
	public String write(BoardVO boardVO) throws Exception{
		logger.info("write");
		
		service.write(boardVO);
		
		return "redirect:/";
	}
	
}

 

 

 

 

이제 스프링이 스캔 할수 있도록 root-context.xml파일에 코드를 추가해줍니다.

 

    <!-- scan -->
    <context:component-scan base-package="kr.co.service"></context:component-scan>
    <context:component-scan base-package="kr.co.dao"></context:component-scan>
    <context:component-scan base-package="kr.co.vo"></context:component-scan>

 

 

 

 

src/main/webapp/spring/appServlet/servlet-context.xml로 들어갑니다.

아마 처음에 프로젝트만들때 패키지를 kr.co.study로 만드셨다면 kr.co.study로 설정 되어있으실겁니다.

controller가 client의 요청을 받을 수 있도록 kr.co.controller로 설정을 해줍니다. 

 

 

<context:component-scan base-package="kr.co.controller" />

 

 

 

src/main/webapp/WEB-INF/views에 board 폴더를 만들고 writeView.jsp파일을 생성하여 코드를 추가해줍니다.

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<html>
	<head>
	 	<title>게시판</title>
	</head>
	<body>
	
		<div id="root">
			<header>
				<h1> 게시판</h1>
			</header>
			<hr />
			 
			<nav>
			  홈 - 글 작성
			</nav>
			<hr />
			
			<section id="container">
				<form role="form" method="post" action="/board/write">
					<table>
						<tbody>
							<tr>
								<td>
									<label for="title">제목</label><input type="text" id="title" name="title" />
								</td>
							</tr>	
							<tr>
								<td>
									<label for="content">내용</label><textarea id="content" name="content" ></textarea>
								</td>
							</tr>
							<tr>
								<td>
									<label for="writer">작성자</label><input type="text" id="writer" name="writer" />
								</td>
							<tr>
								<td>						
									<button type="submit">작성</button>
								</td>
							</tr>			
						</tbody>			
					</table>
				</form>
			</section>
			<hr />
		</div>
	</body>
</html>

 

 

 

URL에 localhost:8080/board/writeView에 접속하여서

제목과 내용, 작성자를 입력한후 작성 버튼을 누릅니다.

 


 

 

 

 

오류 같지만 현재 홈화면이 없고 BoardController에서 return "redirect:/"; 경로를 localhost:8080으로 보내기때문에 404에러가 나게됩니다.

작성버튼을 눌렀으니 오라클에 정상적으로 저장되었는지 확인해 봅니다.

 


 

 

 

 

정상적으로 등록되었네요.

 

다음 포스팅은 게시물 목록 기능에 대해 포스팅하겠습니다.

이 글을 공유합시다

facebook twitter googleplus kakaostory naver