[JSP] 게시판 만들기 - 글쓰기 기능 구현

2024. 8. 21. 20:37·프로젝트

[작성일: 2023. 04. 18]

 

글쓰기 기능 구현

[소스코드]

#write.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.io.PrintWriter" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width", initial-scale="1">
<link rel="stylesheet" href="css/bootstrap.css">
<title>JSP 게시판 웹 사이트</title>
</head>
<body>
	<%
		String userID = null;
		if(session.getAttribute("userID")!=null) {
			userID = (String)session.getAttribute("userID");
		}
	%>
	<!-- 네비게이션 구현(바) -->
	<nav class="navbar navbar-default"> <!-- 네비게이션 -->
		<div class="navbar-header"> <!-- 네이게이션 상단 부분 -->
			<!-- 네비게이션 상단 박스 영역 -->
			<button type="button" class="navbar-toggle collapsed"
			data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"
			aria-expanded="false">  <!-- 모바일 상태에서 오른쪽에 메뉴가 나옴. -->
			
			<!-- 오른쪽 메뉴 바에서 선 3개 -->
				<span class="icon-bar"></span>
				<span class="icon-bar"></span>
				<span class="icon-bar"></span>
			</button>
			
			<a class="navbar-brand" href="main.jsp">JSP 게시판 웹 사이트</a>
		</div>
		
		<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
			<ul class="nav navbar-nav"> <!-- 네비게이션 바의 메뉴 -->
				<li><a href="main.jsp">메인</a></li>
				<li class="active"><a href="bbs.jsp">게시판</a></li>
				<!-- 메인과 게시판으로 이동 -->
			</ul>
			<%
				if(userID == null) {
			%>	
			<ul class="nav navbar-nav navbar-right">
				<li class="dropdown">
					<a href="#" class=dropdown-toggle"
						data-toggle="dropdown" role="button" aria-haspopup="true"
						aria-expanded="false">접속하기<span class="caret"></span></a>
						<!-- 임시주소링크 #을 기재함. -->
					<ul class="dropdown-menu">
						<li><a href="login.jsp">로그인</a></li>
						<li><a href="join.jsp">회원가입</a><li>
					</ul>
				</li>
			</ul>
			<%
				} else {
			%>		
			<ul class="nav navbar-nav navbar-right">
				<li class="dropdown">
					<a href="#" class=dropdown-toggle"
						data-toggle="dropdown" role="button" aria-haspopup="true"
						aria-expanded="false">회원관리<span class="caret"></span></a>
						<!-- 임시주소링크 #을 기재함. -->
					<ul class="dropdown-menu">
						<li><a href="logoutAction.jsp">로그아웃</a></li>
					</ul>
				</li>
			</ul>				
			<%		
				}
			%>
		</div>
	</nav>	
	<div class="container">
		<div class="row">
			<form method="post" action="writeAction.jsp">
			<table class="table table-striped" style="text-align: center; border: 1px solid #dddddd">
			<!-- 게시판에 글 목록들이 홀수와 짝수가 번갈아가며 색상이 변경됨. -->
				<thead>
					<tr>
						<th colspan="2"style="background-color: #eeeeee; text-align: center;">게시판 글쓰기 양식</th>
						<!-- 2개의 열을 사용할 수 있도록 colspan 사용 -->
					</tr>
				</thead>
				<tbody>
					<tr>
						<td><input type="text" class="form-control" placeholder="글 제목" name="bbsTitle" maxlength="50"></td>
					</tr>
					<tr>
						<td><textarea class="form-control" placeholder="글 내용" name="bbsContent" maxlength="2048" style="height: 350px;"></textarea></td>		
					</tr>
				</tbody>
			</table> 
				<input type="submit" class="btn btn-primary pull-right" value="글쓰기"> <!-- 글쓰기 버튼 -->
			</form>				
		</div>
	</div>
	<script src="//code.jquery.com/jquery-3.6.4.min.js"></script>
	<script src="js/bootstrap.js"></script>
</body>
</html>

 

 

#Bbs.DAO

package bbs;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class BbsDAO {

	private Connection conn;
	private ResultSet rs; // 정보를 담을 객체
	
	public BbsDAO() {
		try {
			String dbURL = "jdbc:mariadb://localhost:3399/bbs";
			// 내 컴퓨터에 설치된 mariadb 서버의 bbs 데이터베이스에 접속
			String dbID = "root";
			String dbPassword = "1234";
			Class.forName("org.mariadb.jdbc.Driver"); // 매개체 라이브러리
			conn = DriverManager.getConnection(dbURL, dbID, dbPassword);
		} catch(Exception e) {e.printStackTrace();}
		
	}
	
	public String getDate() {
		// 현재 시간을 가져올 함수
		String SQL = "SELECT NOW()";
		try {
			PreparedStatement pstmt = conn.prepareStatement(SQL);
			rs = pstmt.executeQuery();
			if(rs.next()) {
				return rs.getString(1);  // 현재의 날짜를 반환함.
			}
		}catch(Exception e) {e.printStackTrace();}
		return "";  // 빈 문자열 리턴으로 데이터 베이스 오류를 알려줌.
	}
	
	public int getNext() {
		String SQL = "SELECT bbsID FROM bbs ORDER BY bbsID DESC";
		try {
			PreparedStatement pstmt = conn.prepareStatement(SQL);
			rs = pstmt.executeQuery();
			if(rs.next()) {
				return rs.getInt(1) + 1;  // 1을 더해서 다음 게시글이 보일 수 있도록 함.
			}
			return 1;  // 현재가 첫 게시물인 경우
			
			
		}catch(Exception e) {e.printStackTrace();}
		return -1;  // 데이터 베이스 오류를 알려줌.
	}
	
	public int write(String bbsTitle, String userID, String bbsContent) {
		String SQL = "INSERT INTO bbs VALUES(?, ?, ?, ?, ?, ?)";
		try {
			PreparedStatement pstmt = conn.prepareStatement(SQL);
			pstmt.setInt(1, getNext());  // 다음에 쓰여야 할 게시글 번호
			pstmt.setString(2, bbsTitle); 
			pstmt.setString(3, userID);  
			pstmt.setString(4, getDate()); 
			pstmt.setString(5, bbsContent); 
			pstmt.setInt(6, 1); 		

			return pstmt.executeUpdate();
			
		}catch(Exception e) {e.printStackTrace();}
		return -1;  // 데이터 베이스 오류를 알려줌.
	}
}

 

 

