본문으로 바로가기

02. Spring MVC 게시판 구현④ - 글작성

category IT/SpringDay 2022. 5. 18. 16:59

1. Controller 에서 글작성 페이지 이동 -> write_view.jsp로 응답 됨

@RequestMapping("/write_view")
public String write_view(Model model) {
	logger.info("write_view start..");
	return "write_view";
}

 

2. Write_view.jsp

   - submit 선택시 form action="write" method="post" 실행

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ include file="header.jsp" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="write" method="post">
		<table width= "500" border="1">
			<tr>
				<td> 이름 </td>
				<td> <input type="text" name="bName" size = "50"> </td>
			</tr>
			<tr>
				<td> 제목 </td>
				<td> <input type="text" name="bTitle" size = "50"> </td>
			</tr>
			<tr>
				<td> 내용 </td>
				<td> <textarea name="bContent" rows="10" ></textarea> </td>
			</tr>
			<tr >
				<td colspan="2"> <input type="submit" value="입력"> &nbsp;&nbsp; 
				<a href="list">목록보기</a></td>
			</tr>
		
		</table>
	
	</form>

</body>
</html>

 

3. Controller

 -  Write_view.jsp에서 받은 파라메터 값을 model.addAttribute("test", request) 를 사용하여 담아놓는다.

@RequestMapping("/write")
	public String write(HttpServletRequest request, Model model) {
		logger.info("write start..");
		
		model.addAttribute("request", request);
		command = new BWriteCommand();
		command.execute(model);
		
		return "redirect:list";
	}

 

4. BWriteCommand() 실행

   1) Map<String, Object> map = model.asMap();

   - Controller에서 model을 통해 전달받은 값을 Map 형식으로 바꿔줌.

   - model.addAttribute("test", request -> "key", value);

   2) HttpServletRequest request = (HttpServletRequest) map.get("test");

   - Map 에 담아둔 값을 다시 request에 꺼내담는다. 

 

package com.oracle.oMVCBoard.command;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.springframework.ui.Model;

import com.oracle.oMVCBoard.dao.BDao;

public class BWriteCommand implements BCommand {

	@Override
	public void execute(Model model) {
		Map<String, Object> map = model.asMap();
		HttpServletRequest request = (HttpServletRequest) map.get("request");
		System.out.println("BWriteCommand의 request : "+request);
		System.out.println("BWriteCommand의 map : "+map);
	
		String bName = request.getParameter("bName");
		String bTitle = request.getParameter("bTitle");
		String bContent = request.getParameter("bContent");
		
		BDao dao = new BDao();
		dao.write(bName, bTitle, bContent);
	}

}

 

5. Dao 에서 DB 연결하여 실행

public void write(String bName, String bTitle, String bContent) {
		Connection connection = null;
		PreparedStatement preparedStatement = null;
		
		try {
			connection = dataSource.getConnection();
			String query = "insert into mvc_board (bId, bName, bTitle, bContent, bHit, bGroup, bStep, bIndent, bDate)"
					+ "values (mvc_board_seq.nextval, ?, ?, ?, 0, mvc_board_seq_currval, 0, 0, sysdate)";
			
			preparedStatement = connection.prepareStatement(query);
			preparedStatement.setString(1, bName);
			preparedStatement.setString(2, bTitle);
			preparedStatement.setString(3, bContent);
			int rn = preparedStatement.executeUpdate();
		} catch (Exception e) {
				// TODO: handle exception
				System.out.println("write  dataSource-->" + e.getMessage() );
				e.printStackTrace();
			} finally {
				try { 
					if(preparedStatement != null) preparedStatement.close();
					if(connection != null) connection.close();
				} catch (Exception e2) {
					// TODO: handle exception
					e2.printStackTrace();
				}
			}
		
	}

 

***** 입력만 누르면 끝인데,, 갑분오... 갑자기 오류!!

-> 열을 사용할 수 없다, insert into 부분에 오류가 있는 것이 확실.

-> 컬럼 이름 중 오타 있나 확인 해보니 역시나~!

String query =  insert into mvc_board (bId, bName, bTitle, bContent, bHit, bGroup, bStep, bIndent, bDate) values (mvc_board_seq.nextval, ?, ?, ?, 0, mvc_board_seq_currval, 0, 0, sysdate)

* mvc_board_seq_currval -> mvc_board_seq.currval 으로 수정하면 된다.

 

수정 후 DAO

public void write(String bName, String bTitle, String bContent) {
		Connection conn = null;
		PreparedStatement pstmt= null;
		
		try {
			conn = dataSource.getConnection();
			String sql = "insert into mvc_board (bId, bName, bTitle, bContent, bHit, bGroup, bStep, bIndent, bDate)"
					+ "values (mvc_board_seq.nextval, ?, ?, ?, 0, mvc_board_seq.currval, 0, 0, sysdate)";
			
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, bName);
			pstmt.setString(2, bTitle);
			pstmt.setString(3, bContent);
			int rn = pstmt.executeUpdate();
		} catch (Exception e) {
				// TODO: handle exception
				System.out.println("write  dataSource-->" + e.getMessage() );
				e.printStackTrace();
			} finally {
				try { 
					if(pstmt != null) pstmt.close();
					if(conn != null) conn.close();
				} catch (Exception e2) {
					// TODO: handle exception
					e2.printStackTrace();
				}
			}
		
	}

 

6. 최종화면 - 방금 입력한 글이 삽입 되어 있는 것을 볼 수 있다.