관리 메뉴

DeseoDeSeo

[Spring] SpringMVC01_게시판 구현(글쓰기) 본문

spring

[Spring] SpringMVC01_게시판 구현(글쓰기)

deseodeseo 2023. 9. 7. 16:15
web.xml
 <filter> 
	    <filter-name>encodingFilter</filter-name> 
	    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 
	    <init-param> 
	       <param-name>encoding</param-name> 
	       <param-value>UTF-8</param-value> 
	    </init-param> 
	    <init-param> 
	       <param-name>forceEncoding</param-name> 
	       <param-value>true</param-value> 
	    </init-param> 
	 </filter> 
	 <filter-mapping> 
	    <filter-name>encodingFilter</filter-name> 
	    <url-pattern>/*</url-pattern> 
	 </filter-mapping>

한글 인코딩

BoardController.java
	@RequestMapping("/")// 요청url로 들어왔을 때 아래 기능을 수행하겠다.
	 public String home(){
		System.out.println("홈 기능 수행"); 
		return "redirect:/boardList.do"; // 다시 접속할 주소를 리다이렉트 방식으로 리턴하는거임. 
	}
	 @RequestMapping("/boardForm.do")
	public String boardForm() {
		System.out.println("글쓰기 페이지 이동");
		return "boardForm";
	}
	
	@RequestMapping("/boardInsert.do")
//	Board board라고 하면 Board객체 안에 알아서 옴. 1. input의 name과 vo name의 값이 같아야한다. 2. default 기본 생성자가 있어야한다. getter/setter도 있어야한다.
	public String boardInsert(Board board) {
		System.out.println("게시글 등록 기능 수행");
		
		mapper.boardInsert(board);
		return "redirect:/boardList.do";
	}

 

boardList.jsp
	<a href="boardForm.do" class="btn btn-primary btn-sm"> 글쓰기 </a>

○ class 에서 sm 은 크기를 나타냄. 

○ btn-primary는 파란색 버튼을 나타냄.

	<%@ taglib prefix ="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

○ html태그 시작 전에 추가함.

<c:forEach items ="${list}" var ="vo" varStatus="i">
					<tr>	
						<td> ${i.count}</td>
						<td> <a href ="boardContent.do?idx=${vo.idx}">${vo.title}</a></td>
						<td> ${vo.writer}</td>
						<td> ${fn:split(vo.indate, " ")[0]}</td>
						<td> ${vo.count}</td>
					</tr>
				</c:forEach>
				</table>

○ title을 누르면 a태그를 통해 boardContent로 이동하게 생성. idx번호도 같이 전달.

○ fn(function)의 split기능을 사용.

     ( vo.indate안에서 " "을 기준으로 자름. 그리고 [0]를 출력.) ➜ 시간을 제외하고 날짜만 출력되도록.

 

src > main > webapp > web-inf > view 에서 template.jsp를 복사해서 boardForm.jsp 생성
<%@ 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 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.6.4/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 MVC01</h2>
		<div class="panel panel-default">
			<div class="panel-heading">Board</div>
			<div class="panel-body">
				<form action ="boardInsert.do" method="post">
				<table class="table">
					<tr>
						<td>제목</td>
						<!-- 반드시 name의 이름은 vo의 필드명과 똑같이 해야한다. -->
						<!-- class=form-control사용하면 알아서 크기에 맞춰짐. -->
						<td><input type ="text" name ="title" class ="form-control"></td>
				   </tr>
				   <tr>
					     <td>내용</td>
						<td><textarea class ="form-control" name ="content" rows="7" cols=""></textarea></td>
					</tr>
					<tr>
					     <td>작성자</td>
						<td><input type="text"  name ="writer" class ="form-control"></td>
					</tr>
					
					<tr>
						<td colspan="2" align="center">
							<button class="btn btn-success btn-sm" type="submit">등록</button>
							<button class="btn btn-warning btn-sm" type="reset">취소</button>
							<a href ="boardList.do" class="btn btn-info btn-sm" >목록</a>
						</td>
					</tr>
				</table>
				</form>
			</div>
			<div class="panel-footer">스프링게시판-PBK</div>
		</div>
	</div>
	

</body>
</html>

 

이클립스에 파일 경로 나오도록 : alt + shift + B 
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ 

 

 

BoardMapper.java
package kr.spring.mapper;

import java.util.List;

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

import kr.spring.entity.Board;

@Mapper // MyBatis interFace를 찾기 위해 달아주는 부분.
public interface BoardMapper {
	
	
	 public List<Board> getLists();

	
	//우리는 sql문만 적으면 sql~~가 다 구현해서 함.
	public void boardInsert(Board board);


	public Board boardContent(int idx);
	
	public void boardDelete(int idx);

}

 

BoardMapper.xml
 ( src/main/java > kr.spring.mapper > 여기서 생성.
<?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.spring.mapper.BoardMapper">
<!-- 인터페이스랑 xml이랑 같은 이름 사용하면 위의 namespace처럼 알아서 맞춰짐  -->
	<!-- id는 메서드 명이랑 똑같이 해야 찾아갈 수 있음. boardmapper.java에서 return타입이 list이니까 그에 맞춰서
	 resultType도 적어준다.그리고   -->
	<select id ="getLists" resultType="kr.spring.entity.Board">
		SELECT * FROM BOARD ORDER BY INDATE DESC
	</select>
	
	<!-- 매개변수는 parameterType에. 그리고 똑같이 board임. -->
	<insert id ="boardInsert" parameterType="kr.spring.entity.Board">
		INSERT INTO BOARD(TITLE, CONTENT, WRITER) VALUES(#{title},#{content},#{writer})
	</insert>

<!-- 사실 parameterType은 안 적어도 됨.( 매개변수) -->
  	<select id="boardContent" resultType="kr.spring.entity.Board">
  		SELECT * FROM BOARD WHERE IDX =#{idx}
  	</select>
  	
  	<delete id="boardDelete">
  			DELETE FROM BOARD WHERE IDX= #{idx}
  	</delete>




</mapper>

  매개변수 : parameterType

  리턴타입 : resultType

○  매개 변수나 리턴 타입이 board타입.

 

boardContent.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
	<%@ taglib prefix ="c" uri="http://java.sun.com/jsp/jstl/core" %>
	<%@ taglib prefix ="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<!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.6.4/jquery.min.js"></script>
<script
	src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
</head>
<body>
	<%pageContext.setAttribute("newLineChar", "\n");%>
	<div class="container">
		<h2>Spring MVC01</h2>
		<div class="panel panel-default">
			<div class="panel-heading">Board</div>
			<div class="panel-body">
				
				<table class="table">
					<tr><!-- 모델안에 넣어둔 데이터 꺼내옴, -->
						<td>제목</td>
						<td>
							${vo.title}
						</td>
				   </tr>
				   <tr>
					     <td>내용</td>
					     <!-- vo.content에서 newLineChar가 보이면 br태그로 바꿔주겠다. -->
						<td> ${fn:replace(vo.content, newLineChar, "<br>" )}
						</td>
					</tr>
					<tr>
					     <td>작성자</td>
						<td>${vo.writer}</td>
					</tr>
					<tr>
					     <td>작성일</td>
						<td>
						<!-- 0번째꺼 쓰겠다. -->
			     			${fn:split(vo.indate, " ")[0]}
						</td>
					</tr>
					<tr>
					     <td>조회수</td>
						<td>${vo.count}</td>
					</tr>
					
					<tr>
						<td colspan="2" align="center">
							<button class="btn btn-success btn-sm" type="submit">등록</button>
							<!-- Q: 게시글을 삭제하고 게시글 목록으로 이동하시오. -->
							<a href ="boardDelete.do?idx=${vo.idx}" class="btn btn-warning btn-sm">삭제</a>
							<!-- 위의 코드는 boardcontroller로 감. -->
							<a href ="boardList.do" class="btn btn-info btn-sm" >목록</a>
						</td>
					</tr>
				</table>
				
			</div>
			<div class="panel-footer">스프링게시판-PBK</div>
		</div>
	</div>
	

</body>
</html>

 ミ★ 게시글 삭제하기

<a href ="boardDelete.do?idx=${vo.idx}" class="btn btn-warning btn-sm">삭제</a>

○ 삭제 버튼을 누르면 boardDelete로 idx와 전달됨. 

 

        ➜ boardController 로 이동

@RequestMapping("/boardDelete.do")
	public String boardDelete(@RequestParam("idx") int idx) {
		System.out.println("게시글 삭제기능수행");
		mapper.boardDelete(idx);
		return "redirect:/boardList.do";
	}

  RequestParam으로 idx를 받아서 int idx에 저장.

             ➜  Boardmapper.java로 이동함.

	public void boardDelete(int idx);

          ➜  Boardmapper.xml로 이동함.

  	<delete id="boardDelete">
  			DELETE FROM BOARD WHERE IDX= #{idx}
  	</delete>

 

'spring' 카테고리의 다른 글

[Spring] 비동기방식  (0) 2023.09.12
[Spring] SpringMVC01_동기방식 마무리  (0) 2023.09.12
[Spring] SpringMVC01_ 환경설정  (0) 2023.09.06
[spring] springMVC 구조  (0) 2023.09.06
[Spring] SpringMVC01 실습01  (0) 2023.09.05