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
https://www.boostcourse.org/web326/project/206/content/165?isDesc=false#summary
'Java > [부스트코스] 웹 백엔드' 카테고리의 다른 글
프로젝트A. 명함 관리 프로그램 (0) | 2021.07.15 |
---|