[Spring] 13.SpringProject-등록구현




게시물 등록 작업



등록 작업은 크게 1.등록을 위한 입력 페이지를 보는 경우(GET 방식)와 2.실제로 데이터를 처리하는 부분(POST 방식)으로 구분됩니다.

따라서 다음과 같이 BoardController를 설계하겠습니다!


//BoardController.java


package com.gguri.swp.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 com.gguri.swp.domain.BoardVO;
import com.gguri.swp.service.BoardService;

@Controller
@RequestMapping("/board/*") //http://localhost:8080/board 인 경우에 먼저 호출되는 클래스 
public class BoardController {
	
    private static final Logger logger = LoggerFactory.getLogger(BoardController.class);
	
    //서비스 객체 (쿼리문 실행)
	@Inject
	private BoardService service;
	
    /* http://localhost:8080/board/register 인 경우에 호출
    등록을 위한 입력 페이지 register.jsp 보여줌(GET 방식)*/
	@RequestMapping(value = "/register", method = RequestMethod.GET)
	public void registerGET(BoardVO board, Model model) throws Exception{
		logger.info("register get.....");
	}
	
    /* register.jsp 에 있는 post 방식의 form 태그에서 submit이 된 경우 호출
    전달받은 게시물을 등록함(POST 방식) */
	@RequestMapping(value = "/register", method = RequestMethod.POST)
	public String registerPOST(BoardVO board, Model model) throws Exception{
		logger.info("register post.....");
		logger.info(board.toString());
		//실질적인 insert문 실행
		service.regist(board);
		//model에 registerOK라는 값을 가지고 있는 result 속성을 추가
		model.addAttribute("result", "registerOK");
		
        //WEB-INF/views/board/sucess.jsp 호출
		return "/board/success";
	}
}



위의 코드에서 집중해서 봐야할 것은 registerGET과 registerPOST 메소드입니다! 전 장에서 설명한 GET방식과 POST 방식인데요~

입력페이지처럼 GET 방식은 항상 사용자가 직접 브라우저에 접근이 가능할 때 사용합니다.

반면에, POST 방식은 주소창에 보여지면 안되는 정보를 전송하는데 사용합니다!


실제로 화면에서 입력되어 들어오는 데이터를 처리하는 registerPOST 메소드의 파라미터는 자동으로 모든 데이터를 BoardVO로 수집하는 부분과,

향후에 뷰로 데이터를 전달할 가능성이 있으므로 Model 클래스의 객체를 받도록 설계하였습니다.


뷰의 구현-등록



아까 컨트롤러에서 필요한 jsp 파일은 총 두개였습니다!

등록을 위한 입력페이지인 register.jsp 파일과 게시물이 정상적으로 등록되었을 때 보여지는 success.jsp 파일입니다!

다음 경로에 추가해주겠습니다!


image




<!-- register.jsp -->

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

<%@include file="../include/header.jsp" %>
<form role="form" method="post">
	<div class="box-body">
		<div class="form-group">
			<label for="title">Title</label>
			<input type="text" id="title" name="title" class="form-control" placeholder="Enter Title"/>		
		</div>
		<div class="form-group">
			<label for="content">Content</label>
			<textarea name="content" id="content" class="form-control" rows="3" placeholder="Enter"></textarea>		
		</div>
		<div class="form-group">
			<label for="writer">Writer</label>
			<input type="text" name="writer" id="writer" class="form-control" placeholder="Enter Writer"/>		
		</div>
	</div>
	<div>
		<button type="submit" class="btn btn-primary">Submit</button>
	</div>
</form>
<%@include file="../include/footer.jsp" %>




위의 register.jsp를 보면 form 태그의 method 속성이 post이죠? submit이 눌러지면 사용자에게 입력받은 Title, Content, Writer을 registerPOST 메소드의 파라미터 BoardVO로 넘깁니다!

또, action 속성이 지정되지 않았는데 action 속성이 지정되지 않으면 현재 경로를 그대로 action의 대상 경로로 잡습니다!


다음은 게시물이 등록 완료되었을 때 보여지는 화면인 success.jsp 입니다!


<!-- success.jsp -->


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

<%@include file="../include/header.jsp" %>
<div class="col-md-12">
	<div class="box">
		<div class="box-header with-border">
			<h3 class="box-title">SUCCESS PAGE</h3>
		</div>
		<div class="box-body">SUCCESS!</div>
		<div class="box-footer">Footer</div>
	</div>
</div>
<%@include file="../include/footer.jsp" %>



한번 서버를 구동해서 제대로 동작하나 접속해볼까요?


image



register.jsp가 제대로 보여지네요! 게시물 내용을 입력하고 submit을 눌러볼까요?


image



submit을 눌렀더니 registerPOST 메소드의 return 값인 success.jsp가 제대로 보여집니다!


image



또 mysql 서버의 board에도 제대로 데이터가 삽입되었네요!


컨트롤러에서의 데이터 전달



게시물의 등록 작업을 정리해보겠습니다!


image