[스프링 프레임워크]게시판 만들기 #4 : 게시글 등록

[스프링 프레임워크]게시판 만들기 #4 : 게시글 등록

본 포스팅은 스프링 프레임워크를 이용하여 기본적인 게시판을 만드는 방법을 설명합니다.

기본적인 내용은 지난 포스팅을 참고해주시기 바랍니다.

2021.08.07 - [Web/Spring] - [스프링 프레임워크]게시판 만들기 #3 : DB 테이블 생성 및 게시판 목록

안녕하세요. 이번 포스팅은 지난 포스팅에서 만들었던 게시판 목록에 이어 게시글 등록을 만들어보도록 하겠습니다.

list.jsp

저번 포스팅에선 임의의 데이터를 넣어 테스트만 해보았기 때문에 날짜형식을 지정해주지 않았는데

이번 포스팅에선 글 등록을 만들며 날짜가 제대로 출력할 수 있게 JSTL을 이용하여 수정하고

글 등록 페이지로 이동하기 위한 버튼을 추가하였습니다.

그외에도 변경 부분이 몇가지 있으니 확인해주시기 바랍니다.

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> Insert title here 번호 제목 내용 작성자 날짜 조회수 ${list.seq} ${list.subject} ${list.content} ${list.name} ${list.readCount} 글쓰기

regi.jsp

게시글 등록을 위한 게시글 등록 페이지입니다. 동작만 할 수있는 매우 간단한 페이지입니다.

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> Insert title here 등록

board.js

ajax을 이용한 게시글 등록을 위한 js파일입니다.

function fn_boardRegi(){ var subject = $("#subject").val(); var name = $("#name").val(); var content = $("#content").val(); $.ajax({ type : "POST", url : "/board/regi", data : {subject : subject, name : name, content : content}, success: function(data){ if(data == "Y"){ alert("글 등록이 완료되었습니다."); location.href = "/board/list"; } }, error: function(data){ alert("실패"); console.log(data); } }); };

저는 id값을 이용하여 값들을 가져왔지만

serialize()를 이용하여 값을 가져오는 방법도 있습니다.

function fn_boardRegi(){ var data = $("#frm").serialize(); $.ajax({ type : "POST", url : "/board/regi", data : data, success: function(data){ if(data == "Y"){ alert("글 등록이 완료되었습니다."); location.href = "/board/list"; } }, error: function(data){ alert("실패"); console.log(data); } }); };

BoardController.java

게시글 등록 페이지 이동과 ajax을 이용한 게시글 등록을 위한 메서드입니다.

package com.board.controller; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.Locale; import javax.inject.Inject; import javax.servlet.http.HttpServletRequest; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import com.board.domain.BoardDTO; import com.board.service.BoardService; @Controller @RequestMapping(value="/board/*") public class BoardController { @Inject private BoardService service; @RequestMapping(value = "/list", method = RequestMethod.GET) public String list(Locale locale, Model model) throws Exception { List list = service.list(); model.addAttribute("list", list); return "/board/list"; } @RequestMapping(value = "/regiView", method = RequestMethod.GET) public String regiView(Locale locale, Model model) throws Exception { return "/board/regi"; } @ResponseBody @RequestMapping(value = "/regi", method = RequestMethod.POST) public String regi(Locale locale, Model model, HttpServletRequest request) throws Exception { Date date = new Date(System.currentTimeMillis()); SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss"); BoardDTO dto = new BoardDTO(); dto.setName(request.getParameter("name")); dto.setContent(request.getParameter("content")); dto.setSubject(request.getParameter("subject")); dto.setReg_date(format.format(date)); if(service.regi(dto) == 1) { return "Y"; }else { return "N"; } } }

BoardDAOImpl.java

DAO에서는 게시글 등록을 위한 regi()와 게시글 등록 시에 게시글 번호(SEQ)의 최대 값을 가져오는 getMaxSeq()를 추가하였습니다.

package com.board.dao; import java.util.List; import javax.inject.Inject; import org.apache.ibatis.session.SqlSession; import org.springframework.stereotype.Repository; import com.board.domain.BoardDTO; @Repository public class BoardDAOImpl implements BoardDAO { @Inject private SqlSession sqlSession; private static String namespace = "com.board.mappers.board"; @Override public List list() throws Exception { return sqlSession.selectList(namespace + ".list"); } @Override public Integer getMaxSeq() { return sqlSession.selectOne(namespace+".maxSeq"); } @Override public int regi(BoardDTO dto) { return sqlSession.insert(namespace+".regi", dto); } }

BoardServiceImpl

package com.board.service; import java.util.List; import javax.inject.Inject; import org.springframework.stereotype.Service; import com.board.dao.BoardDAO; import com.board.domain.BoardDTO; @Service public class BoardServiceImpl implements BoardService { @Inject private BoardDAO dao; @Override public List list() throws Exception { return dao.list(); } @Override public int regi(BoardDTO dto) throws Exception { if (dao.getMaxSeq() == null) { // 게시글이 존재하지 않을 때 dto.setSeq(1); // SEQ는 1 } else { // 게시글이 존재할 때 dto.setSeq(dao.getMaxSeq() + 1); // 최대값에 +1 } return dao.regi(dto); } }

boardMapper.xml

SELECT SEQ, SUBJECT, CONTENT, NAME, REG_DATE, READCOUNT FROM BOARD select max(SEQ) from board INSERT INTO BOARD( SEQ, SUBJECT, CONTENT, NAME, REG_DATE, READCOUNT ) VALUES( #{seq}, #{subject}, #{content}, #{name}, #{reg_date}, 0 )

from http://hyunipad.tistory.com/75 by ccl(A) rewrite - 2021-10-10 17:27:38