[write.jsp]
<div class="container">
<div class="row">
<form action="writeAction.jsp" method="post">
<table class="table table-striped" style="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>
- 글쓰기 버튼을 눌렀을때 보여지는 화면
- 코드 위쪽 네비게이션 부분은 main.jsp와 같다.
- 글쓰기의 내용은 writeAction.jsp로 보내진다.
[BbsDAO.java]
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;
}
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;
}
- getDate()
- 현재시간은 가져오는 SELECT문을 사용하여 ResultSet으로 현재시간을 반환해준다.
- write()함수에 작성날짜를 넣는 부분에서 사용된다.
- getNext()
- SELECT문으로 bbsID를 내림차순으로 가져와서 인덱스 1번은 제일 마지막작성번호
- write()함수에 게시글번호를 넣는 부분에서 사용된다.
- write()
- 실직적으로 writeAction.jsp에서 사용하는 함수이다.
- bbsTitle과 bbsContent는 write.jsp에서 받아와 name과 자바빈의 property명과 동일한 것에
대응하여 데이터베이스에 값을 넣는다.
- executeUpdate()는 쿼리 성공개수를 int로 반환
<%@ page import = "bbs.BbsDAO" %>
<%@ page import = "java.io.PrintWriter" %>
<% request.setCharacterEncoding("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 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("</script>");
}
}
}
%>
</body>
</html>
- write.jsp에서 글을 작성하고 글쓰기버튼을 눌렀을 때 writeActon.jsp로 오게 되는데
이 때 로그인을 안해서 session값이 없으면 alert을 띄우고 login.jsp로 이동하게 한다.
- 로그인을 해서 세션값이 있는 경우에는 BbsTitle과 BbsContent값이 정상적으로
들어오지 않았다면 전페이지로 돌려보낸다.
- BbsTitle과 BbsContent값이 정상적으로 들어왔다면 BbsDAO를 객체화 시켜 write함수를 사용한다.