Java/Spring
[Spring] 글 내용 보기
퓨어맨
2022. 7. 18. 01:02
<%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} onclik에 자바스크립트 대신에 이런 방식으로도 사용 가능 -->
<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>
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";
}
}
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);
}