STUDY/programing

JSP 기초 : 게시판 만들기 6. 글 등록 기능

NightOwl 2018. 10. 23. 23:53
728x90

이전글보기

2018/10/22 - [ 컴알못/Web] - JSP 기초 : 게시판 만들기 5. 게시판 DB 생성


1. 글 쓰기 화면 디자인



이전글

write.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<%@ page import="java.io.PrintWriter"%>

<!DOCTYPE html>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; 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>

<%

//로긴한사람이라면 userID라는 변수에 해당 아이디가 담기고 그렇지 않으면 null값

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-expaned="false">

<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>

</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>





<!-- 애니매이션 담당 JQUERY -->

<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>

<!-- 부트스트랩 JS  -->

<script src="js/bootstrap.js"></script>


</body>

</html>


 






2. 게시판 DB 연결


 DAO 데이터 접근 객체의 약자로서 실제로 데이터베이스에 접근하여 입력/출력



BbsDAO.java


package bbs;


import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;


public class BbsDAO {

// dao : 데이터베이스 접근 객체의 약자

private Connection conn; // connection:db에접근하게 해주는 객체

//private PreparedStatement pstmt;

private ResultSet rs;


// mysql 처리부분

public BbsDAO() {

// 생성자를 만들어준다.

try {

String dbURL = "jdbc:mysql://localhost:3306/BBS?&useSSL=false&useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC";

String dbID = "root";

String dbPassword = "root";

Class.forName("com.mysql.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 ""; //데이터베이스 오류

}

//bbsID 게시글 번호 가져오는 함수

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;

}

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; //데이터베이스 오류

}

}


 



* 번외


현재 강의에서는 글쓰기화면의(write.jsp) 등록 버튼에서 회원/비회원 구분을 한다.

비회원일 경우 글 목록에서 글쓰기로 넘어가지 못 하도록

개인적으로 추가로 설정 해주었다.



<!-- 회원만넘어가도록 -->

<%

//if logined userID라는 변수에 해당 아이디가 담기고 if not null

if (session.getAttribute("userID") != null) {

%>

<a href="write.jsp" class="btn btn-primary pull-right">글쓰기</a>

<%

} else {

%>

<button class="btn btn-primary pull-right" onclick="if(confirm('로그인 하세요'))location.href='login.jsp';" type="button" >글쓰기</button>

<%

}

%>


</div>

</div>


 





3. 글을 작성해 주는 액션 페이지


wirteAction.jsp



<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%>

<%@ page import="bbs.BbsDAO"%>

<!-- bbsdao의 클래스 가져옴 -->

<%@ page import="java.io.PrintWriter"%>

<!-- 자바 클래스 사용 -->

<%

request.setCharacterEncoding("UTF-8");

response.setContentType("text/html; charset=UTF-8"); //set으로쓰는습관들이세오.

%>


<!-- 한명의 회원정보를 담는 user클래스를 자바 빈즈로 사용 / scope:페이지 현재의 페이지에서만 사용-->

<jsp:useBean id="bbs" class="bbs.Bbs" scope="page" />

<!-- // Bbs bbs = new Bbs(); -->

<jsp:setProperty name="bbs" property="bbsTitle" /><!-- bbs.setBbsTitle(requrst) -->

<jsp:setProperty name="bbs" property="bbsContent" />

<%

System.out.println(bbs);

%>

<!DOCTYPE html>

<html>

<head>


<meta http-equiv="Content-Type" content="text/html; 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("history.back()");

script.println("</script>");

}


}


}

%>

</body>

</html>



 




728x90