<%pageContext.setAttribute("LineChar", "\n"); %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri = "http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<c:set var= "cpath" value="${pageContext.request.contextPath}"/>
<!DOCTYPE html>
<html>
<head>
<!-- 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>Spring MVC Board</h2>
<div class="panel panel-default">
<div class="panel-heading">BOARD</div>
<div class="panel-body">
<table class = "table table-bordered">
<tr>
<td>제목</td>
<td>${vo.title}</td>
</tr>
<tr>
<td>내용</td>
<!-- 개행할 수 있게끔 문자열 변환 -->
<!-- \n ====> <br> -->
<td>${fn:replace(vo.contents,LineChar,"<br>")}</td>
</tr>
<tr>
<td>작성자</td>
<td>${vo.writer}</td>
</tr>
<tr>
<td>작성일</td>
<td>${fn:split(vo.indate," ")[0]}</td>
</tr>
<tr>
<td colspan = "2" align="center">
<!-- location.href='${cpath}/boardUpdate.do?${vo.idx} -->
<button onclick="goUpdate(${vo.idx})" class = "btn btn-primary btn-sm">수정</button>
<button onclick="goDelete(${vo.idx})" class = "btn btn-danger btn-sm">삭제</button>
<button onclick="goMain()" class = "btn btn-success btn-sm">리스트</button>
</td>
</tr>
</table>
</div>
<div class="panel-footer">빅데이터 분석서비스 개발자과정(김운비)</div>
</div>
</div>
<script type="text/javascript">
function goDelete(idx){
location.href = '${cpath}/boardDelete.do/'+idx
}
function goUpdate(idx){
location.href = '${cpath}/boardUpdate.do?i='+idx;
}
function goMain(){
location.href = '${cpath}/basic.do'
}
</script>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<c:set var= "cpath" value="${pageContext.request.contextPath}"/>
<!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="${cpath}/boardUpdate.do" method="post">
<input type="hidden" name="idx" value="${vo.idx}">
<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" value="${vo.title}">
</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" value="${vo.writer}">
</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">${vo.contents}</textarea>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-primary btn-sm">수정하기</button>
<button type="reset" class="btn btn-warning btn-sm">초기화</button>
</div>
</div>
</form>
</div>
</div>
</div>
</body>
</html>
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.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
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(Model model) {
List<BoardVO> list = mapper.boardList();
// forward방식으로 view에 접근
// : url이 안바뀌고 있기 때문에
// : 특정 값들을 넘겨주기 위해서는 request에 담아서 넘겨주면 된다.
// : request객체가 필요하면 메소드의 매개변수로 request를 받겠다고 쓰면 된다!
// ----> Spring framework에서 알아서 관리!
// ★★★객체 바인딩
model.addAttribute("list", list);
return "basic"; // 논리적인 주소 -- ViewResolver -- 물리적인 주소
// basic --> /WEB-INF/views/basic.jsp
}
// 글쓰기 페이지로 이동만 하는 메소드
@RequestMapping(value = "/boardInsert.do", method = RequestMethod.GET)
public String boardInsert() {
return "boardInsert";
}
// 글쓰기를 수행하는 메소드
@RequestMapping(value = "/boardInsert.do", method = RequestMethod.POST)
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:/ 를 반드시 붙여준다.
}
// 글 내용 보는 메소드
@RequestMapping("/boardContent.do")
public String boardContent(int idx, Model model) {
//Model
//---> request scope에 데이터를 저장하는 객체
//---> HttpServletRequest의 경량화 버전
// 수집해야하는 파라미터가 한개 일때는 매개변수에 정확한 자료형과 변수명을 입력!
// String --> int spring framework에서 자동으로 수행한다.
BoardVO vo = mapper.boardContent(idx);
//request영역에 데이터를 추가하기!
model.addAttribute("vo", vo);
return "boardContent";
}
// 2번째 get방식으로 데이터가 들어왔을 때 처리하는 방법
// 쿼리스트링 --> url에 데이터가 포함되어있을 때 파라미터 수집을 어떻게 할 수 있는가?
// ex) boardDelete.do?idx=1 --> boardDelete.do/1
@RequestMapping("/boardDelete.do/{idx}")
public String boardDelete(@PathVariable("idx") int idx) {
// @PathVariable --> 주소값에 포함되어 있는 데이터를 꺼내올 때 사용
// 데이터베이스에서 데이터 삭제!
mapper.boardDelete(idx);
return "redirect:/basic.do";
}
// 글 수정 페이지로 넘어가는 메소드
@RequestMapping(value = "/boardUpdate.do", method = RequestMethod.GET)
public String boardUpdateGet(@RequestParam("i") int idx, Model model) {
//@RequestParam
//요청 시 넘겨준 name값과 다른 변수명을 부여하고 싶을 때 사용하는 annotation
// 1. select * from board where idx = #{idx} 쿼리를 실행
// ---> Controller에서 쿼리문 실행하려면? mapper interface 사용해야함
BoardVO vo = mapper.boardContent(idx);
// 2. request scope 객체 바인딩
// ---> Model 사용
model.addAttribute("vo", vo);
// 3. boardUpdateForm.jsp안에서 객체바인딩 된 데이터를 꺼내서 안쪽에 출력
// 4. 실제로 업데이트 하는거 까지!
return "boardUpdateForm";
}
// 글 수정 페이지에서 수정한 값으로 변경하는 메소드
@RequestMapping(value = "/boardUpdate.do", method = RequestMethod.POST)
public String boardUpdatePost(BoardVO vo) {
mapper.boardUpdate(vo);
return "redirect:/boardContent.do?idx="+vo.getIdx();
}
}
package kr.smhrd.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Select;
import kr.smhrd.model.BoardVO;
public interface BoardMapper {
public List<BoardVO> boardList();
public void boardInsert(BoardVO vo);
@Select("select * from board where idx=#{idx}")
public BoardVO boardContent(int idx);
// 쿼리문이 간단하다면 위쪽에 annotation 추가해서 처리할 수 있다.
@Delete("delete from board where idx=#{idx}")
public void boardDelete(int idx);
public void boardUpdate(BoardVO vo);
}
<?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>
<update id="boardUpdate" parameterType="kr.smhrd.model.BoardVO">
update board
set title=#{title}, writer=#{writer}, contents=#{contents}, indate= now()
where idx=#{idx}
</update>
</mapper>
'Java > Spring' 카테고리의 다른 글
[Spring] REST & 3Tier (0) | 2022.07.20 |
---|---|
[Spring] 게시판 목록 보기(jquey+ajax) (0) | 2022.07.18 |
[Spring] 글 삭제하기 (0) | 2022.07.18 |
[Spring] 글 내용 보기 (0) | 2022.07.18 |
[Spring] jstl-functions (0) | 2022.07.18 |