1. write.jsp ๊ธ์ฐ๊ธฐ ํ์ด์ง ๋ง๋ค๊ธฐ
๋จผ์ ๊ฒ์๊ธ ์์ฑ ํ์ด์ง `write.jsp`๋ฅผ ๋ง๋ค์ด ์ฃผ๋ ค๊ณ ํ๋ค.
`bbs.jsp`๋ฅผ ๋ณต์ฌํด์ ๋ถ์ฌ ๋ฃ๊ณ ์ค๊ฐ ๋ถ๋ถ๋ง ์์ ํด ์ค ๊ฒ์ด๋ค.
nav๋ฐ ์๋ ๋ถ๋ถ์ ์ด๋ ๊ฒ ์ฝ๋๋ฅผ ์์ฑ
Bootstrap5 ์ด์ฉํ๋ค.
โก `mt-5` margin-top: 5rem;
โก `<input>`ํ๊ทธ์ `required` ์์ฑ ๋ฃ์ผ๋ฉด ๋ธ๋ผ์ฐ์ ์์ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ํจ. ํ ์คํธ๋ฅผ ์ ๋ ฅ ์ ํ ์ฑ๋ก submit ํ๋ฉด `์ด ์ ๋ ฅ๋์ ์์ฑํ์ธ์.` ๋ผ๋ ๊ฒฝ๊ณ ๋ฉ์ธ์ง๋ฅผ ๋์ด๋ค.
โก `form-control` ํด๋์ค
Bootstrap์์ ์ ๊ณตํ๋ ํด๋์ค ์ค ํ๋๋ก, ์
๋ ฅ ํ๋์ ์คํ์ผ์ ์ฝ๊ฒ ์ผ๊ด์ฑ ์๊ฒ ์ ์ฉํ๊ธฐ ์ํด ์ฌ์ฉ๋จ.
์ด๊ฑฐ ์ฐ๋ฉด ์
๋ ฅ ํ๋(input, textarea, select ๋ฑ)๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ์คํ์ผ์ ๊ฐ๊ฒ ๋จ.
๋๋น: 100% (๋ถ๋ชจ ์ปจํ
์ด๋์ ๋๋น๋ฅผ ์ฑ์)
ํ
๋๋ฆฌ: Bootstrap์ ๊ธฐ๋ณธ ํ
๋๋ฆฌ ์คํ์ผ ์ ์ฉ
๋์ด์ ์ฌ๋ฐฑ: ์ ์ ํ ํจ๋ฉ๊ณผ ๋์ด๊ฐ ์ค์ ๋จ
ํฐํธ: Bootstrap์ ๊ธฐ๋ณธ ๊ธ๊ผด ์คํ์ผ ์ ์ฉ
โก `form-group`์ Bootstrap 4์์ ํผ ์์๋ฅผ ๊ทธ๋ฃนํํ๋ ๋ฐ ์ฌ์ฉ๋๋ ํด๋์ค๋ก, ํผ ์์์ ๋ ์ด๋ธ์ ํจ๊ป ๋ฌถ์ด ์ ๋ ฌ๊ณผ ๊ฐ๊ฒฉ์ ๊ด๋ฆฌํ๋ ์ญํ ์ ํ๋ค. ์ง๋ง Bootstrap 5์์๋ form-group ํด๋์ค๊ฐ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋๋ค. ๋์ , `mb-4` ๋๋ ๊ทธ๋ฆฌ๋ ์์คํ ์ผ๋ก ํผ ์์ ๊ฐ์ ๊ฐ๊ฒฉ์ ์กฐ์ ํฉ๋๋ค.ํ ์ ์ฌ์ฉํ๋ ๋ฐฉ์์ผ๋ก ํผ ์์ ๊ฐ์ ๊ฐ๊ฒฉ์ ์กฐ์ ํ๋ค.
- ๊ฐ ์ ๋ ฅ ํ๋ ๊ทธ๋ฃน์ <div class="mb-4">๋ก ๋ฌถ์ด ๊ฐ๊ฒฉ์ ์ค์
- ๋ ์ด๋ธ๊ณผ ์ ๋ ฅ ํ๋ ๊ฐ์ ์ ๋ ฌ์ ์ ์ ํ ๊ด๋ฆฌ
- ํ์์ `d-flex`(div์ flex ์ค์ ํด์ฃผ๋ ํด๋์ค), `form-label`, form-control ๋ฑ ํด๋์ค๋ฅผ ํ์ฉ
โก ๋ฐ์ํ ๋์์ธ์ด๋ ์ผ๊ด๋ UI๋ฅผ ์ ์งํ๋ ค๋ฉด `form-label`์ ์ฌ์ฉ์ ํ๋ ๊ฒ์ด ์ข๋ค.
<div class="container mt-5">
<div class="card shadow-sm">
<div class="card-header bg-secondary text-white text-center">
<h5 class="mb-0">๊ฒ์ํ ๊ธ์ฐ๊ธฐ ์์</h5>
</div>
<div class="card-body">
<form method="post" action="writeAction.jsp">
<!-- ์ ๋ชฉ ์
๋ ฅ -->
<div class="mb-4">
<label for="bbsTitle" class="form-label">๊ธ ์ ๋ชฉ</label><input
type="text" id="bbsTitle" name="bbsTitle" class="form-control"
placeholder="๊ธ ์ ๋ชฉ์ ์
๋ ฅํ์ธ์" maxlength="50" required>
</div>
<!-- ๋ด์ฉ ์
๋ ฅ -->
<div class="mb-4">
<label for="bbsContent" class="form-label">๊ธ ๋ด์ฉ</label>
<textarea id="bbsContent" name="bbsContent" class="form-control"
placeholder="๊ธ ๋ด์ฉ์ ์
๋ ฅํ์ธ์" maxlength="2048" rows="10" required></textarea>
</div>
<!-- ์ ์ถ ๋ฒํผ -->
<div class="d-flex justify-content-end">
<input type="submit" class="btn btn-primary" value="๊ธ์ฐ๊ธฐ">
</div>
</form>
</div>
</div>
</div>
2. BbsDAO.java ํด๋์ค ๋ง๋ค๊ธฐ
์ด์ `writeAction.jsp` ํ์ด์ง๋ฅผ ๋ง๋ค์ด์ผ ํ๋๋ฐ ๊ทธ ์ ์
์ค์ ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํด์ ๋ฐ์ดํฐ๋ฅผ ๋นผ์ฌ ์ ์๋ ๋ฐ์ดํฐ ์ ๊ทผ ๊ฐ์ฒด `BbsDAO.java` ํด๋์ค๋ฅผ ๋ง๋ค์ด ๋ณด์.
๊ธฐ์กด์ ๋ง๋ค์๋ `userDAO` ๊ฐ์ ์๋ถ๋ถ ๊ทธ๋๋ก ๋ณต์ฌ
DB ์ฐ๊ฒฐํ๋ ๊ฑด ์ด์ฐจํผ ๋๊ฐ์ผ๋๊น ๊ทธ๋๋ก ๋ณต๋ถ
// MySQL ์ ์ํ๊ธฐ
private Connection conn;
private PreparedStatement psmt;
private ResultSet rs;
// ์์ฑ์ ๋ง๋ค๊ธฐ
public UserDAO() {
try {
String dbURL = "jdbc:mysql://localhost:3306/BBS";
String dbID = "root";
String dbPassword = "@cholda8291";
Class.forName("com.mysql.cj.jdbc.Driver");
conn = DriverManager.getConnection(dbURL, dbID, dbPassword);
} catch (Exception e) {
e.printStackTrace();
}
}
์์ฑ์ ๋ฉ์๋ ์ด๋ฆ์ BbsDAO()๋ก ๋ฐ๊ฟ์ค๋ค.
์ด์ 3๊ฐ์ ๋ฉ์๋๋ฅผ ๋ง๋ค๊ฑด๋ฐ ๋ฉ์๋๋ผ๋ฆฌ DB ์ ๊ทผ์ ์์ด์ ๋ง์ฐฐ์ด ์ผ์ด๋ ์ ์์ด์ ์์ ์ ์ธํ ๋ณ์๋ค ์ค์ `private PreparedStatement psmt;`๋ฅผ ์ง์์ฃผ๊ณ ๊ฐ ๋ฉ์๋ ์์ชฝ์ ๋ฃ์ด์ค ๊ฒ์ด๋ค.
ํ์ฌ ์๊ฐ ๊ฐ์ ธ์ค๋ `getDate()`๋ฉ์๋,
๊ธ๋ฒํธ ๊ฐ์ ธ์ค๋ `getNext()` ๋ฉ์๋,
๊ธ ์์ฑํ๋ ๋ฉ์๋ `write()` ๋ฉ์๋๋ฅผ ์ฐจ๋ก๋ก ๋ง๋ ๋ค.
// ํ์ฌ ์๊ฐ์ ๊ฐ์ ธ์ค๋ ๋ฉ์๋
// ๊ฒ์ํ์ ๊ธ ์์ฑํ ๋ ํ์ฌ ์๋ฒ์ ์๊ฐ์ ๊ฐ์ ธ์ด
public String getDate() {
String SQL = "SELECT NOW()";
try {
PreparedStatement psmt = conn.prepareStatement(SQL);
rs = psmt.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 psmt = conn.prepareStatement(SQL);
rs = psmt.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 psmt = conn.prepareStatement(SQL);
psmt.setInt(1, getNext());
psmt.setString(2, bbsTitle);
psmt.setString(3, userID);
psmt.setString(4, getDate());
psmt.setString(5, bbsContent);
psmt.setInt(6, 1);
/* insert๋ executeUpdate์, executeQuery๋ select
rs = psmt.executeQuery(); */
return psmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}
return -1; // ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค๋ฅ
}
์ฝ๋ ์๋ชป ์ด ๋ถ๋ถ
`INSERT`๋ฌธ์ ๊ฒฝ์ฐ์๋ `psmt.executeQuery();` ์์
`executeQuery()`๋ ์กฐํ ์ฟผ๋ฆฌ (`SELECT`)๋ฅผ ์คํํ ๋ ์ฌ์ฉ๋๋ฉฐ, ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ๋ฐ๊ธฐ ์ํด ํ์ํ๋ค. ๋ฐ๋ฉด, INSERT, UPDATE, DELETE ๋ฑ `๋ฐ์ดํฐ ์กฐ์ ์ฟผ๋ฆฌ (DML)`๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ์ง ์๊ธฐ ๋๋ฌธ์ `executeUpdate()`๋ง ์ฌ์ฉํ๋ค.
executeUpdate(): INSERT, UPDATE, DELETE์์ ์ฌ์ฉ
์คํ๋ ์ฟผ๋ฆฌ๋ก ์ธํด ์ํฅ์ ๋ฐ์ ํ(row)์ ์๋ฅผ ๋ฐํ
3. writeAction.jsp ํ์ด์ง ๋ง๋ค๊ธฐ
writeAction.jsp ํ์ด์ง๋ ๋ณดํต ์ฌ์ฉ์๊ฐ ๊ฒ์ํ์ ๊ธ์ ์์ฑํ๊ณ ์ ์ถํ๋ ์์ ์ ์ฒ๋ฆฌํ๋ ํ์ด์ง์ด๋ค. ์ด ํ์ด์ง์์๋ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๋ค.
- ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ์ ๋ชฉ๊ณผ ๋ด์ฉ์ ์ฒ๋ฆฌ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋ก์ด ๊ฒ์๊ธ์ ์ฝ์
- ๊ฒ์๊ธ ์ฝ์ ํ ์ ์ ํ ์๋ต(์ฑ๊ณต ๋ฉ์์ง, ์คํจ ๋ฉ์์ง ๋ฑ)์ ๋ฐํ
์ด์ `writeAction.jsp` ํ์ด์ง๋ฅผ ๋ง๋ค์ด ์ฃผ๋ ค๊ณ ํ๋ค. `webapp`์ `joinAction.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"); %>
<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) { // DB์ค๋ฅ ๋ฐ์, ๊ธ์ฐ๊ธฐ ์คํจ
PrintWriter script = response.getWriter();
script.println("<script>");
script.println("alert('๊ธ์ฐ๊ธฐ์ ์คํจํ์ต๋๋ค.')");
script.println("history.back()");
script.println("</script>");
}
else { // ๊ธ์ฐ๊ธฐ ์ฑ๊ณต -> ๊ฒ์ํ ๋ฉ์ธ ํ๋ฉด(bbs.jsp)๋ก ์ด๋
PrintWriter script = response.getWriter();
script.println("<script>");
script.println("location.href = 'bbs.jsp'");
script.println("</script>");
}
}
}
%>
</body>
</html>
์นํ์ด์ง ๊ฐ์ ๊ธ์ฐ๊ธฐ ํ ์คํธํด๋ณด์!
์์ง ๊ธ๋ชฉ๋ก ์๋ง๋ค์ด์ค์ ๊ธ๋ชฉ๋ก์๋ ์๋จ๊ณ MySQL ๊ฐ์ `select * from bbs;` ์ฟผ๋ฆฌ๋ก ์ง์ ํ์ธ ํด ์ฃผ์ด์ผ ํ๋ค.
์ฑ๊ณต
'Coding > Spring&JSP' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JSP] ๊ฒ์ํ ๋ง๋ค๊ธฐ 11 _ ๊ฒ์ํ ๋ณด๊ธฐ ๊ธฐ๋ฅ (93) | 2024.12.09 |
---|---|
[JSP] ๊ฒ์ํ ๋ง๋ค๊ธฐ 10 _ ๊ฒ์ํ ๊ธ๋ชฉ๋ก ๊ธฐ๋ฅ (57) | 2024.12.09 |
[JSP] ๊ฒ์ํ ๋ง๋ค๊ธฐ 8 _ ๊ฒ์ํ ๋ฉ์ธ ํ์ด์ง ๋ง๋ค๊ณ ๊ฒ์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์ถํ๊ธฐ (67) | 2024.12.08 |
[JSP] ๊ฒ์ํ ๋ง๋ค๊ธฐ 7 _ ํ์์ธ์ ๊ด๋ฆฌํ๊ธฐ (92) | 2024.12.05 |
[JSP] ๊ฒ์ํ ๋ง๋ค๊ธฐ 6 _ ํ์๊ฐ์ ์ฒ๋ฆฌํ๊ธฐ (66) | 2024.12.04 |