728x90
controller > BoardController
package com.testspring.testspring.controller;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
//내장라이브러리 호출 ↑
import com.testspring.testspring.domain.Board;
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;
//외장라이브러리 호출 ↑
/* 구분 :
Create → insertBoard
Read → getBoard,getBoardList
Update → updateBoard
Delete → deleteBoard*/
//@Controller 선언을 해주면 BoardController클래스는 컨트롤을 담당이라고 Spring boot는 인식
@Controller
public class BoardController {
//사용자 생성 객체 사용 (Board라는객체타입으로-> ArrayList생성)
static ArrayList<Board> board_array = new ArrayList<Board>();
static int count = 0;
/*GetMapping, PostMapping <- @RequestMapping의 자식클래스이다.
RequestMapping의 기능을 모두 쓸수있다 (기능, 서버의 리소스 감소 및 보안 고려해서 사용) */
/*---------------CREATE----------------*/
//GetMapping 선언을 해주면 특정 (html에서 지정한)url로 인식해서 받아오게 됩니다.
@GetMapping("insertBoard")
public String insertBoard() {
return "insertBoard";
}
/*---------------CREATE----------------*/
/* 클라이언트 html form태그의 method속성의 값인 post를 인식하여 아래의
@PostMapping에 연결 */
@PostMapping("insertBoard")
public String insertBoard(
/*RequestParam 사용자가 정의해준 값을 정의*/
@RequestParam("title")String title,
@RequestParam("writer")String writer,
@RequestParam("content")String content)
{
count++;
Board board = new Board();
board.setSeq((long) count);
board.setTitle(title);
board.setWriter(writer);
board.setContent(content);
//내장 클래스인 java.util.Date 객체로 시간 데이터 출력
board.setCreateDate(new Date());
// 0은 묵시적으로 int값의미, L은 명시적으로 Long형값의미, OL = long형 0의미
board.setCnt(0L);
//boardList배열에 board객체 넣기
board_array.add(board);
/*redirect : 페이지 전환 이동
redirect:getBoardList : getBoardList 페이지로 이동*/
return "redirect:getBoardList";
}
/*---------------READ----------------*/
/*RequestMapping : 호출하는 클라이언트의 정보를 가져다가 서버(controller)에 전달해주는 매핑
@RequestParam : [클라이언트]에서 string문자열을 [서버]에 전달하는 매개변수 선언
@RequestParam("title")String title에서 ("title")은 [클라이언트]의 name이라는 속성로써
key값을 매개변수를 전달*/
@RequestMapping("getBoard")
public String getBoard(
@RequestParam("seq")String seq,
@RequestParam("userRole")String userRole,
@RequestParam("userId")String userId,
@RequestParam("title")String title,
@RequestParam("writer")String writer,
@RequestParam("content")String content,
@RequestParam("createDate")String createDate,
@RequestParam("cnt")String cnt,
Model model){
//model을 통해서 변수등록 => .addAttribute
model.addAttribute("seq", seq);
model.addAttribute("title", title); //title이라는 값을 title이라는 이름에 연결시켜서 보내줌
model.addAttribute("writer", writer);
model.addAttribute("content", content);
model.addAttribute("createDate", createDate);
model.addAttribute("cnt", cnt);
model.addAttribute("userId", userId);
model.addAttribute("userRole", userRole);
return "getBoard";
//return->templates의 getBoard를 알아서 찾아 브라우저로 전송
}
/*---------------READ----------------*/
/*RequestMapping : 호출하는 클라이언트의 정보를 가져다가 서버(controller)에 전달해주는 매핑
@RequestMapping은 [서버]에서 디스페처서블릿을 통해 [클라이언트]html의 action태그의 주소와 동일한
문자열을 찾는 매핑기능(연결)이 실행되고 하단에 메서드가 실행*/
@RequestMapping("/getBoardList")
public String getBoardList(Model model){
//ArrayList를 List에 대입
List<Board>boardList = new ArrayList<Board>();
if(board_array.size() > 0){
for (int i = 0; i < board_array.size(); i++) {
Board board = new Board();
//번호가 1부터 시작해야하므로 +1
board.setSeq(board_array.get(i).getSeq());
board.setTitle(board_array.get(i).getTitle());
board.setWriter(board_array.get(i).getWriter());
board.setContent(board_array.get(i).getContent());
board.setCreateDate(board_array.get(i).getCreateDate());
board.setCnt(board_array.get(i).getCnt());
//boardList배열에 board객체 넣기
boardList.add(board);
}
}
/*model 객체에 boardList(arraylist)를 boardList key값으로 넣음
attributeName = key
attributeValue = value
model에는 참조타입만 넣을 수 있다 (addAttribute 메서드 안에 매개변수 타입으로 확인 가능)*/
model.addAttribute("boardList",boardList);
return "getBoardList";
/*return String인 이유는 뷰리졸버가 html파일을 찾기 위한 문자열을 리턴
디서패처서블릿이 뷰리졸버(viewResolver)를 찾아서 연결해 줍니다
retrun getBoardList라는 문자열로 templates에 있는 같은 이름에 html파일을 찾는다*/
}
/*seq매개변수 (getBoard.html에서 받아옴)로 board_array배열에서
.getSeq로 같은 index를 찾아
board_array에 있는 board객체 삭제 > 원하는 게시글 삭제*/
/*---------------DELETE----------------*/
@GetMapping("/deleteBoard")
public String deleteBoard(@RequestParam("seq")String seq){
System.out.println(seq);
/*board_array.get(i).getSeq() : board_array의 i번째 객체를 찾아서 getSeq()메서드를 통해 seq필드값가져오기
equals()메서드를 통해서 매개변수 seq값과 비교 (참조타입이므로)
seq타입은 Long입니다 toString으로 형변환해주어야 함으로 toString()사용
*Long = 소수점있는 숫자 데이터*/
for(int i =0; i<board_array.size(); i++){
if(Long.toString(board_array.get(i).getSeq()).equals(seq)){
System.out.println("같음 확인");
System.out.println(seq);
System.out.println(board_array.get(i).getSeq());
board_array.remove(i);
}
}
return "redirect:getBoardList";
}
/*---------------UPDATE----------------*/
//Post방식으로 [클라이언트]에서 [서버]로 맵핑
@PostMapping("/updateBoard")
public String updateBoard(
//HTML에서 name속성을 가진 값을 매개변수 String seq에 할당
@RequestParam("seq")String seq,
@RequestParam("title")String title,
@RequestParam("content")String content)
{
System.out.println("update board aceess");
/*board_array배열을 순회하여 board객체의 seq필드값을 매개변수 seq와 비교하여 true값 찾기
setTitle과 같은 setter로 데이터변경*/
for(int i = 0; i<board_array.size(); i++){
if(Long.toString(board_array.get(i).getSeq()).equals(seq)){
board_array.get(i).setTitle(title);
board_array.get(i).setContent(content);
}
}
return "redirect:getBoardList";
}
}
domain > Board
package com.testspring.testspring.domain;
//외장 라이브러리 (gradle로 다운로드한 롬북이 외장 라이브러리)
//import lombok.*;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import java.util.Date;
@Getter
@Setter
@ToString
public class Board {
//식별필드
private Long seq;
private String title;
private String writer;
private String content;
private Date createDate;
private long cnt;
}
templates > getBoard
<!DOCTYPE html>
<!--타임리프 템플릿 엔진 선언부분이며, model 데이터를 가져와서 html에 데이터를 뿌려주는역할-->
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>게시판상세</title>
</head>
<body th:align="center">
<h1>게시글 상세</h1>
<form th:action="updateBoard" method="post">
<input name="seq" type="hidden" th:value="${seq}">
<table th:align="center" border="1" th:cellpadding="0" th:cellspacing="0">
<!--[서버]에서 java의 데이터를 [클라이언트]html문서에 값을 할당해주는 문법${title}-->
<tr>
<td bgcolor="#7BD6EA" th:text="번호" width="80"></td>
<td th:text="${seq}"></td>
</tr>
<tr>
<td bgcolor="#7BD6EA" th:text="제목" width="80"></td>
<th><input name="title" type="text" th:value="${title}"></th>
</tr>
<tr>
<td bgcolor="#7BD6EA" th:text="작성자"></td>
<td th:text="${writer}"></td>
</tr>
<tr>
<td bgcolor="#7BD6EA" th:text="내용"></td>
<td><textarea name="content" th:text="${content}" cols="40" rows="10"></textarea></td>
</tr>
<tr>
<td bgcolor="#7BD6EA" th:text="등록일"></td>
<td th:text="${createDate}"></td>
</tr>
<tr>
<td bgcolor="#7BD6EA" th:text="조회수"></td>
<td th:text="${cnt}"></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="게시글수정">
</td>
</tr>
</table>
</form>
<a th:href="@{/getBoardList}">글목록</a>
<a th:href="@{/getBoardList}">글등록</a>
<a th:href="@{/deleteBoard(seq=${seq})}">글삭제</a>
</body>
</html>
templates > getBoardList
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" type="text/css" href="/css/default.css">
<title>Title</title>
</head>
<body th:align="center">
<h1>게시글 목록</h1>
<table th:align="center" border="1" th:cellpadding="0" th:cellspacing="0" th:width="700">
<tr>
<th bgcolor="#7BD6EA" width="100">번호</th>
<th bgcolor="#7BD6EA" width="200">제목</th>
<th bgcolor="#7BD6EA" width="150">작성자</th>
<th bgcolor="#7BD6EA" width="150">등록일</th>
<th bgcolor="#7BD6EA" width="100">조회수</th>
</tr>
<!--model에 있는 데이터를 타임리프는 html에 뿌려주게 되고, 순수한 html파일로 만들어서 톰캣에 전달-->
<!-- each : for문-->
<!-- 모델에 있는 boardList 배열을 순회해서 board라는 객체를 하나씩 출력 (유사 : 향상된 for문-->
<tr th:each="board :${boardList}">
<td th:text="${board.seq}"></td>
<td> <a th:href="@{/getBoard(
seq=${board.seq},
userId='userIdTeste',
userRole='userIdRole',
title=${board.title},
writer=${board.writer},
content=${board.content},
createDate=${board.createDate},
cnt=${board.cnt}
)}"
th:text="${board.title}"></a></td>
<td th:text="${board.writer}"></td>
<!--dates.format = 날짜를 일정형식으로 바꿔주는 포맷팅-->
<td th:text="${#dates.format(board.createDate, 'yyyy-MM-dd')}"></td>
<td th:text="${board.cnt}"></td>
</tr>
</table>
<a th:href="@{/insertBoard}">글등록</a>
</body>
</html>
templates > insertBoard
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body th:align="center">
<h1>게시글 등록</h1>
<!--
[클라이언트] html의 form태그를 통한 submit액션을 실행하면 [서버]로 전달되는 mapping주소
th:action="insertBoard"
mothod="post" // get/post방식으로 데이터 전달 명시하다
[서버]컨트롤러에서는 get방식 받는 것과 post방식으로 받는 것을 구분할 수 있습니다
-->
<form th:action="insertBoard" method="post">
<table th:align="center" border="1" th:cellpadding="0" th:cellspacing="0">
<tr>
<td bgcolor="#7BD6EA" th:text="제목" width="80"></td>
<!--[클라이언트]name="title" 은 [서버]에서 데이터 매개변수를 받기 위한 변수명(key)-->
<td><input name="title" type="text" size="50"></td>
</tr>
<tr>
<td bgcolor="#7BD6EA" th:text="작성자" width="80"></td>
<td><input name="writer" type="text" size="10"></td>
</tr>
<tr>
<td bgcolor="#7BD6EA" th:text="내용" width="80"></td>
<td><textarea name="content" cols="50" rows="10"></textarea>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="게시글 등록">
</td>
</tr>
</table>
</form>
<a th:href="@{/getBoardList}">글목록</a>
</body>
</html>
728x90
'STUDY > SpringBoot' 카테고리의 다른 글
[SpringBoot] IntelliJ + OracleDB 게시판 생성 ✔정리(2) (0) | 2022.08.08 |
---|---|
[SpringBoot] IntelliJ + OracleDB 게시판 생성 ✔정리(1) (0) | 2022.08.07 |
[SpringBoot] 스프링부트 Annotation 정리✔ (0) | 2022.08.05 |
[SpringBoot] 22-08-04 자바와 html을 이용한 게시판예제 (1) ☑ (0) | 2022.08.05 |
[SpringBoot] 스프링 입문 - 김영한 ✔정리(2) (0) | 2022.08.02 |