Java/[부스트코스] 웹 백엔드

프로젝트B. 방명록 만들기

쵼쥬 2021. 7. 17. 16:48

1. 프로젝트 개요


두번째 프로젝트는 Servlet, JSP, JSTL & EL, JDBC를 이용하여 방명록 웹 어플리케이션을 작성하는 것입니다.

기능 요구사항은 다음의 기획서를 참고해 주세요. 기획서는 서비스 프로젝트에서 요구사항을 담은 내용이라고 생각하시면 됩니다.

여러분들은 기획서를 참고하여 프로젝트 결과를 만들어내야 합니다.

 


2. 프로젝트 개발스펙


방명록 웹 어플리케이션을 처음 시작하면 방명록을 입력하는 화면만 보입니다.

 

기술 요구사항

방명록 테이블 작성을 위한 스크립트는 다음과 같습니다.

CREATE TABLE `guestbook` (
  `id` INT(11) NOT NULL AUTO_INCREMENT COMMENT 'guestbook id',
   `name` VARCHAR(255) NOT NULL COMMENT 'user name',
  `content` TEXT NOT NULL COMMENT 'guestbook content',
  `regdate` DATETIME NULL DEFAULT NULL COMMENT '등록일',
  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 


 

작성한 코드

 

GuestbookDao.java

package dao;

import dto.Guestbook;
import util.DBUtil;

import java.sql.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class GuestbookDao {
    public List<Guestbook> getGuestbooks() {
        List<Guestbook> list = new ArrayList<>();
        String sql = "SELECT id, name, content, regdate FROM guestbook order by id desc";

        try (Connection conn = DBUtil.getConnection();
             PreparedStatement ps = conn.prepareStatement(sql)) {
            try (ResultSet rs = ps.executeQuery()) {
                while (rs.next()) {
                    long id = rs.getLong("id");
                    String name = rs.getString("name");
                    String content = rs.getString("content");
                    Date date = rs.getDate("regdate");

                    Guestbook guestbook = new Guestbook(id, name, content, date);
                    list.add(guestbook);
                }
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return list;
    }

    public void addGuestbook(Guestbook guestbook) {
        String sql = "INSERT INTO guestbook (name, content, regdate) values(?, ?, ?)";
        try (Connection conn = DBUtil.getConnection();
             PreparedStatement ps = conn.prepareStatement(sql)) {

            ps.setString(1, guestbook.getName());
            ps.setString(2, guestbook.getContent());
            ps.setDate(3, new java.sql.Date(guestbook.getRegdate().getTime()));

            ps.executeUpdate();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 

GuestBookListServlet.java

package servlet;

import dao.GuestbookDao;
import dto.Guestbook;

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

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/guestbooks")
public class GuestbookListServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        GuestbookDao gbd = new GuestbookDao();

        List<Guestbook> list = gbd.getGuestbooks();

        request.setAttribute("list", list);

        RequestDispatcher rd = request.getRequestDispatcher("/guestbooks.jsp");
        rd.forward(request, response);
    }

}

 

GuestBookWriteServlet.java

package servlet;

import dao.GuestbookDao;
import dto.Guestbook;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/guestbooks/write")
public class GuestbookWriteServlet extends HttpServlet {

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        request.setCharacterEncoding("utf-8");

        String name = request.getParameter("name");
        String content = request.getParameter("content");

        Guestbook gb = new Guestbook(name, content);
        GuestbookDao gbd = new GuestbookDao();
        gbd.addGuestbook(gb);

        response.sendRedirect("/guestbooks");
    }

}

 

 

<%@ page isELIgnored="false" %>

guestbooks.jsp는 JSTL 과 EL을 사용한 JSP파일로 isELIgnored="false"를 해주지 않으면 ${list} 가 그대로 출력되어 애를 먹었다. 프로그램의 로직 수행은 Servlet에서 하고 결과 출력은 JSP에서 하도록 하기위한 forwarding 방법을 간단히 사용하는 프로젝트였다.

 

 

https://github.com/jscheon/guestbook.git

 

jscheon/guestbook

Contribute to jscheon/guestbook development by creating an account on GitHub.

github.com

 

https://www.boostcourse.org/web326/project/206/content/165?isDesc=false#summary

 

https://www.boostcourse.org/web326/project/206/content/165?isDesc=false#summary

 

www.boostcourse.org