jsp
게시판 만들기 (구조 및 구현) 임시저장
z00h
2021. 8. 26. 10:50
1. db연동
db에서의 데이터를 연동시켜 게시판을 만들려면 우선 pom.xml파일에 들어가서
라이브러리를 import 시켜야 한다.
<!-- https://mvnrepository.com/artifact/org.mariadb.jdbc/mariadb-java-client -->
<dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
<version>2.7.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/servlets.com/cos -->
<dependency>
<groupId>servlets.com</groupId>
<artifactId>cos</artifactId>
<version>05Nov2002</version>
</dependency>
위의 코드를 pom.xml파일의 dependencies 안에 붙여 주고 import 시킨다!
db의 데이터를 어디에 저장을 할 것인가(쿼리 준비)
package kr.ac.daegu.jspmvc.model;
import java.sql.*;
import java.util.ArrayList;
import java.util.Date;
public class BoardDAO {
private static final String DB_URL = "jdbc:mariadb://localhost:3306/dgd";
private static final String DB_USER = "root";
private static final String DB_PW = "0000";
public static boolean getConnection() throws SQLException, ClassNotFoundException {
// Connection, PreparedStatement, ResultSet은 interface 객체이다.
Class.forName("org.mariadb.jdbc.Driver");
Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PW);
PreparedStatement pstmt = null;
ResultSet rs = null;
return true;
}
public ArrayList<BoardDTO> getBoardList() throws ClassNotFoundException, SQLException {
// Connection, PreparedStatement, ResultSet은 interface 객체이다.
Class.forName("org.mariadb.jdbc.Driver");
Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PW);
PreparedStatement pstmt = null;
ResultSet rs = null;
// 쿼리 준비 & db 쿼리
pstmt = conn.prepareStatement("select * from Board");
rs = pstmt.executeQuery();
// 글 목록을 반환할 ArrayList
ArrayList<BoardDTO> boardRowList = new ArrayList<BoardDTO>();
// db에서 데이터를 row단위로 가져와서
// list에 넣는다.
while(rs.next()) {
int id = rs.getInt("id");
String author = rs.getString("author");
String subject = rs.getString("subject");
String content = rs.getString("content");
Date writeDate = rs.getDate("writeDate");
Time writeTime = rs.getTime("writeTime");
int readCount = rs.getInt("readCount");
int commentCount = rs.getInt("commentCount");
BoardDTO dto = new BoardDTO();
dto.setId(id);
dto.setAuthor(author);
dto.setSubject(subject);
dto.setContent(content);
dto.setWriteDate(writeDate);
dto.setWriteTime(writeTime);
dto.setReadCount(readCount);
dto.setCommentCount(commentCount);
boardRowList.add(dto);
}
// db로부터 데이터 잘 들어왔는지 확인 (log 찍어봄)
for(BoardDTO dto: boardRowList){
System.out.println(dto.toString());
}
return boardRowList;
}
public int getBoardNewId() throws ClassNotFoundException, SQLException {
// Connection, PreparedStatement, ResultSet은 interface 객체이다.
Class.forName("org.mariadb.jdbc.Driver");
Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PW);
PreparedStatement pstmt = null;
ResultSet rs = null;
// newId를 가져오는 쿼리
pstmt = conn.prepareStatement("select max(id) + 1 AS newId from Board");
rs = pstmt.executeQuery();
int newId = 0;
if(rs.next()){
newId = rs.getInt("newId");
return newId;
}
// 예외 발생
throw new SQLException("글 컨텐츠를 새로 입력하기 위한 아이디값 받아오기를 실패하였습니다.");
}
public void insertBoardContent(int newId,
String subject,
String author,
String content) throws ClassNotFoundException, SQLException {
// Connection, PreparedStatement, ResultSet은 interface 객체이다.
Class.forName("org.mariadb.jdbc.Driver");
Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PW);
PreparedStatement pstmt = null;
// 쿼리 준비 & db 쿼리
// insert into board values (1, 'testAuthor', 'testSubject', 'testContent', CURDATE(), CURTIME(), 0, 0)
pstmt = conn.prepareStatement("insert into Board values (?, ?, ?, ?, CURDATE(), CURTIME(), 0, 0)");
pstmt.setInt(1, newId);
pstmt.setString(2, subject);
pstmt.setString(3, author);
pstmt.setString(4, content);
pstmt.executeUpdate();
}
}
2. 글목록을 보여주는 형태의 게시판 만들기
BoardListCmd.java 만들기
package kr.ac.daegu.jspmvc.biz;
import kr.ac.daegu.jspmvc.model.BoardDAO;
import kr.ac.daegu.jspmvc.model.BoardDTO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
/** 글 목록 조회 요청이 들어왔을 때 DB에서 데이터를 가져옴
* view로 보낼 데이터 셋의 정의.
* */
public class BoardListCmd implements BoardCmd {
@Override
public void execute(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// db에 접근해서 데이터 가져오는 인스턴스
BoardDAO dao = new BoardDAO();
// dao 기능 호출해서 가져온 db 데이터를 저장하는 컬렉션
ArrayList<BoardDTO> list = new ArrayList<BoardDTO>();
try {
list = dao.getBoardList(); // 여기까지는 성공
/**
* 가져온 db 데이터 리스트를 어떻게 jsp로 보여줄것인가?
*/
request.setAttribute("boardRowList",list);// 속성을 어딘가에서 꺼내올것인가(boardList.jsp)
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
}
}
db에서 가져온 데이터를 view 디렉토리를 생성하여 jsp파일을 만듬,.