숭어 개발 블로그

[Spring] 게시판 만들기 (2) _< 게시글 불러오기 > 본문

Spring

[Spring] 게시판 만들기 (2) _< 게시글 불러오기 >

숭어싸만코 2022. 10. 14. 20:44

Spring Framework 를 통해서 게시판 만들기 (2)

< 게시글 불러오기 >

 

먼저 views 안에 게시글을 보여줄 jsp  < boardList.jsp > 를 만들어준다.


jstl과 jquery , 부트스트랩 스타일을 사용 하기 위해 다음과 같은 taglib 과 script경로를 넣어준다.

<%@page import="com.gjai.entity.Board"%>
<%@page import="org.springframework.ui.Model"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    
<!DOCTYPE html>
<html lang="UTF-8">
	<head>
	  <title>Bootstrap Example</title>
	  <meta charset="utf-8">
	  <meta name="viewport" content="width=device-width, initial-scale=1">
	  <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.0/jquery.min.js"></script>
	  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>

 


게시글들을 <table> 태그를 통해 차례로 불러오기 위해 기본 틀 (글번호, 제목, 작성자, 작성일, 조회수) 을 만들어준다.

 

주석의 내용처럼 기존 JSP&Servlet 에서는 request 객체를 이용하여 게시글들의 리스트를 받아주었지만 Spring에서는 다른 방법이 가능하기 떄문에 추후에 설명하곘다.


- BoardController.java 로 이동

 

Controller 인 <BoardController.java> 파일에서 게시글을 불러오는 메소드 boardList( ) 를 만들어주고

 

boardList.do(게시글 불러오기) 라는 사용자의 요청이 들어오면  DispatcherServlet에서 찾을수 있도록

 

매핑값 @RequestMapping("/boardList.do")을 달아주자

 

boardList ( ); 메소드(mapper에게 일을 시키는 메소드) 는 mapper.xml에게 부탁하여 sql문 처리 및 실행을 해주는 기능을 한다. 

 


 

mapper가 일을 하는 메소드( mapper.boardList ( )sql문 처리 및 실행) 를 실행하기 위해서는 mapper.java 인터페이스 파일안에 메소드를 구현해주어야한다.

mapper.boardList( ) ;


- BoardMapper.java [인터페이스] 로 이동

 

인터페이스에 동일한 메소드를 만들어 주는데 리턴타입이 VO형태의 리스트(게시글들)임으로 

아래와 같이 인터페이스 안에 public List<Board> boardList( ); 를 만들어준다.

BoardMapper.java [인터페이스]


- 다시 BoardController.java 로 이동

 

sql문으로 불러온 게시글들을  VO(Board.java)형태로 리스트에 담아서 리턴을 해줄것이기 때문에 

mapper.boardList ( ); 의 리턴값은 List <Board> 형태로 list 라는 변수에 담아준다.

 


사용자의 요청이 들어오면  매핑값  @RequestMapping("/boardList.do") 를 통해 

 

위의 boardList( ) 메소드가 실행이되고 

 

메소드 안에서 mapper가 sql문 처리를 하는 boarList( ); 라는 메소드를 실행 하게된다.

Controller의 boardList() 메소드 내부

 


BoardMapper.xml 파일로 이동한다.

 


xml파일에서는 sql문은 태그를 통해서 정의된다.

- SELECT문 : <select> </select>

- INSERT문 : <insert> </insert>

- DELETE문 : <delete> </delete>

 

또한 태그 안에 정의된 값들로  mapper가 요청한 sql문을 찾아 실행 시키거나, 요청값이나 응답 값을 정의 할 수 있다.

- id = " " : Mapper.java[인터페이스]에 정의된 메소드명과 같다면 해당 SQL문을 실행 시킨다.

- parameterType = " " :  sql문 실행을 하기위해 어떠한 값이 필요하다면 페이지에서 넘겨준 값을 받아주는 역할을 한다.

- resultType = " " : sql문 실행 후 페이지에 넘겨주어야할 값이 있다면 넘겨주는 역할을 한다.


 

< BoardMapper.xml >

BoardMapper.xml


게시글을 불러오기 위해서 id값에는 boardList라는 메소드명을 적어주고

sql문 실행후 jsp에 넘겨줄 VO형태의 게시글들이 있기 때문에  resultType에 VO경로를 다음과 같이 써준다.

날짜순으로 select해주는 sql문을 작성해주면 끝

 


- BoardController.java 로  다시 이동

 

 

sql문 작업이 끝나면 resultType 을 통해 반환된 VO타입의 게시글 리스트가 다음과 같이 list라는 변수 담기게 된다.

list에 담긴 게시글들을 어딘가 저장해서 jsp로 보내줘야 하는데 여기서 이용하는게 Model이라는 것이다.

 


< Model >
    // Model : request 영역에 저장
    // spring이 알아서 넣어준다.
    // setAttribute만 할거라면, Model 이라는 객체를 사용하면 된다.
    // Model : requset의 setAttribute만 빼온 객체
    //객체 바인딩 (동적바인딩) :scope영역에 데이터를 잠시 저장해두는 것
    //request 부분에 잠시 저장
    // Model 객체는 set이 아니라,  addAttribute

 


 

Model을 쓰기위해선 메소드 정의시  아래와 같이 매개변수에 Model을 넣어주면 사용 할 수 있다.

 


list 변수에 담긴 게시글들을  model.addAttribute를 통해 "list" 라는 이름으로 저장 해주자.


Controller에서 일이 끝나면 사용자에게 보여줄 주소값을 리턴 해주어야하는데 

사용자가 요청한 주소와 일이 끝난 후 보여줄 주소가 같다면 생략이 가능하다.


< BoardController.java 의 boardList( ) 메소드 완성 >


boardList.jsp 로 이동


이제 model에 담긴 게시글 리스트를 jsp에서 출력 시켜줘야한다.

 

아래와 같이 테이블형태로 for문 을 통해 게시글들을 순차적으로 출력시킨다.


서버에(model) 에 저장된 데이터를 꺼내 쓸때는 아래와 같이  EL식을 이용하면 된다. 

 

===> ${      }


 

VO형태의 게시글들이 담긴  ${list}  에서 forEach 반복문을 통해  "board"  라는 변수에 하나씩 담아 

 <tr> , <td> 태그로 나열해준다.

 

이때 VO의 필드명을 통해 원하는 데이터에 접근할수 있다.  ===>  board.title / board.writer .....


반복문이 끝나면 </table> 태그가 닫히면서 게시글들이 순차적으로 표 형태로 나열되어 출력된다.


게시글을 불러오기 위한 모든 준비가 되었기 때문에 Run on Server를 통해 프로젝트를 실행 시킨다.


실행시키고 나서 url경로에  boardList.do를 써주어 boardList.jsp에 연결해준다.


DB에 미리 저장되어있던 게시글들이 테이블 형태로 출력되는것을 확인 할 수 있다.

Comments