JSP_5강_2_게시판_글쓰기 페이지

열라뽕따히·2024년 3월 20일

JSP

목록 보기
24/43

JSP_5강_1에 이어서 board_list.jsp에 글쓰기 페이지로 이동하는 버튼과 페이지 틀을 만들어보자!


=============================코드=============================

<%@page import="com.board.model.BoardDTO"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%
	List<BoardDTO> boards = (List<BoardDTO>)request.getAttribute("List");
	int listCount =(int)request.getAttribute("Count");
%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<div align = "center">
		<hr width = "30%" color = "tomato">
			<h3>BOARD 테이블 전체 게시물 목록 페이지</h3>
		<hr width = "30%" color = "tomato">
		<br/> <br/>
		
		<table border = "1" width = "450">
			<tr>
				<td colspan = "5" align = "right">
					전체 게시물 수 : <%=listCount %></td>
			</tr>
			
			<tr>
				<th>게시글 No.</th> <th>글 제목</th> <th>작성자</th> <th>조회수</th> <th>작성일자</th>
			</tr>
			
			<%
				if(boards.size() != 0) {
					for(BoardDTO dto : boards) {
			%>		
					<tr>
						<td><%=dto.getBoard_no() %></td>
						<td><%=dto.getBoard_title() %></td>
						<td><%=dto.getBoard_writer() %></td>
						<td><%=dto.getBoard_hit() %></td>
						<td><%=dto.getBoard_date().substring(0,10) %></td>
					</tr>	
			<% 	}  // for문 end
				}else {
					// 게시물 전체 목록이 없는 경우
			%>		
					<tr>
						<td colspan = "5" align = "center">
							<h3>전체 게시물 목록이 없습니다...</h3>
						</td>
					</tr>
			<% } %>
			
		</table>
		
		<br/><br/>
		
		<input type = "button" value = "글쓰기" onclick = "location.href = 'view/board_write.jsp'">
		
		<br/><br/>
		
		<%-- 검색 관련 처리 부분 --%>
		<form method = "post" action = "<%=request.getContextPath() %>/search.go">
			<select name = "field">
				<option value = "title">제목</option>
				<option value = "cont">내용</option>
				<option value = "title_cont">제목 + 내용</option>
				<option value = "writer">작성자</option>
			</select>
			
			<input type = "text" name = "keyword">&nbsp;&nbsp;&nbsp;
			<input type = "submit" value = "검색">
		</form>
	</div>

</body>
</html>



글쓰기 버튼을 클릭했을 때 넘어갈

view -> board_write.jsp 생성


=============================코드=============================

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
	
   // form 태그에 있는 return check() 기능
	function check() {
		if(frm.writer.value == "") {  // 작성자의 입력한 내용이 없다면
			alert("작성자를 입력하세요!");
			frm.writer.focus();
			return false;
		}
		
		if(frm.title.value == "") {  // 작성자의 입력한 내용이 없다면
			alert("글제목을 입력하세요!");
			frm.title.focus();
			return false;
		}
		
		if(frm.content.value == "") {  // 작성자의 입력한 내용이 없다면
			alert("글 내용을 입력하세요!");
			frm.content.focus();
			return false;
		}
		
		if(frm.pwd.value == "") {  // 작성자의 입력한 내용이 없다면
			alert("글 비밀번호를 입력하세요!");
			frm.pwd.focus();
			return false;
		}
	}
	
</script>
</head>
<body>

	<div align = "center">
		<hr width = "30%" color = "marmoon">
			<h3>BOARD 테이블 게시판 글쓰기 폼 페이지</h3>
		<hr width = "30%" color = "marmoon">
		<br/> <br/>
		
		<form method = "post" name = "frm" action = "<%=request.getContextPath() %>/insert_ok.go"
					onsubmit = "return check()">  
			<table border = "1" width = "350">
				<tr>
					<th>작성자</th>
					<td>
						<input type = "text" name = "writer">
					</td>
				</tr>
				
				<tr>
					<th>글 제목</th>
					<td>
						<input type = "text" name = "title">
					</td>
				</tr>
				
				<tr>
					<th>글내용</th>
					<td>
						<textarea rows="7" cols="25" name = "content"></textarea>
					</td>
				</tr>
				
				<tr>
					<th>글 비밀번호</th>
					<td>
						<input type = "password" name = "pwd">
					</td>
				</tr>
				
				<tr>
					<td colspan = '2' align = "center">
						<input type = "submit" value = "글쓰기">&nbsp;&nbsp;&nbsp;
						<input type = "reset" value = "다시작성">
					</td>
				</tr>
				
			</table>
		</form>
	</div>

</body>
</html>

