24.02.02 학습내용 web server 구현

2024. 2. 27. 17:43JAVA WEB

--1교시--
어제 만든 페이지에 이어서 '게시물 삭제' 기능 추가 하기 실습
실습 해설

--2교시--
검색기능 구현
실습 해설

USE bbs;
SELECT COUNT(bid) FROM board
JOIN users ON board.uid=users.uid
WHERE board.isDeleted=0 and uname LIKE '%제임스%';

--3교시--
글수정 기능 구현
실습 해설

Controller 고쳤을때는재기동
jsp 고쳤을때는 재기동 X

 

 

--Project 게시판 코드 구현--

[1] Controller 구현 - 2개

1. BoardController.java

package project.controller;

import jakarta.servlet.RequestDispatcher;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import project.entity.Board;
import project.entity.Reply;
import project.service.BoardService;
import project.service.BoardServiceImpl;

import java.io.IOException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;

@WebServlet({"/bbs/board/list", "/bbs/board/insert", "/bbs/board/update", "/bbs/board/delete", "/bbs/board/detail"})
public class BoardController extends HttpServlet {
	private static final long serialVersionUID = 1L;
	private BoardService bSvc = new BoardServiceImpl();
	
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String[] uri = request.getRequestURI().split("/");
		String action = uri[uri.length - 1];
		String method = request.getMethod();
		HttpSession session = request.getSession();
		RequestDispatcher rd = null;
		String title = "", content = "", field="", query = "", page_="", uid = "";
		Board board = null; 
		int bid, page= 0;
		String sessUid = (String) session.getAttribute("sessUid");
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset=utf-8");
		
	      
	    switch(action) {
	    case "list":		// /jw/bbs/board/list?p=1&f=title&q=검색
	    	page_= request.getParameter("p");
	    	field= request.getParameter("f");
	    	query= request.getParameter("q");
	    	page = (page_ == null || page_.equals("")) ? 1 : Integer.parseInt(page_);
	    	session.setAttribute("currentBoardPage", page);
	    	field = (field == null || field.equals("")) ? "title" : field;
	    	query = (query == null || query.equals("")) ? "" : query;
	    	session.setAttribute("field", field);
	    	session.setAttribute("query", query);
	    	List<Board> boardList = bSvc.getBoardList(page, field, query);
	    	request.setAttribute("boardList", boardList);
    	  
	    	// for pagination
	    	int totalItems = bSvc.getBoardCount(field, query);	// 보드의 갯수 출력
	    	int totalPages = (int) Math.ceil(totalItems * 1.0 / bSvc.COUNT_PER_PAGE);
	    	// 유저 목록 페이지 출력 ex> 12일 때 2 페이지 출력
	    	List<String> pageList = new ArrayList<>();
	    	for (int i = 1; i <= totalPages; i++)
	    		pageList.add(String.valueOf(i));	// i 를 String 으로 바꿔줌
	      	request.setAttribute("pageList", pageList);
		  
	    	rd = request.getRequestDispatcher("/WEB-INF/view/board/list.jsp");
	    	rd.forward(request, response);
	    	break;
    	  
    	case "insert":
			if (sessUid == null || sessUid.equals("")) {
			response.sendRedirect("/jw/bbs/user/login");
			break;
			}
			    	  
			if(method.equals("GET")) {
			rd = request.getRequestDispatcher("/WEB-INF/view/board/insert.jsp");	
			// - 오류 코드 - sendRedirect와 forward 중 한번만 쓸 수 있음. 왔다 갔다 하는 코드 쓰면 오류남.
			rd.forward(request, response);
			} else {
			title = request.getParameter("title");
			content= request.getParameter("content");
			board = new Board(title, content, sessUid);
			bSvc.insertBoard(board);
			response.sendRedirect("/jw/bbs/board/list?p=1");
			}
			break;
    	  
    	case "detail":
    		// 부를 수 있는 방법 == 클릭 (안전장치를 했으니 그냥 쓰면 됨)
			bid = Integer.parseInt(request.getParameter("bid"));	
			uid = request.getParameter("uid");
			// 자기 글 일때 Count 세지 않는 기능 - 나중에 구현!! 2024-02-22 이 시점엔 미구현
			if (!uid.equals(sessUid))
				bSvc.increaseViewCount(bid);
				
			  
			board = bSvc.getBoard(bid);
			request.setAttribute("board", board);
			  
			// 댓글 목록도 필요 - 나중에 구현!!! 2024-02-22 이 시점엔 미구현
			List<Reply> replyList = null;		
			request.setAttribute("replyList", replyList);
			  
			rd = request.getRequestDispatcher("/WEB-INF/view/board/detail.jsp");
			rd.forward(request, response);
			break;
	  
	  
    	case "delete":
			bid = Integer.parseInt(request.getParameter("bid"));
			bSvc.deleteBoard(bid);
			page = (Integer) session.getAttribute("currentBoardPage");
			field = (String) session.getAttribute("field");
			query = (String) session.getAttribute("query");
			query = URLEncoder.encode(query, "utf-8");
			response.sendRedirect("/jw/bbs/board/list?p=" + page + "&f=" + field + "&q=" + query);
			break;   
		
    	case "update":
    		if (method.equals("GET")) {
    			bid = Integer.parseInt(request.getParameter("bid"));
    			board = bSvc.getBoard(bid);
    			request.setAttribute("board", board);
    			rd = request.getRequestDispatcher("/WEB-INF/view/board/update.jsp");
    			rd.forward(request, response);
    		} else {
    			bid = Integer.parseInt(request.getParameter("bid"));
    			uid = request.getParameter("uid");
    			title = request.getParameter("title");
    			content = request.getParameter("content");
    			board = new Board(bid, title, content);
    			
    			bSvc.updateBoard(board);
    			response.sendRedirect("/jw/bbs/board/detail?bid=" + bid + "&uid=" + uid);
    		}
    		break;
    	}
	}
}

 

