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);
}