#writeAction.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="bbs.BbsDAO" %>
<%@ page import="java.io.PrintWriter" %>   <!-- 자바스크립트 문장을 작성하기 위함. -->
<% request.setCharacterEncoding("UTF-8"); %>
   <!-- 건너오는 모든 데이터를 UTF-8로 받기 위함. -->
<jsp:useBean id="bbs" class="bbs.Bbs" scope="page" />
<jsp:setProperty name="bbs" property="bbsTitle" />
<jsp:setProperty name="bbs" property="bbsContent" />

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP 게시판 웹 사이트</title>
</head>
<body>
	<%
		String userID = null;
		if(session.getAttribute("userID") != null) {
			userID = (String) session.getAttribute("userID");
		}
		
		if(userID == null) { 
			PrintWriter script = response.getWriter();
			script.println("<script>");
			script.println("alert('로그인이 필요합니다.')");
			script.println("location.href = 'login.jsp'");  // 로그인이 되지 않은 사람은 로그인 페이지로 이동하게 함.
			script.println("</script>");
		} else {
			if(bbs.getBbsTitle() == null || bbs.getBbsContent() == null){  // 사용자가 제목이나 글을 입력하지 않았을 경우
						PrintWriter script = response.getWriter();
						script.println("<script>");
						script.println("alert('입력이 되지 않은 사항이 있습니다.')");
						script.println("history.back()");
						script.println("</script>");
			} else {
				BbsDAO bbsDAO = new BbsDAO();
				int result = bbsDAO.write(bbs.getBbsTitle(), userID, bbs.getBbsContent());
				if(result == -1) {  // 데이터베이스 오류
					PrintWriter script = response.getWriter();
					script.println("<script>");
					script.println("alert('글쓰기에 실패했습니다..')");
					script.println("history.back()");
					// 이전 페이지로 사용자를 돌려보냄. (로그인 페이지)
					script.println("</script>");
				} else { 
					PrintWriter script = response.getWriter();
					script.println("<script>");
					script.println("location.href = 'bbs.jsp'");  
					// 게시글 작성에 성공했을 경우
					script.println("</script>");
				}
			}
		}
		
	%>
</body>
</html>

 

 

 

[실행화면]

 

write 페이지를 작성 후 새로고침을 하면 페이지가 완성된 것을 볼 수 있는데, 게시판 글쓰기 양식이 글씨만 있는 걸 보아선 코드에 오타가 있는 거 같아 다시 체크했다.

색상코드가 잘못되어 있어서 수정했는데 어제 만든 bbs 파일 또한 그렇게 적용되어 있어서 함께 수정했다.

또한 글쓰기 버튼이 왼쪽에 가있어서 오른쪽으로 가도록 코드를 수정했다.

 

글이 성공적으로 작성되었지만 글 목록을 보여주는 부분은 구현하지 않았기 때문에 글 목록에서는 예시 데이터만 나와있다. 실제로 데이터베이스에서 데이터를 확인해보면 데이터가 정상적으로 입력되어 있다.

 

 

 

 

 

 

 

 

 

 

 

 


🐣 입문 개발자가 작성한 글이므로 틀린 내용이나 오타가 있을 수 있습니다.

🐣 출처: https://youtu.be/EmbxlHakkfY

 

저작자표시 비영리 변경금지 (새창열림)
'프로젝트' 카테고리의 다른 글
  • [JSP] 게시판 만들기 - 게시글 보기 기능 구현
  • [JSP] 게시판 만들기 - 게시판 글 목록 기능 구현
  • [JSP] 게시판 만들기 - 게시판 메인 페이지 디자인, 게시판 데이터베이스 구축
  • [JSP] 게시판 만들기 - 회원 세션 관리
뚜비
뚜비
1년차 백엔드&iOS 개발자의 감자 탈출 블로그 🥔🥔
  • 뚜비
    뚜비의 개발로그
    뚜비
  • 전체
    오늘
    어제
  • 글쓰기     관리
    • Devlog
      • Back-End
        • Java
        • Spring
        • JPA
        • HTTP
        • Security
        • Back-End
        • Front-End
      • 알고리즘
      • iOS
        • Swift
      • Database
      • Tips
        • Git & GitHub
        • A to Z
      • 프로젝트
      • 생각정리
  • 태그

    DB
    HTTP
    MVC
    스프링
    jsp
    Swift
    다형성
    자바
    Spring Security
    성능최적화
    변수
    html
    JPA
    객체
    의존성주입
    최주호
    백준
    javascript
    sql
    데이터베이스
    자바스크립트
    Database
    생성자
    Security
    Java
    김영한
    알고리즘
    프로그래머스
    spring
    게시판만들기
  • hELLO· Designed By정상우.v4.10.0
뚜비
[JSP] 게시판 만들기 - 글쓰기 기능 구현
상단으로

티스토리툴바