2. UserController.java

package project.controller;

import jakarta.servlet.RequestDispatcher;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import project.entity.User;
import project.service.UserService;
import project.service.UserServiceImpl;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.mindrot.jbcrypt.BCrypt;

import ch07_dao.CityEX.City;

@WebServlet({ "/bbs/user/list", "/bbs/user/register", "/bbs/user/update", 
			  "/bbs/user/delete", "/bbs/user/login", "/bbs/user/logout" })
public class UserController extends HttpServlet {
   private static final long serialVersionUID = 1L;
   private UserService uSvc = new UserServiceImpl();

   protected void service(HttpServletRequest request, HttpServletResponse response)
         throws ServletException, IOException {
      String[] uri = request.getRequestURI().split("/");
      String action = uri[uri.length - 1];
      String method = request.getMethod();
      HttpSession session = request.getSession();
      RequestDispatcher rd = null;
      
      String uid = null, pwd = null, pwd2 = null, hashedPwd = null, email = null, uname = null;
      String msg = null, url = null;
      User user = null;

      switch (action) {
      case "list": {
         String page_ = request.getParameter("page");
         int page = (page_ == null || page_.equals("")) ? 1 : Integer.parseInt(page_);
         session.setAttribute("currentUserPage", page);
         List<User>userList = uSvc.getUserList(page);
         request.setAttribute("userList", userList);
         
         // for pagination
         int totalUsers = uSvc.getUserCount();	// 유저의 명수 출력
         int totalPages = (int) Math.ceil(totalUsers * 1.0 / uSvc.count_per_page);
        		 // 유저 목록 페이지 출력 ex> 12일 때 2 페이지 출력
         List<String> pageList = new ArrayList<>();
         for (int i = 1; i <= totalPages; i++)
        	 pageList.add(String.valueOf(i));	// i 를 String 으로 바꿔줌
         request.setAttribute("pageList", pageList);

//         rd = request.getRequestDispatcher("/WEB-INF/view/user/list.jsp");
         rd = request.getRequestDispatcher("/WEB-INF/view/user/list.jsp");

         rd.forward(request, response);
         break;
      }
      case "register": {
         if (method.equals("GET")) {
//            rd = request.getRequestDispatcher("/WEB-INF/view/user/register.jsp");
            rd = request.getRequestDispatcher("/WEB-INF/view/user/register.jsp");
            rd.forward(request, response);
         } else {
            uid = request.getParameter("uid");
            pwd = request.getParameter("pwd");
            pwd2 = request.getParameter("pwd2");
            uname = request.getParameter("uname");
            email = request.getParameter("email");
            if (uSvc.getUserByUid(uid) != null) {
               rd = request.getRequestDispatcher("/WEB-INF/view/user/alertMsg.jsp");
               request.setAttribute("msg", "아이디가 중복입니다.");
               request.setAttribute("url", "/jw/bbs/user/register");
               rd.forward(request, response);
            } else if (pwd.equals(pwd2)) {
               user = new User(uid, pwd, uname, email);
               uSvc.registerUser(user);
               response.sendRedirect("/jw/bbs/user/list?page=1");
            } else {
               msg = "비밀번호가 일치하지 않습니다.";
               url = "/WEB-INF/view/user/register.jsp";
               rd = request.getRequestDispatcher("/WEB-INF/view/common/alertMsg.jsp");
               request.setAttribute("msg", msg);
               request.setAttribute("url", url);
               rd.forward(request, response);
            }
         }
         break;
      }
      case "login": {
         if (method.equals("GET")) {
//            rd = request.getRequestDispatcher("/WEB-INF/view/user/login.jsp");
            rd = request.getRequestDispatcher("/WEB-INF/view/user/login.jsp");
            rd.forward(request, response);
         } else {
            uid = request.getParameter("uid");
            pwd = request.getParameter("pwd");
            int result = uSvc.login(uid, pwd);
            if (result == uSvc.correct_login) {
               user = uSvc.getUserByUid(uid);
               session.setAttribute("sessUid", uid);
               session.setAttribute("sessUname", user.getUname());
               msg = user.getUname() + "님 환영합니다.";
               url = "/jw/bbs/board/list?p=1"; // 초기화면
            } else if (result == uSvc.WRONG_PASSWORD) {
               msg = "패스워드가 틀립니다.";
               url = "/jw/bbs/user/login";
            } else {
               msg = "등록되지 않은 사용자입니다.";
               url = "/jw/bbs/user/login";
            }
            rd = request.getRequestDispatcher("/WEB-INF/view/common/alertMsg.jsp");
            request.setAttribute("msg", msg);
            request.setAttribute("url", url);
            rd.forward(request, response);
         }
         break;
      }
      case "logout": {
         // session을 정리하면 된다.
         session.invalidate();
         response.sendRedirect("/jw/bbs/user/login");
         break;
      }
      case "update": {
         if (method.equals("GET")) {
            uid = request.getParameter("uid");
            user = uSvc.getUserByUid(uid);
//            rd = request.getRequestDispatcher("/WEB-INF/view/user/update.jsp");
            rd = request.getRequestDispatcher("/WEB-INF/view/user/update.jsp");
            request.setAttribute("user", user);
            rd.forward(request, response);
         } else {
            uid = request.getParameter("uid");
            pwd = request.getParameter("pwd");
            pwd2 = request.getParameter("pwd2");
            hashedPwd = request.getParameter("hashedPwd");
            uname = request.getParameter("uname");
            email = request.getParameter("email");
            if (pwd != null && pwd.equals(pwd2))
               hashedPwd = BCrypt.hashpw(pwd, BCrypt.gensalt());
            user = new User(uid, hashedPwd, uname, email);
            uSvc.updateUser(user);
            response.sendRedirect("/jw/bbs/user/list?page=1");
         }
         break;
      }
      case "delete": {
         uid = request.getParameter("uid");
         uSvc.deleteUser(uid);
         String sessUid = (String) session.getAttribute("sessUid");
         if (!sessUid.equals("admin"))
            session.invalidate();
         response.sendRedirect("/jw/bbs/user/list?page=1");
         break;
      }

      }
   }
}

 

