Java/Spring

[Spring] 게시판 글쓰기

퓨어맨 2022. 7. 13. 18:49

boardInsert.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html>
<head>
<!-- bootstrap 사용하기 위해 필요한 라이브러리 3개! -->
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<!-- jQuery library -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<!-- Latest compiled JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<div class = "container">
		<h2>게시판 만들기</h2>
		<div class="panel panel-default">
		   <div class="panel-heading">SpringMVC 게시판</div>
		   <div class="panel-body">
		   
		   		<form class="form-horizontal" action="boardInsertData.do" method="post">
				  <div class="form-group">
				    <label class="control-label col-sm-2" for="title">제목:</label>
				    <div class="col-sm-10">
				      <input type="text" class="form-control" id="title" name="title" placeholder="제목을 입력하세요">
				    </div>
				  </div>
				  <div class="form-group">
				    <label class="control-label col-sm-2" for="writer">작성자:</label>
				    <div class="col-sm-10">
				      <input type="text" class="form-control" id="writer" name="writer" placeholder="작성자를 입력하세요">
				    </div>
				  </div>
				  <div class="form-group">
				    <label class="control-label col-sm-2" for="contents">내용:</label>
				    <div class="col-sm-10">
				    	<textarea rows="10" class="form-control" id="contents" name="contents"></textarea>
				    </div>
				  </div>
				  <div class="form-group">
				    <div class="col-sm-offset-2 col-sm-10">
				      <button type="submit" class="btn btn-default btn-primary btn-sm">글쓰기</button>
				    </div>
				  </div>
				</form>
		  	
		   </div>
		</div>
	</div>

</body>
</html>

 

 

BoardMapper.java

package kr.smhrd.mapper;

import java.util.List;

import kr.smhrd.model.BoardVO;

public interface BoardMapper {
		
	public List<BoardVO> boardList();
	
	public void boardInsert(BoardVO vo);
}

 

 

BoardMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="kr.smhrd.mapper.BoardMapper">
    
    <select id="boardList" resultType="kr.smhrd.model.BoardVO">
		select *
		from board
    </select>
    
    <insert id="boardInsert" parameterType="kr.smhrd.model.BoardVO">
		insert into board(title,writer,contents)
		values(
			#{title},
			#{writer},
			#{contents}
		)
    </insert>

</mapper>

 

 

BoardController.java

package kr.smhrd.web;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import kr.smhrd.mapper.BoardMapper;
import kr.smhrd.model.BoardVO;

@Controller // FrontController + Controller(POJO)
public class BoardController {
	
	// DB 쿼리문을 수행할 수 있는 인터페이스 생성
	// null pointer exception 뜨면 @Autowired 되어 있는지 확인
	@Autowired // DI
	private BoardMapper mapper;
	
	// 메소드 : public String 메소드명 ()
	@RequestMapping("/basic.do")
	// Handler Mapping --> basic.do 라는 요청 url과 basic method를 연결!
	public String basic(HttpServletRequest request) {
		
		List<BoardVO> list = mapper.boardList();

		// forward방식으로 view에 접근
		// : url이 안바뀌고 있기 때문에
		// : 특정 값들을 넘겨주기 위해서는 request 담아서 넘겨주면 된다.
		// : request객체가 필요하면 메소드의 매개변수로 request를 받겠다고 쓰면 된다!
		// ----> Spring framework에서 알아서 관리!
		// ★★★객체 바인딩
		request.setAttribute("list", list);
		
		return "basic"; // 논리적인 주소 -- ViewResolver -- 물리적인 주소
		// basic --> /WEB-INF/views/basic.jsp
	}
	
	// 글쓰기 페이지로 이동만 하는 메소드
	@RequestMapping("/boardInsert.do")
	public String boardInsert() {
		return "boardInsert";
	}
	
	// 글쓰기를 수행하는 메소드
	@RequestMapping("/boardInsertData.do")
	public String boardInsertData(BoardVO vo) {
		// form태그에서 넘겨주는 데이터를 받아올 때는 매개변수에 받아올 자료형을 넣어주면
		// spring framework가 자동으로 해당하는 데이터를 받아온다.
		// ** input태그의 name 값 == vo의 field명 == db table column
		// xml안쪽에 쿼리문을 작성 --> interface --> controller
		
		// 작성자, 내용, 제목을 받아와서 데이터베이스에 insert 해주는 작업
		// 1.interface안에 insert를 수행할 수 있는 메소드 생성
		mapper.boardInsert(vo);
		
		// 2. xml파일 안에 interface메소드와 대응될 수 있는 id값을 가지고 있는 태그 생성
		// 3. 쿼리문을 작성
		
		
		return "redirect:/basic.do";
		// redirect방식을 사용하고 싶을때는 redirect:/ 를 반드시 붙여준다.
	}
	
	
	
}