글쓰기는 두 개의 기능으로 구성되었기 때문에 두 개의 컨트롤이 필요하다.

하나는 글쓰기 폼을 보여주고 사용자가 입력하게 하는 페이지(board1Form) 컨트롤과

사용자가 입력 후 저장 버튼을 누르면 저장하는 컨트롤(board1FormSave)이다.

먼저 글쓰기 폼은 다음 코드와 같이

사용자가 입력할 폼(HTML)이 있는 JSP 파일의 위치만 반환하면 된다.

@RequestMapping(value = "/board1Form")
public String boardForm() throws Exception {
        return "board1/boardForm";
}

board1Ctr.java

반환된 boardForm.jsp에는 다음과 같은 코드가 구성되어 있다.

Form 테그에서 action명이board1Save 컨트롤을 가르키고 있기 때문에

사용자가 저장 버튼을 누르면 글 내용을 저장하는 board1Save이 실행된다.

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%>
<%@ taglib prefix="c"  uri="http://java.sun.com/JSP/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>board1</title>
</head>
<body>
    <form name="form1" action="board1Save">
        <table border="1" style="width:600px">
            <caption>게시판</caption>
            <colgroup>
                <col width='15%' />
                <col width='*%' />
            </colgroup>
            <tbody>
                <tr>
                    <td>작성자</td>
                    <td><input type="text" name="brdwriter" size="20" maxlength="20"></td>
                </tr>
                <tr>
                    <td>제목</td>
                    <td><input type="text" name="brdtitle" size="70" maxlength="250"></td>
                </tr>
                <tr>
                    <td>내용</td>
                    <td><textarea name="brdmemo" rows="5" cols="60"></textarea></td>
                </tr>
            </tbody>
        </table>   
        <a href="#" onclick="form1.submit()">저장</a>
    </form>   
</body>
</html>

board1Form.jsp

글 내용을 저장하기 위해 board1Save 컨트롤이 실행된다.

boardSave 함수가 실행되면서 파라메터로 boardVO 클래스가 사용된다.

@ModelAttribute는 사용자가 입력한 내용들의 이름과 지정된 클래스 (boardVO)의 변수 명이 일치하면 자동으로 그 내용을 담아서 반환해 준다.

사용자 입력 HTML에서 텍스트 입력 상자의 이름을 확인해 보면 brdwriter(작성자), brdtitle(제목), brdmemo(글내용)으로 명명되어 있다.

이 명칭은 모두 boardVO에 선언되어 사용되는 것으로 @ModelAttribute이 자동으로 바인딩하여 넘겨 준다.

@ModelAttribute을 생략하고 클래스명만 지정해서 사용할 수 있다.

@ModelAttribute을 사용하지 않으면 request를 사용하며 하나씩 값을 받아와야 한다.

@RequestMapping(value = "/board1Save")
public String boardSave(@ModelAttribute boardVO boardInfo) throws Exception {
       
    boardSvc.insertBoard(boardInfo);
       
    return "redirect:/board1List";
}

board1Ctr.java

사용자가 입력한 내용을 boardVO로 받아와서 저장(Insert)하기 위한 서비스(insertBoard)로 넘겨 준다.
저장되고 난 후 반환 값이 JSP 파일이 아니라 redirect 이다. 즉, 글을 저장하고 난 뒤 게시판의 리스트(board1List)로 돌아가라는 의미이다.

[주의] 입력 폼의 컴포넌트(텍스트 박스들 등)명칭과 boardVO 클래스, 테이블(TBL_BOARD)의 필드명이 모두 동일하다.

개발의 편의성과 가독성을 위한 것으로 필수는 아니지만 지키는 것이 좋다.


서비스에서는 INSERT문을 실행한다.

public void insertBoard(boardVO param) throws Exception {
        sqlSession.insert("insertBoard1", param);
}

board1Svc.java

<insert id="insertBoard1" parameterType="gu.board1.boardVO" >
        INSERT INTO TBL_BOARD(BRDTITLE, BRDWRITER, BRDMEMO, BRDDATE)
        VALUES (#{brdtitle}, #{brdwriter}, #{brdmemo}, NOW() )
</insert>

board1.xml

여기에서도 서비스명(insertBoard)과 SQL 매핑 ID(insertBoard1)에 1만 다르고

다른 이름들은 같다.

사소하지만 이러한 명명 규칙이 프로젝트가 커질 수록 수정에 용이하여

때로는 중요한 역할을 하기도 한다.



'Java > 게시판 1' 카테고리의 다른 글

1. 기본게시판 - 준비 & 시작  (5) 2016.03.28
2. 기본게시판 - 리스트  (0) 2016.03.28
4. 기본게시판 - 글 읽기  (0) 2016.03.28
5. 기본게시판 - 글 수정  (2) 2016.03.28
6. 기본게시판 - 글 삭제  (0) 2016.03.28

+ Recent posts