데이터 crud -> db에 update, select 등을함
controller ->service ->dao->DB ->jsp
DB에서 아무 데이터 없이 화면만 노출하겠다 하면 위 과정이 생략이 된다.
화면만 노출 controller -> jsp
Spring Application 서버 재실행 기준
XML, Properties,yml 파일을 수정했다.
=>재실행 반드시 필요함.
boardwrite.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>게시글 작성하기</title>
<style type="text/css">
div.grid{
display: grid;
grid-template-columns: 80px 1fr;
grid-template-rows: 28px 28px 320px 1fr;
row-gap: 10px;
}
div.grid >div.btn-group{
display: grid;
grid-column: 1/3;
}
div.grid div.right-align{
text-align: right;
}
label{
padding-left: 10px;
}
button,input,textarea{
padding: 10px;
}
</style>
</head>
<body>
<!-- name의 역활 서버로 전송할때 name으로 전송하겠다.
DB변수랑 같아야하고 setter가 있어야한다. -->
<h1>게시글 작성</h1>
<form method="post">
<div class="grid">
<label for="subject">제목</label>
<input type="text" name="subject" id="subject"/>
<label for="email">이메일</label>
<input type="email" name="email" id="email"/>
<label for="content">내용</label>
<textarea name="content" id="content" style="height:300px;"></textarea>
<div class="btn-group">
<div class="right-align">
<input type="submit" value="저장"/>
</div>
</div>
</div>
</form>
</body>
</html>
BoardDAO.java
/**
* DB에 새로운 게시글을 등록한다.
* @param boardVO 사용자가 입력한 게시글 정보
* @return DB 에 Insert 한 개수
*/
public int createNewBoard(BoardVO boardVO);
Impl
@Override
public int createNewBoard(BoardVO boardVO) {
//getSqlSession().insert()는 insert한 ROW의 개수를 반환한다.
return getSqlSession().insert("createNewBoard",boardVO);
}
mapper
<insert id="createNewBoard"
parameterType="com.ktdsuniversity.edu.bbs.vo.BoardVO">
INSERT INTO BOARD
( ID
, SUBJECT
, CONTENT
, EMAIL
, VIEW_CNT
, CRT_DT
, MDFY_DT
, FILE_NAME
, ORIGIN_FILE_NAME)
VALUES
(SEQ_BOARD_PK.NEXTVAL
, #{subject}
, #{content}
, #{email}
, 0
, SYSDATE
, SYSDATE
, #{fileName}
, #{originFileName})
</insert>
service
/**
* 새로운 게시글을 등록 처리한다.
* @param boardVO 사용자가 입력한 게시글의 정보(내용)
* @return 정상적으로 등로고디었는지에 대한 여부
*/
public boolean createNewBoard(BoardVO boardVO);
serviceImpl
@Override
public boolean createNewBoard(BoardVO boardVO) {
//DB에 게시글을 등록한다.
//createCount에는 DB에 등록한 게시글의 개수를 반환
int createCount = boardDAO.createNewBoard(boardVO);
//DB에 등록된 개수가 0보다 크면 성공, 아니라면 실패
return createCount>0;
}
Controller
@GetMapping("/board/write")
public String viewBoardWritePage() {//화면만 보여준다하면 string을 반환하는게 좋다
return "board/boardwrite";
}
@PostMapping("/board/write")
public ModelAndView doBoardWrite(@ModelAttribute BoardVO boardVO) {
System.out.println("제목"+boardVO.getSubject());
System.out.println("이메일"+boardVO.getEmail());
System.out.println("내용"+boardVO.getContent());
System.out.println("등록일"+boardVO.getCrtDt());
System.out.println("수정일"+boardVO.getMdfyDt());
System.out.println("FileName"+boardVO.getFileName());
System.out.println("OriginFileName"+boardVO.getOriginFileName());
ModelAndView modelAndView =new ModelAndView();
boolean isSuccess=boardService.createNewBoard(boardVO);
if(isSuccess) {
//게시글의 등록결과가 성공이라면
//board/list URL로 이동한다.
//redirect:는 화면을 이동시키는 view다.
// redirect로 화면을 전환시킬 때에는
//addObject를 사용할 수 없다.
modelAndView.setViewName("redirect:/board/list");
return modelAndView;
}
else {
//게시글의 등록 결과가 실패라면
//게시글 등록(작성)화면으로 데이터를 보내준다.
// 게시글 등록(작성) 화면에서 boardVO값으로 등록 값을 설정해야한다.
modelAndView.setViewName("board/boardwrite");
modelAndView.addObject("boardVO",boardVO);
return modelAndView;
}
}