DeseoDeSeo
[Spring] SpringMVC01_게시판 구현(글쓰기) 본문
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 |