게시물 등록
게시물을 등록할 때는
사용자가 작성하기 위한 페이지를 볼 경우 -> GET 방식
사용자가 데이터를 입력할 경우 -> POST 방식
이제 본격적으로 컨트롤러를 작성하겠습니다.
package kr.co.web.controller;
import javax.inject.Inject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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 kr.co.web.domain.BoardVO;
import kr.co.web.service.BoardService;
@Controller
@RequestMapping("/board/*")
public class BoardController {
private static final Logger logger = LoggerFactory.getLogger(BoardController.class);
// 로그를 찍기 위한 객체 Logger 사용
@Inject
private BoardService service;
@RequestMapping(value = "/register", method = RequestMethod.GET)
public void registerGET(BoardVO board) throws Exception {
logger.info("register GET !!");
}
@RequestMapping(value = "/register", method = RequestMethod.POST)
public String registerPOST(BoardVO board, Model model) throws Exception {
logger.info("register POST !!");
service.create(board);
model.addAttribute("result", "registerOK");
return "/board/test";
}
}
해당 컨트롤러에서 유심히 봐야할 것은 registerGET 메서드와 registerPOST메서드 입니다.
registerGET메서드는 사용자가 데이터를 입력하는 페이지에 접근할 때 사용하고,
registerPOST메서드는 주소창에 보여지면 안되는 정보를 전송할 때 사용합니다.
실제로 화면에서 입력되어 들어오는 데이터를 처리하는 registerPOST 메서드의 파라미터는 자동으로 모든 데이터를 BoardVO로 수집하는 부분과,
나중에 뷰로 데이터를 전달하기 때문에 Model 클래스의 객체를 받도록 설계 했습니다.
그리고 controller 나 service, dao에서 create메서드의 파라미터를 BoardVO로 해준 이유는
사용자가 데이터를 입력하고 BoardVO의 setter와 getter를 이용하여 데이터를 넣고 가져오기 위함입니다!!!
(수정도 마찬가지 입니다.)
뷰 구현, 등록
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>게시글 작성</title>
</head>
<body>
<form method="post">
<div>
<div>
<label for="title">제목</label>
<input type="text" id="title" name="title" placeholder="제목을 입력하세요."/>
</div>
<div>
<label for="contents">내용</label>
<textarea name="contents" id="contents" rows="3" placeholder="내용을 입력하세요."></textarea>
</div>
<div>
<label for="name">작성자</label>
<input type="text" name="name" id="name"/>
</div>
</div>
<div>
<button type="submit">등록</button>
</div>
</form>
</body>
</html>
register.jsp에서 label 태그의 for 부분과 input 태그의 name을 같이 맞춰주어야 합니다.
해당 부분은 db, vo에서 변수로 선언한 값이랑 일치해야 합니다.
해당 jsp를 보면 form 태그의 method 속성이 post인데
등록버튼을 누르면 사용자가 입력한 제목, 내용, 이름을 registerPOST 메서드의 파라미터 BoardVO로 전달합니다.
그리고 form태그에는 action 속성이 있는데 해당 속성을 작성하지 않으면 현재 경로 그대로 action의 대상 경로로 잡습니다.
이제 게시물이 정상적으로 등록이 되었으면 보여지는 화면인 test.jsp를 구현합니다.
test를 하는 이유는 나중에 등록을 하고 난 후에 리스트를 뿌릴 작업을 할것이기 때문에 테스트용으로 작성합니다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
성공적으로 등록되었습니다.
</body>
</html>
이제 서버를 구동해서 제대로 되는지 확인해보겠습니다.
이제 데이터를 작성하고 등록을 눌러보겠습니다.
등록버튼을 누르면 registerPOST메서드가 실행되고
아까 registerPOST의 return값을 test.jsp로 설정했는데 test.jsp의 내용이 잘 나왔습니다!!!
제대로 된것을 확인하였으니 DB에도 데이터가 잘들어갔는지 확인 해보겠습니다.
데이터가 잘들어왔습니다~~
'JAVA > blog' 카테고리의 다른 글
게시글 목록 구현 (0) | 2020.07.09 |
---|---|
controller redirect (0) | 2020.07.09 |
controller를 작성하기 전에 알아야 할 사항 (0) | 2020.07.08 |
비즈니스 계층(service) (0) | 2020.07.08 |
persistence 계층(영속 계층) (0) | 2020.07.08 |