- [JSP] 38. JSP와 서블릿을 사용해간단한 게시판 만들어 보기 (1)2024년 07월 08일
- Song hyun
- 작성자
- 2024.07.08.:52
728x90반응형[JSP] 38. JSP와 서블릿을 사용해 간단한 게시판 만들어 보기 (1)
1. 데이터베이스 만들기 (MySQL)
create database demo6; use demo6; create table posts( id int auto_increment primary key, title varchar(255) not null, content text not null, created_at timestamp default current_timestamp ); select * from posts;
2. DBUtil.java: MySQL과 Dynamic Web Project 연결
package com.tenco.servlet; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class DBUtil { private static final String URL="jdbc:mysql://localhost:3306/demo6?serverTimezone=Asia/Seoul"; private static final String USER="root"; private static final String PASSWORD="asd123"; public static Connection getConnection() throws ClassNotFoundException, SQLException { Class.forName("com.mysql.cj.jdbc.Driver"); return DriverManager.getConnection(URL,USER,PASSWORD); } }
3. createPost.jsp: 게시글 작성, CSS 파일 연동
package com.tenco.servlet; 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 java.io.IOException; import java.sql.Connection; import java.sql.PreparedStatement; @WebServlet("/create-post") public class createPostServlet extends HttpServlet { private static final long serialVersionUID = 1L; public createPostServlet() { super(); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 기본 값 설정 (언어 설정) request.setCharacterEncoding("UTF-8"); // HTTP 요청 메세지에서 데이터 추출 String title= request.getParameter("title"); String content= request.getParameter("content"); // 데이터 유효성 검사는 생략한다! try (Connection conn=DBUtil.getConnection();){ String sql=" Insert into posts (title,content) values (?,?) "; PreparedStatement pstmt=conn.prepareStatement(sql); pstmt.setString(1, title); pstmt.setString(2, content); pstmt.executeUpdate(); response.sendRedirect("result.jsp?message=create-success"); } catch (Exception e) { e.printStackTrace(); response.sendRedirect("result.jsp?message=error"); } } }
4. createPostServlet.java: 커넥션 연결, 쿼리문 전송, 응답 전송
(1) createPost에서 설정한 form-action에 연결하기 위해 어노테이션으로 URL 매핑
(2) java-mysql 연결
(3) 인증 검사, 데이터 유효성 검사
(4) MySQL DB에 쿼리문 전송
(5) 응답을 다른 클래스로 전송 (result.jsp)
package com.tenco.servlet; 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 java.io.IOException; import java.sql.Connection; import java.sql.PreparedStatement; @WebServlet("/create-post") public class createPostServlet extends HttpServlet { private static final long serialVersionUID = 1L; public createPostServlet() { super(); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 기본 값 설정 (언어 설정) request.setCharacterEncoding("UTF-8"); // HTTP 요청 메세지에서 데이터 추출 String title= request.getParameter("title"); String content= request.getParameter("content"); // 데이터 유효성 검사는 생략한다! try (Connection conn=DBUtil.getConnection();){ String sql=" Insert into posts (title,content) values (?,?) "; PreparedStatement pstmt=conn.prepareStatement(sql); pstmt.setString(1, title); pstmt.setString(2, content); pstmt.executeUpdate(); response.sendRedirect("result.jsp?message=create-success"); } catch (Exception e) { e.printStackTrace(); response.sendRedirect("result.jsp?message=error"); } } }
5. result.jsp: 응답(response)를 전송받아 화면에 띄우기
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>결과 확인 페이지</title> </head> <body> <h2>결과 확인 페이지</h2> <% String message=request.getParameter("message"); if("create-success".equals(message)){ out.println("<p>게시글 작성에 성공</p>"); } else if("delete-success".equals(message)){ out.println("<p>게시글 삭제에 성공</p>"); } else { out.println("<p>작업에 실패</p>"); } %> <br> <%-- 게시글 작성 화면으로 이동 --%> <a href="createPost.jsp">게시글 작성 페이지</a> <%-- 게시글 목록 화면으로 이동 --%> <a href="readPosts.jsp">게시글 리스트 페이지</a> </body> </html>
6. ReadPostsServlet.java : DB를 조회해, 현재 게시글들을 반환
package com.tenco.servlet; 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 java.io.IOException; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; @WebServlet("/read-posts") public class ReadPostsServlet extends HttpServlet { private static final long serialVersionUID = 1L; public ReadPostsServlet() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 응답 처리 MIME TYPE 설정 response.setContentType("text/html;charset=UTF-8"); try (Connection conn=DBUtil.getConnection()){ String sql="SELECT * FROM posts ORDER BY created_at DESC "; PreparedStatement pstmt=conn.prepareStatement(sql); ResultSet rs=pstmt.executeQuery(); request.setAttribute("resultSet", rs); request.getRequestDispatcher("readPosts.jsp").forward(request, response); } catch (Exception e) { e.printStackTrace(); } } }
7. readPosts.jsp: 현재 게시글들의 목록을 보여주는 페이지
<%@page import="java.sql.ResultSet"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>게시글 목록</title> <link rel="stylesheet" type="text/css" href="css.style.css"> </head> <body> <h2>게시글 목록</h2> <% ResultSet rs = (ResultSet)request.getAttribute("resultSet"); if(rs!=null){ %> <table border="1"> <tr> <th>ID</th> <th>제목</th> <th>작성일</th> <th>ID</th> <th></th> </tr> <% while(rs.next()){ %> <tr> <td><%= rs.getInt("id") %></td> <td><%= rs.getString("title") %></td> <td><%= rs.getString("content") %></td> <td><%= rs.getString("created_at") %></td> <td> <form action="delete-post" method="get"> <input type="hidden" name="boardId" value="<%= rs.getInt("id") %>"> <button type="submit">삭제</button> </form> </td> </tr> <% } %> </table> <% } else { %> <p>작성된 게시글이 하나도 없습니다.</p> <% } %> </body> </html>
8. DeletePostServlet.java : 파일 삭제를 담당하는 서블릿
package com.tenco.servlet; 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 java.io.IOException; import java.sql.Connection; import java.sql.PreparedStatement; @WebServlet("/delete-post") public class DeletePostServlet extends HttpServlet { private static final long serialVersionUID = 1L; public DeletePostServlet() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); String id=request.getParameter("boardId"); System.out.println("id : "+id); try (Connection conn=DBUtil.getConnection()){ String sql="DELETE FROM posts WHERE id=?"; PreparedStatement pstmt= conn.prepareStatement(sql); pstmt.setInt(1, Integer.parseInt(id)); pstmt.executeUpdate(); // 클라이언트에게 새로운 URL을 자동으로 요청하도록 HTTP 응답을 보낸다! // HTTP 상태코드 302(임시 이동) 사용자에게 새로운 URL로 이동처리 시킨다. response.sendRedirect("result.jsp?message=delete-success"); } catch (Exception e) { e.printStackTrace(); response.sendRedirect("result.jsp?message=error"); } } }
728x90반응형'JSP > 간단 게시판 만들기' 카테고리의 다른 글
[JSP] 40. JSP와 서블릿을 사용해 간단한 게시판 만들어 보기(3) (0) 2024.07.08 [JSP] 39. JSP와 서블릿을 사용해 간단한 게시판 만들어 보기(2) (0) 2024.07.08 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)