(구버전) 스프링 게시판 만들기 #3. 조회 기능 구현
'(구버전) 스프링 게시판 만들기'는 내용이 부족하다고 판단하여
스프링 게시판 만들기를 새로 작성하였습니다.
링크 및 참조용으로 현재 게시물은 남겨두겠지만,
가급적이면 새로운 스프링 게시판 만들기를 참조해주시기 바랍니다.
게시물 목록을 만들었으니, 게시물을 하나씩 조회할 수 있도록 해야합니다.
일반적인 게시판 목록에서는 게시물의 제목을 클릭하여 게시물 조회 페이지로 이동하게 됩니다.
게시물 조회시 가장 중요한 요소는 모든 게시물을 구분할 수 있는 고유값이 있어야 한다는것 입니다.
작성자와 날짜로는 게시물을 구분할 수 없습니다. 한명의 작성자는 여러개의 게시물을 작성할 수 있으며, 하루에 다수의 게시물을 작성할 수 있으니까요.
글 제목은 게시물을 구분할 수 있을것 같지만, 같은 제목의 게시물을 작성할 수 있기 때문에 글 제목만으로 게시물을 구분할 수 없습니다.
그렇게 때문에 게시물의 고유 번호(bno)가 필요합니다. 굳이 번호가 아니라 코드(=문자)여도 상관없으며, 다른 게시물과 겹치지 않는 고유한 값을 가져야 합나다.
쿼리문은 스프링 게시판 만들기 #1에서 미리 만들어두었으며
DAO와 Servier도 미리 만들어 두었기 때문에, 아직 구현되지 않은 컨트롤러(Controller)와 화면(View)의 JSP파일만 만들면 되겠습니다.
컨트롤러에 조회용 코드를 추가합니다.
// 글 조회 @RequestMapping(value = "/read", method = RequestMethod.GET) public void getRead(@RequestParam("bno") int bno, Model model) throws Exception { logger.info("get read"); BoardVO vo = service.read(bno); model.addAttribute("read", vo); }
매개변수로 @RequestParam("bno") int bno
와 Model model
이 사용됩니다. Model은 컨트롤러에서 처리한 결과를 화면에 전달하는 역할을 합니다.
새로 쓰이는 @RequestParam("bno") int bno
는 컨트롤러가 넘겨받은 값중 bno의 값을 받아서, int형 변쉬 bno에 값을 넘겨줍니다. 그렇다면 컨트롤러는 어디서 값을 넘겨받는가인다, 여기서는 주소형식으로 값을 넘겨받습니다.
board폴더에서 write.jsp파일을 복사(Ctrl + C) → 붙여넣기(Ctrl + V)를 한 후 이름을 read.jsp로 저장한 뒤 read.jsp의 코드를 수정합니다.
write.jsp와 거의 똑같은데, 값이 없는 input, textarea 태그에 값을 넣어줍니다. 그리고 이후에 사용할 글 번호와 작성날짜를 넣어주면 됩니다.
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> <html> <head> <title>kuzuro 게시판</title> </head> <body> <div id="root"> <header> <h1>kuzuro 게시판</h1> </header> <hr /> <nav> 처음화면 - 글쓰기 - 로그인 </nav> <hr /> <section id="container"> <form role="form" method="post" autocomplete="off"> <p> <label for="bno">글 번호</label><input type="text" id="bno" name="bno" value="${read.bno}" readonly="readonly" /> </p> <p> <label for="title">글 제목</label><input type="text" id="title" name="title" value="${read.title}" readonly="readonly" /> </p> <p> <label for="content">글 내용</label><textarea id="content" name="content" readonly="readonly" >${read.content}</textarea> </p> <p> <label for="writer">작성자</label><input type="text" id="writer" name="writer" value="${read.writer}" readonly="readonly" /><br /> <label>작성 날짜</label> <span><fmt:formatDate value="${read.regDate}" pattern="yyyy-MM-dd" /></span> </p> <p> </p> </form> </section> <hr /> <footer> <p>만든이 : kuzuro</p> </footer> </div> </body> </html>
이제 list.jsp파일로 이동하여, <td>${list.title}</td>
태그를 <td><a href="/board/read?bno=${list.bno}">${list.title}</a></td>
로 바꿔줍니다.
링크를 이용하여 게시물 조회 페이지에 접속할 수 있도록 했으며, 이 때 컨트롤러의 getRead에 전달한 값인 bno가 있습니다.
글 제목의 링크에 마우스를 가져가면, 주소의 형식이 보입니다.
read?bno=23으로 되어있는데, read 페이지에 접속하며 이때 bno의 값인 23을 같이 전달합니다.
클릭해보면 이미 작성되어있던 게시물을 볼 수 있습니다.
그런데 글 번호, 글 제목, 글 내용, 작성자 모두 수정할 수 있습니다. 수정한다고해서 데이터 베이스에 있는 값까지 바뀌는건 아니지만, 착각할 수 있으므로 수정할 수 없도록 태그를 수정합니다.
각 태그, 그러니까 input 태그와 textarea 태그에 readonly="readonly"
를 추가하면 임의로 수정할 수 없게됩니다.