=============================실행=============================

글쓰기 클릭!

작성자 입력하고 글쓰기 클릭

글내용 작성하고 글쓰기 클릭



글쓰기 폼 페이지에서 글쓰기를 클릭했을 때 DB에 저장이 될 수 있는

insert_ok.go 서블릿을 만들자!


=============================코드=============================

package com.board.controller;

import java.io.IOException;
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 com.board.model.BoardDAO;
import com.board.model.BoardDTO;


@WebServlet("/insert_ok.go")
public class InsertOkServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       

    public InsertOkServlet() {
        super();

    }

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 게시판 글 작성 폼 페이지에서 넘어온 데이터들을 board 테이블에 저장하는 비지니스 로직
		
		// 한글 깨짐 방지
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html; charset = UTF-8");
		
		// 1단계 : 게시글 입력 폼 페이지에서 넘어온 데이터들을 받아주어야 함
		String board_writer = request.getParameter("writer").trim();
		String board_title = request.getParameter("title").trim();
		String board_content = request.getParameter("content").trim();
		String board_pwd = request.getParameter("pwd").trim();
		
		// 2단게 : 1단계에서 넘어온 데이터들을 DTO 객체에 저장해주자
		BoardDTO dto = new BoardDTO();
		
		dto.setBoard_writer(board_writer);
		dto.setBoard_title(board_title);
		dto.setBoard_cont(board_content);
		dto.setBoard_pwd(board_pwd);
		
		// 3단계 : DTO 객체를 DB에 전송해주어야 함
		BoardDAO dao = BoardDAO.getInstance();
		
		dao.insertBoard(dto);
	}

}



BoardDAO에서

insertBoard() 메서드를 만들자!


=============================코드=============================

// board 테이블에 게시글을 추가하는 메서드
	public int insertBoard(BoardDTO dto) {
		int result = 0, count = 0;  // count는 글 번호
		
		try {
			openConn();
			
			sql = "select max(board_no) from board";
			pstmt = con.prepareStatement(sql);
			rs = pstmt.executeQuery();
			
			if(rs.next()) {
				count = rs.getInt(1) + 1;
			}
			
			sql = "insert into board values(?, ?, ?, ?, ?, default, sysdate, '')";
			pstmt = con.prepareStatement(sql);
			pstmt.setInt(1, count);
			pstmt.setString(2, dto.getBoard_writer());
			pstmt.setString(3, dto.getBoard_title());
			pstmt.setString(4, dto.getBoard_cont());
			pstmt.setString(5, dto.getBoard_pwd());
			
			result = pstmt.executeUpdate();
			
		} catch (SQLException e) {
			e.printStackTrace();
			
		} finally {
			closeConn(rs, pstmt, con);
		}
		return result;
	}



다시 서블릿으로 가자


=============================코드=============================

package com.board.controller;

import java.io.IOException;
import java.io.PrintWriter;

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 com.board.model.BoardDAO;
import com.board.model.BoardDTO;


@WebServlet("/insert_ok.go")
public class InsertOkServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       

    public InsertOkServlet() {
        super();

    }

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 게시판 글 작성 폼 페이지에서 넘어온 데이터들을 board 테이블에 저장하는 비지니스 로직
		
		// 한글 깨짐 방지
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html; charset = UTF-8");
		
		// 1단계 : 게시글 입력 폼 페이지에서 넘어온 데이터들을 받아주어야 함
		String board_writer = request.getParameter("writer").trim();
		String board_title = request.getParameter("title").trim();
		String board_content = request.getParameter("content").trim();
		String board_pwd = request.getParameter("pwd").trim();
		
		// 2단게 : 1단계에서 넘어온 데이터들을 DTO 객체에 저장해주자
		BoardDTO dto = new BoardDTO();
		
		dto.setBoard_writer(board_writer);
		dto.setBoard_title(board_title);
		dto.setBoard_cont(board_content);
		dto.setBoard_pwd(board_pwd);
		
		// 3단계 : DTO 객체를 DB에 전송해주어야 함
		BoardDAO dao = BoardDAO.getInstance();
// ---------------------여기부터 작성---------------------
		int check = dao.insertBoard(dto);
		
		PrintWriter out = response.getWriter();
		if(check > 0) {
			out.println("<script>");
			out.println("alert('게시글 추가 성공!!')");
			out.println("location.href = 'list.go'");
			out.println("</script>");
		}else {
			out.println("<script>");
			out.println("alert('게시글 추가 실패!!')");
			out.println("history.back()");
			out.println("</script>");
		}
	}

}

글쓰기 클릭!

확인 클릭

추가된 것을 확인할 수 있음!!

0개의 댓글