[9] Spring 비동기 통신

찬과장·2025년 4월 18일
1

Spring

목록 보기
9/17
post-thumbnail

  • main.jsp
<%@page import="com.lgdx.entity.Board"%>
<%@page import="java.util.ArrayList"%>
<%@ 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>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
</head>
<body>
	<div class="container">
	  <h2>Spring MVC 02</h2>
	  <div class="panel panel-warning">
	    <div class="panel-heading">Board List Page</div>
	    <div class="panel-body" id = "list">
	    	<table class="table table-bordered table-hover">
	    		<tr class="warning">
	    			<td>번호</td>
	    			<td>제목</td>
	    			<td>작성자</td>
	    			<td>조회수</td>
	    			<td>날짜</td>
	    		</tr>
	    		<tbody id = "view">
	    			
	    		</tbody>
	    	</table>
	    	<a class="btn btn-primary" href="javascript:goForm()">글쓰기</a>
	    </div>
	    
	    <div class = "panel-body" id = "wform" style = "display: none;">
	    <form id ="frm">
			<table class = "table table-bordered table-hover">
				<tr>
					<td>제목</td>					
					<td><input name = "title" type = "text" class="form-control" placeholder="제목을 입력하세요"></td>									
				</tr>
				<tr>
					<td>내용</td>					
					<td><textarea name = "contents" rows = "7" class="form-control" cols="" placeholder = "내용을 입력하세요"></textarea></td>					
				</tr>
				<tr>
					<td>작성자</td>					
					<td><input name = "writer" type ="text" class = "form-cotrol" placeholder="작성자를 입력하세요"></td>					
				</tr>
				<tr>
					<td colspan = "2" align="center">
						<a href ="javascript:goList()"><button type = "button" class = "btn btn-info">돌아가기</button></a>
						<button id = "fclear" type = "reset" class = "btn btn-danger">취소</button>
						<button onclick="goInsert()" type="button" class = "btn btn-warning">작성</button>
					</td>
				</tr>
				<tr>
				</tr>
				<tr>
				</tr>
			</table>
		</form>
	    </div>
	    <div class="panel-footer">LG DX - 박병관</div>
	  </div>
	</div>
	
	<script type="text/javascript">
		loadList();
		// 게시글 전체 불러오기 기능
		function loadList() {
			// 비동기 통신 - ajax
			$.ajax({
				url : "boardList.do",
				type : "get",
				dataType : "json",
				success : makeView,
				error : function() {
					alert("error...");
				}
			});
		}
		function makeView(data) {
			console.log(data);
			let html = "";
			for(let i =0; i<data.length; i++){
				html += "<tr>";
				html += "<td>" + data[i].idx + "</td>";
				html += "<td>" + data[i].title + "</td>";
				html += "<td>" + data[i].writer + "</td>";
				html += "<td>" + data[i].count + "</td>";
				html += "<td>" + data[i].indate + "</td>";
				html += "<tr>";
			}
			$("#view").html(html);
			goList();
		}
		// 글쓰기 보여주기 기능
		function goForm() {
			$("#wform").css("display","block");
			$("#list").css("display","none");
		}
		
		// 게시글 목록 다시 보여주기 기능
		function goList() {
			$("#wform").css("display","none");
			$("#list").css("display","block");
		}
		
		// 게시글 작성기능
		function goInsert() {
			// title = hello&contents=hi&writer=hodoo
			let fData = $("#frm").serialize();
			console.log(fData);
			
			$.ajax({
				url : "boardInsert.do",
				type : "post",
				data : fData,
				success :loadList,
				error : function() {
					alert("error...");
				}
			});
			$("#fclear").trigger("click");
		}
	</script>
</body>
</html>
  • BoardController.java
package com.lgdx.controller;

import java.util.ArrayList;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.lgdx.entity.Board;
import com.lgdx.mapper.BoardMapper;

@Controller
public class BoardController {
	
	
	@Autowired // Spring Memory에 올라간 Mapper객체를 주입받는다
	private BoardMapper mapper;

	@RequestMapping("/")
	public String main() {
		System.out.println("메인페이지 이동");
		return "main";
	}
	
	// 게시글 정보 전체 돌려주는 기능
	@RequestMapping("/boardList.do")
	public @ResponseBody ArrayList<Board> boardList(){
		System.out.println("게시글 정보 전체 돌려주기");
		return mapper.boardList();
	}
	
	// 게시글 작성 기능
	@PostMapping("/boardInsert.do")
	public @ResponseBody void boardInsert(Board vo) {
		System.out.println("게시글 작성 기능");
		mapper.boardInsert(vo);
	}
}
  • BoardMapper.java
package com.lgdx.mapper;

import java.util.ArrayList;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import com.lgdx.entity.Board;

@Mapper // MyBatis가 해당 Mapper를 찾기위한 맵핑
public interface BoardMapper {
	// Spring과 MyBatis를 연결해주는 중간연결체
	// Spring에서는 MyBatis에게 요청하고 싶은 기능을
	// 이곳에 작성한다
	@Select("SELECT * FROM BOARD ORDER BY INDATE DESC")
	public ArrayList<Board> boardList();

	@Insert("INSERT INTO BOARD(TITLE, CONTENTS, WRITER) VALUES(#{title}, #{contents}, #{writer})")
	public void boardInsert(Board vo);

	@Select("SELECT * FROM BOARD WHERE IDX = #{idx}")
	public Board boardContents(int idx);

	@Delete("DELETE FROM BOARD WHERE IDX = #{idx}")
	public void boardDelete(int idx);

	@Update("UPDATE BOARD SET TITLE = #{title}, CONTENTS = #{contents}, WRITER = #{writer} WHERE IDX = #{idx}")
	public void boardUpdate(Board vo);

	@Update("UPDATE BOARD SET COUNT = COUNT + 1 WHERE IDX = #{idx}")
	public void boardCount(int idx);
}
profile
나는,,,,,,,,,나다

0개의 댓글