on
[스프링 프레임워크]게시판 만들기 #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