[3] Dao 구현 - 2개

1. BoardDao.java

package project.dao;

import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;

import project.entity.Board;

public class BoardDao {
	public Connection getConnection() {
		Connection conn = null;
		try {
			Context initContext = new InitialContext();
			DataSource ds = (DataSource) initContext.lookup("java:comp/env/" + "jdbc/bbs"); // context에 추가한 부분의 name
			conn = ds.getConnection();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return conn;
	}

	public Board getBoard(int bid) {
		Connection conn = getConnection();
		// 골라라 전부를 보드로부터 만약 bid가 같다면
		String sql = "SELECT b.*, u.uname FROM board b"
				+ "	JOIN users u ON b.uid=u.uid"
				+ "	WHERE b.bid=?;";	// ?는 HeidiSQL에서 1, Eclips에서 변형
			Board board = null;			// 빈껍데기 왜? 나중에 여기에 담아야 하기 때문		
		try {
			PreparedStatement pstmt = conn.prepareStatement(sql);	// conn에 sql을 실행하려고 준비하는 것
			pstmt.setInt(1, bid);
						
			ResultSet rs = pstmt.executeQuery();// 쿼리 실행 sql이 pstmt에 담겨있고 execute 실행
			while (rs.next()) {
			board =  new Board(rs.getInt(1), rs.getString(2), rs.getString(3), 
					rs.getString(4), LocalDateTime.parse(rs.getString(5).replace(" ", "T")),
					rs.getInt(6), rs.getInt(7), rs.getInt(8), rs.getString(9)); 
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return board;
	}
	// field 값은 title, content, uid 등 attribute name
	// query 값은 검색어 : 어떤 단어(attribute name)를 어디서(title, content, uid) 찾을 것인가?
	public List<Board> getBoardList(String field, String query, int num, int offset) {
		Connection conn = getConnection();
		String sql = "SELECT b.*,u.uname FROM board b"
				+ "	JOIN users u ON b.uid=u.uid"
				+ "	WHERE b.isDeleted=0 AND " + field + " LIKE ?"	// title이 field로 바뀜
				+ "	ORDER BY bid DESC"
				+ "	LIMIT ? OFFSET ?;"; // into 있는 것이 정석	
		List<Board> list = new ArrayList<Board>();
		try {
			PreparedStatement pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, query);
			pstmt.setInt(2, num);
			pstmt.setInt(3, offset);

			ResultSet rs = pstmt.executeQuery();
			while (rs.next()) {
			Board board =  new Board(rs.getInt(1), rs.getString(2), rs.getString(3), 
					rs.getString(4), LocalDateTime.parse(rs.getString(5).replace(" ", "T")),
					rs.getInt(6), rs.getInt(7), rs.getInt(8), rs.getString(9)); 
			list.add(board);
		
			}	rs.close(); pstmt.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return list;
	}
	public void insertBoard(Board board) {
		Connection conn = getConnection();
		// 구상단계 - 해야할 일 떠올리기(구조도, Design)
		// 1. SQL문을 쓸 것
		// 2. 쓴 SQL을 어디다 담을 공간을 준비 
		// 3. 내용물 넣을 것 준비 
		// 4. SQL문 실행 
		// 5. 자원 새지 않게 닫기
	        String sql = "insert into board values(default, ?, ?, ?, default, default, default, default)";
	        try {
	            PreparedStatement pstmt = conn.prepareStatement(sql);
	            pstmt.setString(1, board.getTitle());
	            pstmt.setString(2, board.getContent());
	            pstmt.setString(3, board.getUid());

	            pstmt.executeUpdate();
	            pstmt.close();
	            conn.close();
	        } catch (Exception e) {
	            e.printStackTrace();
	        }
	    }

	public void updateBoard(Board board) {
		Connection conn = getConnection();
		String sql = "update board set title=?, content=?, modTime=now() where bid=?";
		try {
			PreparedStatement pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, board.getTitle());
			pstmt.setString(2, board.getContent());
			pstmt.setInt(3, board.getBid());
			
			pstmt.executeUpdate();
			pstmt.close();
			conn.close();
			} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public void deleteBoard(int bid) {
		Connection conn = getConnection();
		String sql = "update board set isDeleted=1 where bid=?";
		try {
			PreparedStatement pstmt = conn.prepareStatement(sql);
			pstmt.setInt(1, bid);
			
			pstmt.executeUpdate();
			pstmt.close();
			conn.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	// field 값은 view 또는 reply 가져감
	public void increaseCount(String field, int bid) {
		Connection conn = getConnection();
		String sql = "UPDATE board SET " + field + "Count=" + field + "Count+1 WHERE bid=?";	// if 절의 sum 같은 느낌 / 조회수가 올라갈 때마다 +1  / ? = viewCount
		// where bid=? 어떤 게시판에 james의 글을 누군가 본다면 조회수가 올라간다 == bid가 누구인지 찾는 것
		try {	
			PreparedStatement pstmt = conn.prepareStatement(sql);
			pstmt.setInt(1, bid);

			pstmt.executeUpdate();
			pstmt.close();
			conn.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public int getBoardCount(String field, String query) {
		Connection conn = getConnection();
		query = "%" + query + "%";
		String sql = "SELECT COUNT(bid) FROM board"
				+ "	JOIN users ON board.uid=users.uid"
				+ "	WHERE board.isDeleted=0 and " + field + " LIKE ?";
		int count = 0;
		try {
			PreparedStatement pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, query);
			ResultSet rs = pstmt.executeQuery(sql);
			while (rs.next()) {
				count = rs.getInt(1);
			}
			rs.close(); pstmt.close(); conn.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return count;
	}
}

 

2. UserDao.java

package project.dao;

import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;

import project.entity.User;

public class UserDao {
	public Connection getConnection() {
		Connection conn = null;
		try {
			Context initContext = new InitialContext();
			DataSource ds = (DataSource) initContext.lookup("java:comp/env/" + "jdbc/bbs"); // context에 추가한 부분의 name
			conn = ds.getConnection();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return conn;
	}

	public User getUserByUid(String uid) {
		Connection conn = getConnection();
		String sql = "select * from users where uid=?";
        User user = null;
        try {
            PreparedStatement pstmt = conn.prepareStatement(sql);
            pstmt.setString(1, uid);

            ResultSet rs = pstmt.executeQuery();
            while (rs.next()) {
                user = new User(rs.getString(1), rs.getString(2), rs.getString(3), rs.getString(4),
                        LocalDate.parse(rs.getString(5)), rs.getInt(6));
            }
            rs.close();
            pstmt.close();
            conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return user;
    }

	public List<User> getUserList(int num, int offset) {
		Connection conn = getConnection();
		String sql = "select * from users where isDeleted=0"
                + " order by regDate desc, uid limit ? offset ?";
        List<User> list = new ArrayList<User>();
        try {
            PreparedStatement pstmt = conn.prepareStatement(sql);
            pstmt.setInt(1, num);
            pstmt.setInt(2, offset);

            ResultSet rs = pstmt.executeQuery();
            while (rs.next()) {
                User user = new User(rs.getString(1), rs.getString(2), rs.getString(3), rs.getString(4),
                        LocalDate.parse(rs.getString(5)), rs.getInt(6));
                list.add(user);
            }
            rs.close();
            pstmt.close();
            conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return list;
    }

	public void insertUser(User user) {
		Connection conn = getConnection();
		String sql = "insert users values (?, ?, ?, ?, default, default)";
        try {
            PreparedStatement pstmt = conn.prepareStatement(sql);
            pstmt.setString(1, user.getUid());
            pstmt.setString(2, user.getPwd());
            pstmt.setString(3, user.getUname());
            pstmt.setString(4, user.getEmail());

            pstmt.executeUpdate();
            pstmt.close(); conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

	public void updateUser(User user) {
		Connection conn = getConnection();
		String sql = "update users set pwd=?, uname=?, email=? where uid=?";
        try {
            PreparedStatement pstmt = conn.prepareStatement(sql);
            pstmt.setString(1, user.getPwd());
            pstmt.setString(2, user.getUname());
            pstmt.setString(3, user.getEmail());
            pstmt.setString(4, user.getUid());

            pstmt.executeUpdate();
            pstmt.close(); conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

	public void deleteUser(String uid) {
		Connection conn = getConnection();
		String sql = "update users set isDeleted=1 where uid=?";
        try {
            PreparedStatement pstmt = conn.prepareStatement(sql);
            pstmt.setString(1, uid);

            pstmt.executeUpdate();
            pstmt.close(); conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
	
	public int getUserCount() {
		Connection conn = getConnection();
		String sql ="select count(uid) from users where isDeleted=0";
		int count = 0;
		try {
			Statement stmt = conn.createStatement();
			ResultSet rs = stmt.executeQuery(sql);
			while (rs.next()) { 
				count = rs.getInt(1);	//	데이터 하나라도 이런식으로 가져와야 함
			}
			rs.close(); stmt.close(); conn.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return count;
	}
}

 

[3] Entity 구현 -2개

1. Board.java

package project.entity;

import java.time.LocalDateTime;

public class Board {
	private int bid;
	private String title;
	private String content;
	private String uid;
	private LocalDateTime modTime;
	private int isDeleted;
	private int viewCount;
	private int replyCount;
	private String uname;	// user stable 과 join 해서 얻게 될 내용
	
	public Board() { }
	
	// 게시글 생성 할 때 필요한 생성자만 나열(미리 세팅)
	public Board(String title, String content, String uid) {
		this.title = title;
		this.content = content;
		this.uid = uid;
	}

	// 게시글 수정할 때 필요한 생성자만 나열(update 상황 가정 - 미리 세팅)
	public Board(int bid, String title, String content) {
		this.bid = bid;
		this.title = title;
		this.content = content;
	}

	// 코드를 쉽게 쓰기 위해 게시글 목록 생성자만 나열
	public Board(int bid, String title, LocalDateTime modTime, int viewCount, int replyCount, String uname) {
		this.bid = bid;
		this.title = title;
		this.modTime = modTime;
		this.viewCount = viewCount;
		this.replyCount = replyCount;
		this.uname = uname;
	}

	public Board(int bid, String title, String content, String uid, LocalDateTime modTime, int isDeleted, int viewCount,
			int replyCount, String uname) {
		this.bid = bid;
		this.title = title;
		this.content = content;
		this.uid = uid;
		this.modTime = modTime;
		this.isDeleted = isDeleted;
		this.viewCount = viewCount;
		this.replyCount = replyCount;
		this.uname = uname;
	}
	
	@Override
	public String toString() {
		return "board [bid=" + bid + ", title=" + title + ", content=" + content + ", uid=" + uid + ", modTime="
				+ modTime + ", isDeleted=" + isDeleted + ", viewCount=" + viewCount + ", replyCount=" + replyCount
				+ ", uname=" + uname + "]";
	}
	
	public int getBid() {
		return bid;
	}
	public void setBid(int bid) {
		this.bid = bid;
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	public String getUid() {
		return uid;
	}
	public void setUid(String uid) {
		this.uid = uid;
	}
	public LocalDateTime getmodTime() {
		return modTime;
	}
	public void setmodTime(LocalDateTime modTime) {
		this.modTime = modTime;
	}
	public int getIsDeleted() {
		return isDeleted;
	}
	public void setIsDeleted(int isDeleted) {
		this.isDeleted = isDeleted;
	}
	public int getViewCount() {
		return viewCount;
	}
	public void setViewCount(int viewCount) {
		this.viewCount = viewCount;
	}
	public int getReplyCount() {
		return replyCount;
	}
	public void setReplyCount(int replyCount) {
		this.replyCount = replyCount;
	}
	public String getUname() {
		return uname;
	}
	public void setUname(String uname) {
		this.uname = uname;
	}
}

 

2. reply.java

package project.entity;

import java.time.LocalDateTime;

public class Reply {
	private int rid;
	private String comment;
	private LocalDateTime regTime;
	private String uid;
	private int bid;
	private String uname;
	
	public Reply() { }
	
	public Reply(String comment, String uid, int bid) {
		this.comment = comment;
		this.uid = uid;
		this.bid = bid;
	}

	public Reply(int rid, String comment, LocalDateTime regTime, String uid, int bid, String uname) {
		this.rid = rid;
		this.comment = comment;
		this.regTime = regTime;
		this.uid = uid;
		this.bid = bid;
		this.uname = uname;
	}
	
	@Override
	public String toString() {
		return "Reply [rid=" + rid + ", comment=" + comment + ", regTime=" + regTime + ", uid=" + uid + ", bid=" + bid
				+ ", uname=" + uname + "]";
	}
	
	public int getRid() {
		return rid;
	}
	public void setRid(int rid) {
		this.rid = rid;
	}
	public String getComment() {
		return comment;
	}
	public void setComment(String comment) {
		this.comment = comment;
	}
	public LocalDateTime getRegTime() {
		return regTime;
	}
	public void setRegTime(LocalDateTime regTime) {
		this.regTime = regTime;
	}
	public String getUid() {
		return uid;
	}
	public void setUid(String uid) {
		this.uid = uid;
	}
	public int getBid() {
		return bid;
	}
	public void setBid(int bid) {
		this.bid = bid;
	}
	public String getUname() {
		return uname;
	}
	public void setUname(String uname) {
		this.uname = uname;
	}
}

 

3. User.java

package project.entity;

import java.time.LocalDate;

public class User {
	private String uid;
    private String pwd;
    private String uname;
    private String email;
    private LocalDate regDate;
    private int isDeleted;
    
    public User() {}
    
    public User(String uid, String pwd, String uname, String email, LocalDate regDate, int isDeleted) {
    this.uid = uid;
    this.pwd = pwd;
    this.uname = uname;
    this.email = email;
    this.regDate = regDate;
    this.isDeleted = isDeleted;
    }

    public User(String uid, String pwd, String uname, String email) {
        this.uid = uid;
        this.pwd = pwd;
        this.uname = uname;
        this.email = email;
    }

    @Override
    public String toString() {
        return "User [uid=" + uid + ", uname=" + uname + ", email=" + email + ", regDate=" + regDate
                + ", isDeleted=" + isDeleted + "]";//getPwd하면 원할 때 찍을 수 있으니 toString에서는 제거했음(나중에 필요하면 쓰기, pwd 쓰면 너무 길어져서)
    }

    public String getUid() {
        return uid;
    }

    public void setUid(String uid) {
        this.uid = uid;
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

    public String getUname() {
        return uname;
    }

	public void setUname(String uname) {
        this.uname = uname;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public LocalDate getRegDate() {
        return regDate;
    }

    public void setRegDate(LocalDate regDate) {
        this.regDate = regDate;
    }

    public int getIsDeleted() {
        return isDeleted;
    }

    public void setIsDeleted(int isDeleted) {
        this.isDeleted = isDeleted;
    }
}

BoardServiceImpl.java