[๊ตฌ๋์์นด๋ฐ๋ฏธ IT๊ตญ๋น์ง์] 15์ผ์ฐจ๋ง์ ๋ค์ด์ด๋ฆฌ ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ค.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import = "java.sql.Connection" %>
<%@ page import = "java.sql.DriverManager" %>
<%@ page import = "java.sql.PreparedStatement" %>
<%@ page import = "java.sql.ResultSet" %>
<%@ page import = "java.util.*" %>
<%@ page import = "vo.*" %>
<%
// select notice_no, notice_title, createdate from notice
// notice_no๋ ์ถ๋ ฅ๋์ง๋ ์์๋ ํ์ํ๋ฏ๋ก ๊ฐ์ด ๋ถ๋ฌ์จ๋ค!
// order by createdate desc
// limit 0, 5
// 1) ๋๋ผ์ด๋ฒ ๋ก๋ฉ // mariadb๋ฅผ ์ฌ์ฉ๊ฐ๋ฅํ๊ฒ ํ๋ ๋๋ผ์ด๋ฒ ํด๋์ค ์์น์ ํ๋ค์์ ์ ๋๋ค (๊ตณ์ด ์ธ์ฐ๋ ค๊ณ ํ ํ์x)
Class.forName("org.mariadb.jdbc.Driver");
// 2) mariadb ์๋ฒ์ ์ ์, ์ ์ ์ ์ง
Connection conn = DriverManager.getConnection(
"jdbc:mariadb://127.0.0.1:3306/diary","****","****"); // ๋งค๊ฐ๋ณ์ 3๊ฐ (์ฃผ์,๊ณ์ ,์ํธ)
// 3) ์ฟผ๋ฆฌ ์์ฑ ํ ์คํ
// String sql ๋ง๋ค์ด์ ๋ฏธ๋ฆฌ ์์ฑํ๊ณ ํ๋ ๊ฒ ๋ ํธํจ
// ๋ ์ง์ ์ต๊ทผ ๊ณต์ง 5๊ฐ (๋ด๋ฆผ์ฐจ์)
String sql1 = "SELECT notice_no noticeNo, notice_title noticeTitle, createdate FROM notice ORDER BY createdate DESC limit 0, 5";
PreparedStatement stmt1 = conn.prepareStatement(sql1);
System.out.println("home stmt1: " + stmt1); // ๋๋ฒ๊น
ResultSet rs1 = stmt1.executeQuery();
// ResultSet -> ArrayList<Notice>
ArrayList<Notice> noticeList = new ArrayList<Notice>();
while(rs1.next()) {
Notice n = new Notice();
n.noticeNo = rs1.getInt("noticeNo"); // ์ด๋ฆ์ด ๋ถ์ผ์น // sql ์์ฑ์ ๋ณ๋ช
์ผ๋ก ๋ฐ์์ ํต์ผ์์ผ์ฃผ๋ ๊ฒ์ด ์ข์
n.noticeTitle = rs1.getString("noticeTitle");
n.createdate = rs1.getString("createdate");
noticeList.add(n);
}
// ์ค๋ ์ผ์ (์ค๋ฆ์ฐจ์)
String sql2 = "SELECT schedule_no scheduleNo, schedule_date scheduleDate, schedule_time scheduleTime, substr(schedule_memo,1,5) scheduleMemo, schedule_color scheduleColor FROM schedule WHERE schedule_date = CURDATE() ORDER BY schedule_time ASC";
PreparedStatement stmt2 = conn.prepareStatement(sql2);
System.out.println("home stmt2: " + stmt2); // ๋๋ฒ๊น
ResultSet rs2 = stmt2.executeQuery();
// ResultSet -> ArrayList<Schedule>
ArrayList<Schedule> scheduleList = new ArrayList<Schedule>();
while(rs2.next()) {
Schedule s = new Schedule();
s.scheduleNo = rs2.getInt("scheduleNo"); // ์ด๋ฆ์ด ๋ถ์ผ์น // sql ์์ฑ์ ๋ณ๋ช
์ผ๋ก ๋ฐ์์ ํต์ผ์์ผ์ฃผ๋ ๊ฒ์ด ์ข์
s.scheduleDate = rs2.getString("scheduleDate");
s.scheduleTime = rs2.getString("scheduleTime");
s.scheduleMemo = rs2.getString("scheduleMemo"); // ๋ฉ๋ชจ ์ ์ฒด๊ฐ ์๋ ์ผ๋ถ(5๊ธ์)๋ง ๊ฐ์ ธ์ด
s.scheduleColor = rs2.getString("scheduleColor");
scheduleList.add(s);
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>home.jsp</title>
<!-- ํฐํธ๋ณ๊ฒฝ -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Comfortaa:wght@600&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Gowun+Dodum&display=swap" rel="stylesheet">
<!-- ๋ถํธ์คํธ๋ฉ5 -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js"></script>
<style>
a {text-decoration: none;}
a:hover {text-decoration: underline;}
.center {text-align: center;}
.enFont {
font-family: 'Comfortaa', cursive;
}
.krFont {
font-family: 'Gowun Dodum', sans-serif;
}
</style>
</head>
<body>
<div class="p-5 bg-warning text-white text-center">
<h1 class="enFont">Diary Project</h1>
<p class="krFont">๊ฐ๋ฐํ๊ฒฝ: Eclipse(2022-12), JDK(17.0.6), Mariadb(10.5.19), Apache Tomcat(10.1.7), HeidiSQL<br>์ฌ์ฉ์ธ์ด: java, sql, html, css, bootstrap5</p>
</div>
<div class="container mt-3 center krFont">
<div class="center"><!-- ๋ฉ์ธ๋ฉ๋ด -->
<a class="btn btn-warning krFont" href="./home.jsp">ํ์ผ๋ก</a>
<a class="btn btn-outline-warning krFont" href="./noticeList.jsp">๊ณต์ง ๋ฆฌ์คํธ</a> <!-- ์ต๊ทผ 10๊ฐ์ฉ -->
<a class="btn btn-outline-warning krFont" href="./scheduleList.jsp">์ผ์ ๋ฆฌ์คํธ</a> <!-- ์ด๋ฒ๋ฌ ์ ์ฒด -->
</div>
<br>
<h1> ํ๋ก์ ํธ ๋ด์ฉ 💻 </h1>
<h4>
1. mariadb๋ฅผ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ ํ
์ด๋ธ ๋ง๋ค๊ธฐ<br>
2. DML(Select, Insert, Delete, Update)์ ์ด์ฉํ์ฌ ๊ณต์ง์ฌํญ ๋๋ ์ผ์ ์ <br> ์กฐํ, ์
๋ ฅ, ์ญ์ , ์์ ํ ์ ์๋ Form ํ์ด์ง์ Action ํ์ด์ง ๋ง๋ค๊ธฐ<br>
3. Calendar ๊ธฐ๋ณธAPI๋ฅผ ์ด์ฉํ์ฌ ๋ฌ๋ ฅ ๋ง๋ค๊ธฐ<br>
4. ๋ฌ๋ ฅ์ ๋ฐ์ดํฐ ํ
์ด๋ธ์ ์ฐ๊ฒฐ์์ผ ์ผ์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ<br>
4. Bootstrap5๋ฅผ ์ด์ฉํ์ฌ CSSํ๊ธฐ<br>
</h4>
<br><br>
<h1> 💛 ์ต๊ทผ ๊ณต์ง 🌻 </h1>
<table class="table">
<thead class="table-warning h5 krFont">
<tr>
<th>๊ณต์ง ์ ๋ชฉ</th>
<th>์์ฑ์ผ์</th>
</tr>
</thead>
<tbody>
<%
for(Notice n : noticeList) {
%>
<tr>
<td>
<a class="text-dark" href="./noticeOne.jsp?noticeNo=<%=n.noticeNo%>">
<!-- notice_title์ ๊ฐ์ ์ค๋ณต๋ ์ ์๊ธฐ ๋๋ฌธ์ ๊ฐ์ notice_no์ ๊ฐ์ ๋๊ธด๋ค -->
<!-- ์ฃผ์?ํค=๊ฐ -->
<%=n.noticeTitle%>
</a>
</td>
<td><%=n.createdate.substring(0, 10) %></td>
<!-- ์๋ฐ์ ๋ ์งํ์
๊ณผ ๋๊ฐ์ง ์๊ธฐ ๋๋ฌธ์ Stringํ์
์ผ๋ก ๋ฐ๋๋ค (์ฐธ์กฐํ์
๋ผ๋ฆฌ๋ ์๋ํ๋ณํ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์)-->
<!-- ์๊ฐ์ด ์ ๋๋ก ์ถ๋ ฅ๋์ง ์๊ธฐ ๋๋ฌธ์ substring ๋ฉ์๋๋ฅผ ์ด์ฉํ์ฌ ๋ ์ง๋ถ๋ถ๋ง ์ถ๋ ฅ -->
<!-- (์์ ์ธ๋ฑ์ค, ๋ ์ธ๋ฑ์ค) ์์ ์ธ๋ฑ์ค๋ถํฐ ~ ๋ ์ธ๋ฑ์ค ์๊น์ง ์ถ๋ ฅ, ์ธ๋ฑ์ค์ ์์์ 0 -->
</tr>
<%
}
%>
</tbody>
</table>
<br><br>
<h1> 💛 ์ค๋์ ์ผ์ 🌻 </h1>
<table class="table">
<thead class="table-warning h5 krFont">
<tr>
<th>๋ ์ง</th>
<th>์๊ฐ</th>
<th>์ผ์ ๋ฉ๋ชจ</th>
</tr>
</thead>
<tbody>
<%
for(Schedule s : scheduleList) {
%>
<tr>
<td>
<%
// scheduleDate์์ y,m,d ๊ฐ ๋ฐ๊ธฐ
String y = s.scheduleDate.substring(0,4);
int m = Integer.parseInt(s.scheduleDate.substring(5,7)) - 1; // ์๋ฐ API๋ 0์๋ถํฐ ์์
String d = s.scheduleDate.substring(8);
%>
<a class="text-dark" href="./scheduleListByDate.jsp?y=<%=y%>&m=<%=m%>&d=<%=d%>">
<%=s.scheduleDate%>
</a>
</td>
<td><%=s.scheduleTime.substring(0, 5)%></td>
<td>
<!-- ๋ณ๋ช
์ฌ์ฉ -->
<div style="color: <%=s.scheduleColor%>">
<%=s.scheduleMemo%>
</div>
</td>
</tr>
<%
}
%>
</tbody>
</table>
</div>
<div class="mt-5 p-4 bg-secondary text-white text-center krFont">
<p>๊ตฌ๋์์นด๋ฐ๋ฏธ GDJ 66๊ธฐ ๊นํฌ์ง</p>
</div>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import = "java.sql.Connection" %>
<%@ page import = "java.sql.DriverManager" %>
<%@ page import = "java.sql.PreparedStatement" %>
<%@ page import = "java.sql.ResultSet" %> <!-- ์กฐํํ ๋๋ง ์ฌ์ฉ -->
<%@ page import = "java.util.*" %> <!-- arraylist ์ฌ์ฉํ๊ธฐ ์ํด -->
<%@ page import = "vo.*" %> <!-- ๋ง๋ ํด๋์ค ๊ฐ์ ธ์ค๊ธฐ -->
<%
// ์์ฒญ๋ถ์
// ํ์ฌํ์ด์ง
int currentPage = 1; // ํ์ฌ ํ์ด์ง๋ 1ํ์ด์ง๋ถํฐ ์์
if(request.getParameter("currentPage") != null) { // ์ฆ, ์ด์ or ๋ค์์ ๋๋ ์ ๊ฒฝ์ฐ
currentPage = Integer.parseInt(request.getParameter("currentPage"));
}
System.out.println("currentPage: " + currentPage); // ๋๋ฒ๊น
// ํ์ด์ง๋น ์ถ๋ ฅํ ํ์ ์
int rowPerPage = 10; // ๊ณต์ง๋ฅผ ๋ช๊ฐ์ฉ ์ถ๋ ฅํ ์ง
// ์์ ํ ๋ฒํธ
int startRow = (currentPage-1)*rowPerPage;
/*
currentPage startRow(rowPerPage 10์ผ๋)
1 0 <-- (currentPage-1)*rowPerPage
2 10
3 20
4 30
*/
// int startRow = 0; // 1ํ์ด์ง ์ผ๋๋ 0์ผ๋ก ์์
// DB์ฐ๊ฒฐ ์ค์
// select notice_no, notice_title, createdate from notice
// order by createdate desc
// limit ?, ?
// ๊ฐ์ ํ์ด์ง๋ง๋ค ๊ณ์ ๋ฐ๋ ๊ฒ์ด๋ฏ๋ก ?๋ก ๋๋ค
// 1) ๋๋ผ์ด๋ฒ ๋ก๋ฉ
Class.forName("org.mariadb.jdbc.Driver");
// 2) mariadb ์๋ฒ์ ์ ์, ์ ์ ์ ์ง
Connection conn = DriverManager.getConnection("jdbc:mariadb://127.0.0.1:3306/diary","****","****");
// 3) ์ฟผ๋ฆฌ ์์ฑ ํ ์คํ
String sql = "SELECT notice_no noticeNo, notice_title noticeTitle, createdate FROM notice ORDER BY createdate DESC limit ?, ?";
PreparedStatement stmt = conn.prepareStatement(sql);
// ? ์ด 2๊ฐ
stmt.setInt(1, startRow);
stmt.setInt(2, rowPerPage);
System.out.println("noticeList sql: " + stmt); // ๋๋ฒ๊น
// ๊ณต์ง ๋ฆฌ์คํธ ์ถ๋ ฅํ๊ธฐ
ResultSet rs = stmt.executeQuery();
// ResultSetํ์
(์งํฉ ์๋ฃ๊ตฌ์กฐํ์
)์ ์ผ๋ฐ์ ์ธ ํ์
(์๋ฐ ๋ฐฐ์ด ๋๋ ๊ธฐ๋ณธAPI์์ ์๋ ์๋ฃ๊ตฌ์กฐ ํ์
์ธ List, Set, Map ๋ฑ..)์ผ๋ก ๋ฐ๊พธ๊ธฐ
// ResultSet -> ArrayList<Notice>
ArrayList<Notice> noticeList = new ArrayList<Notice>();
while(rs.next()) {
Notice n = new Notice();
n.noticeNo = rs.getInt("noticeNo"); // ์ด๋ฆ์ด ๋ถ์ผ์น // sql ์์ฑ์ ๋ณ๋ช
์ผ๋ก ๋ฐ์์ ํต์ผ์์ผ์ฃผ๋ ๊ฒ์ด ์ข์
n.noticeTitle = rs.getString("noticeTitle");
n.createdate = rs.getString("createdate");
noticeList.add(n);
}
// ๋ฐ์ดํฐ ์ด ๊ฐฏ์
// select count(*) from notice
PreparedStatement stmt2 = conn.prepareStatement("select count(*) from notice");
ResultSet rs2 = stmt2.executeQuery();
int totalRow = 0;
if(rs2.next()) {
totalRow = rs2.getInt("count(*)"); // ์ด ResultSet์ ๊ตณ์ด ๋ฐ๊ฟ ํ์ ์์ // ์ด๋ฏธ intํ์
์ธ totalRow๋ผ๋ ๋ณ์๋ก ๋ฐ๋์๊ธฐ ๋๋ฌธ
}
// ๋ง์ง๋ง ํ์ด์ง
int lastPage = totalRow / rowPerPage;
if(totalRow % rowPerPage != 0) { // ํ์ด์ง๊ฐ ๋ฑ ๋๋์ด๋จ์ด์ง์ง ์์ผ๋ฉด ํํ์ด์ง๊ฐ ๋ ํ์ํ๋ค
lastPage = lastPage + 1;
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>noticeList.jsp</title>
<!-- ํฐํธ๋ณ๊ฒฝ -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Comfortaa:wght@600&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Gowun+Dodum&display=swap" rel="stylesheet">
<!-- ๋ถํธ์คํธ๋ฉ5 -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js"></script>
<style>
a {text-decoration: none;}
a:hover {text-decoration: underline;}
.center {text-align: center;}
.enFont {
font-family: 'Comfortaa', cursive;
}
.krFont {
font-family: 'Gowun Dodum', sans-serif;
}
</style>
</head>
<body>
<div class="p-5 bg-warning text-white text-center">
<h1 class="enFont">Diary Project</h1>
<p class="krFont">๊ฐ๋ฐํ๊ฒฝ: Eclipse(2022-12), JDK(17.0.6), Mariadb(10.5.19), Apache Tomcat(10.1.7), HeidiSQL<br>์ฌ์ฉ์ธ์ด: java, sql, html, css, bootstrap5</p>
</div>
<div class="container mt-3 center">
<div><!-- ๋ฉ์ธ๋ฉ๋ด -->
<a class="btn btn-warning krFont" href="./home.jsp">ํ์ผ๋ก</a>
<a class="btn btn-outline-warning krFont" href="./noticeList.jsp">๊ณต์ง ๋ฆฌ์คํธ</a> <!-- ์ต๊ทผ 10๊ฐ์ฉ -->
<a class="btn btn-outline-warning krFont" href="./scheduleList.jsp">์ผ์ ๋ฆฌ์คํธ</a> <!-- ์ด๋ฒ๋ฌ ์ ์ฒด -->
</div>
<br>
<table class="container">
<tr>
<td> </td>
<td>
<h1 class="enFont"> 💛 notice list 🌻 </h1> <!-- ์ถ๋ ฅํ ๋ month +1 -->
</td>
<td>
<a class="btn btn-outline-secondary btn-sm krFont" href="./insertNoticeForm.jsp">๊ณต์ง์
๋ ฅ</a>
</td>
</tr>
</table>
<table class="table">
<thead class="table-warning h5 krFont">
<tr>
<th>๊ณต์ง ์ ๋ชฉ</th>
<th>์์ฑ์ผ์</th>
</tr>
</thead>
<tbody>
<%
// while(rs.next()) {
for(Notice n : noticeList) {
%>
<tr>
<td>
<a class="krFont text-dark" href="./noticeOne.jsp?noticeNo=<%=n.noticeNo%>">
<%=n.noticeTitle %>
</a>
</td>
<td class="krFont"><%=n.createdate.substring(0, 10) %></td>
</tr>
<%
}
%>
</tbody>
</table>
<%
if(currentPage > 1) { // ์ด์ ์ 1ํ์ด์ง์์๋ ์ถ๋ ฅ๋๋ฉด ์๋๋ค
%>
<a class="krFont text-dark" href="./noticeList.jsp?currentPage=<%=currentPage-1%>">์ด์ </a>
<%
}
%>
<span class="enFont"> <%=currentPage%> </span> <!-- ํ์ฌํ์ด์ง -->
<%
if(currentPage < lastPage) { // ๋ง์ง๋ง ํ์ด์ง์์๋ ๋ค์์ด ์ด๋ ฅ๋๋ฉด ์๋๋ค
%>
<a class="krFont text-dark" href="./noticeList.jsp?currentPage=<%=currentPage+1%>">๋ค์</a>
<%
}
%>
</div>
<div class="mt-5 p-4 bg-secondary text-white text-center krFont">
<p>๊ตฌ๋์์นด๋ฐ๋ฏธ GDJ 66๊ธฐ ๊นํฌ์ง</p>
</div>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>insertNoticeForm.jsp</title>
<!-- ํฐํธ๋ณ๊ฒฝ -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Comfortaa:wght@600&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Gowun+Dodum&display=swap" rel="stylesheet">
<!-- ๋ถํธ์คํธ๋ฉ5 -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js"></script>
<style>
a {text-decoration: none;}
a:hover {text-decoration: underline;}
.center {text-align: center;}
.enFont {
font-family: 'Comfortaa', cursive;
}
.krFont {
font-family: 'Gowun Dodum', sans-serif;
}
</style>
</head>
<body>
<div class="p-5 bg-warning text-white text-center">
<h1 class="enFont">Diary Project</h1>
<p class="krFont">๊ฐ๋ฐํ๊ฒฝ: Eclipse(2022-12), JDK(17.0.6), Mariadb(10.5.19), Apache Tomcat(10.1.7), HeidiSQL<br>์ฌ์ฉ์ธ์ด: java, sql, html, css, bootstrap5</p>
</div>
<div class="container mt-3 center krFont">
<div><!-- ๋ฉ์ธ๋ฉ๋ด -->
<a class="btn btn-warning" href="./home.jsp">ํ์ผ๋ก</a>
<a class="btn btn-outline-warning" href="./noticeList.jsp">๊ณต์ง ๋ฆฌ์คํธ</a> <!-- ์ต๊ทผ 10๊ฐ์ฉ -->
<a class="btn btn-outline-warning" href="./scheduleList.jsp">์ผ์ ๋ฆฌ์คํธ</a> <!-- ์ด๋ฒ๋ฌ ์ ์ฒด -->
</div>
<br>
<h1 class="krFont"> ๊ณต์ง ์์ฑํ๊ธฐ 📝 </h1>
<div class="text-bg-danger" >
<!-- ์๋ฌ๋ฌธ๊ตฌ ๋ฐ์์ -->
<%
if(request.getParameter("msg") != null) {
%>
<%=request.getParameter("msg") %>
<%
}
%>
</div>
<form action="./insertNoticeAction.jsp" method="post">
<table class="table container">
<tr>
<th class="table-warning">๊ณต์ง ์ ๋ชฉ</th>
<td>
<input type="text" name="noticeTitle">
</td>
</tr>
<tr>
<th class="table-warning">๊ณต์ง ๋ด์ฉ</th>
<td>
<textarea rows="5" cols="80" name="noticeContent"></textarea>
</td>
</tr>
<tr>
<th class="table-warning">์์ฑ์</th>
<td>
<input type="text" name="noticeWriter">
</td>
</tr>
<tr>
<th class="table-warning">๋น๋ฐ๋ฒํธ</th>
<td>
<input type="password" name="noticePw" placeholder="๋น๋ฐ๋ฒํธ๋ฅผ ์
๋ ฅํด์ฃผ์ธ์">
</td>
</tr>
</table>
<div>
<a class="btn btn-outline-secondary" href="./noticeList.jsp">๋ค๋ก</a>
<button type="submit" class="btn btn-outline-secondary">์์ฑ</button>
</div>
</form>
</div>
<div class="mt-5 p-4 bg-secondary text-white text-center krFont">
<p>๊ตฌ๋์์นด๋ฐ๋ฏธ GDJ 66๊ธฐ ๊นํฌ์ง</p>
</div>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import = "java.sql.Connection" %>
<%@ page import = "java.sql.DriverManager" %>
<%@ page import = "java.sql.PreparedStatement" %>
<%
// post๋ฐฉ์ ์ธ์ฝ๋ฉ ์ฒ๋ฆฌ (ํ๊ธ ๊นจ์ง์ง ์๊ฒ)
request.setCharacterEncoding("utf-8");
// validation (์์ฒญ ํ๋ผ๋ฏธํฐ๊ฐ ์ ํจ์ฑ ๊ฒ์ฌ)
// ๊ณต๋ฐฑ๋ ์์ง ๋ง๊ธฐ! ๊ณต๋ฐฑ์ equals๋ก
String msg = null;
if(request.getParameter("noticeTitle") == null
|| request.getParameter("noticeTitle").equals("")) {
msg = "Title is required!";
} else if(request.getParameter("noticeContent") == null
|| request.getParameter("noticeContent").equals("")) {
msg = "Content is required!";
} else if(request.getParameter("noticeWriter") == null
|| request.getParameter("noticeWriter").equals("")) {
msg = "Writer is required!";
} else if(request.getParameter("noticePw") == null
|| request.getParameter("noticePw").equals("")) {
msg = "Password is required!";
}
System.out.println("insertNoticeAction msg: " + msg); // ๋๋ฒ๊น
if(msg != null) {
response.sendRedirect("./insertNoticeForm.jsp?msg=" + msg);
return;
}
// ๊ฐ ๋ณ์๋ก ๋ฐ์๋๊ธฐ
String noticeTitle = request.getParameter("noticeTitle");
String noticeContent = request.getParameter("noticeContent");
String noticeWriter = request.getParameter("noticeWriter");
String noticePw = request.getParameter("noticePw");
// ๊ฐ๋ค์ ๋ฐ์ดํฐ ํ
์ด๋ธ์ ์
๋ ฅ(insert)
/*
insert into notice(
notice_title, notice_content, notice_writer, notice_pw, createdate, updatedate
) values(?,?,?,?,now(),now())
*/
// 1) ๋๋ผ์ด๋ฒ ๋ก๋ฉ
Class.forName("org.mariadb.jdbc.Driver");
// 2) mariadb ์๋ฒ์ ์ ์, ์ ์ ์ ์ง
Connection conn = DriverManager.getConnection("jdbc:mariadb://127.0.0.1:3306/diary","****","****");
// 3) ์ฟผ๋ฆฌ ์์ฑ ํ ์คํ
String sql = "INSERT INTO notice(notice_title, notice_content, notice_writer, notice_pw, createdate, updatedate) values(?,?,?,?,now(),now())";
PreparedStatement stmt = conn.prepareStatement(sql);
// ? ์ด 4๊ฐ (1~4)
stmt.setString(1, noticeTitle);
stmt.setString(2, noticeContent);
stmt.setString(3, noticeWriter);
stmt.setString(4, noticePw);
System.out.println("insertNoticeAction sql: " + stmt); // ๋๋ฒ๊น
// 4) ์ฟผ๋ฆฌ๊ฐ ์ ์คํ๋์๋์ง ํ์ธ
int row = stmt.executeUpdate(); // ๋๋ฒ๊น
์ฉ๋, 1์ด๋ฉด 1ํ insert์ฑ๊ณต/ 2๋ฉด 2ํ insert์ฑ๊ณต / 0์ด๋ฉด insert๋ ํ์ด ์์
// conn.commit(); // conn.setAutoCommit์ ๋ํดํธ๊ฐ์ด ture์ด๋ฏ๋ก ์๋ commit๋๊ธฐ ๋๋ฌธ์ ์๋ต
if(row == 1) {
System.out.println("insertNoticeAction ์ฟผ๋ฆฌ ์คํ ์ฑ๊ณต");
} else {
System.out.println("insertNoticeAction ์ฟผ๋ฆฌ ์คํ ์คํจ");
}
// view๊ฐ ์์ผ๋ฏ๋ก redirection
response.sendRedirect("./noticeList.jsp");
%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import = "java.sql.Connection" %>
<%@ page import = "java.sql.DriverManager" %>
<%@ page import = "java.sql.PreparedStatement" %>
<%@ page import = "java.sql.ResultSet" %>
<%@ page import = "vo.*" %>
<%
// ์ ํจ์ฑ ๊ฒ์ฌ
if(request.getParameter("noticeNo") == null){
response.sendRedirect("./noticeList.jsp");
// ๋ค์ ๋์๊ฐ์ผํ ์ฃผ์๋ฅผ ์๋ ค์ค
// ํ์ด์ง ๋จ์์ ํ๋ก๊ทธ๋จ์ด๋ฏ๋ก ๋ด๊ฐ ์ค์ ํ ๋ฃจํธ๋๋ก ๋์ด์ค์ง ์์์๋(=noticeNo์ ๊ฐ์ด null์ผ์๋) ์๊ธฐ ๋๋ฌธ์
return;
// 1) ์ฝ๋์งํ์ข
๋ฃ 2) ๋ฐํ๊ฐ์ ๋๊ฒจ์ค
}
int noticeNo = Integer.parseInt(request.getParameter("noticeNo"));
// noticeNo์ ๊ฐ ๊ฐ์ ธ์์ intํ์
์ผ๋ก ๋ฐ๊พธ๊ธฐ
// 1) ๋๋ผ์ด๋ฒ ๋ก๋ฉ
Class.forName("org.mariadb.jdbc.Driver");
// 2) db ์๋ฒ ์ ์
Connection conn = DriverManager.getConnection("jdbc:mariadb://127.0.0.1:3306/diary","****","****");
// 3) ์ฟผ๋ฆฌ ์์ฑ ํ ์คํ
// ์ฟผ๋ฆฌ๋ ํด๋น ํ์ด์ง์ ์ฌ์ฉํ๋ ์ ๋ณด์ ๋ง๊ฒ ๋ค์ ์์ฑ
String sql = "SELECT notice_no noticeNo, notice_title noticeTitle, notice_content noticeContent, notice_writer noticeWriter, createdate, updatedate FROM notice WHERE notice_no = ?";
// String sql = "select * from notice where notice_no = ?";
// ๋์ด์ค๋ notice_no์ ๊ฐ์ด ๊ณ์ ๋ฌ๋ผ์ง๋ฏ๋ก ?๋ก ์
๋ ฅ
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setInt(1, noticeNo);
// ?๋ก ์
๋ ฅ๋ notice_no์ ๊ฐ์ set๋ฉ์๋๋ฅผ ์ด์ฉํ์ฌ noticeNo๋ก ๋ฐ๊พธ๊ธฐ
// ์ฒซ๋ฒ์งธ ? = 1 // 1๋ถํฐ ์ผ๋ค
System.out.println("noticeOne sql: " + stmt); // ๋๋ฒ๊น
ResultSet rs = stmt.executeQuery();
// ResultSet -> ๋ฐ์ดํฐ ํ์
(Notice)์ ํด๋์ค๋ก ๋ฐ๊พธ๊ธฐ
Notice notice = null;
// ํ๋ฒ์ ์ฐ๋ฉด Notice notice = new Notice();
if(rs.next()) {
notice = new Notice();
notice.noticeNo = rs.getInt("noticeNo");
notice.noticeTitle = rs.getString("noticeTitle");
notice.noticeContent = rs.getString("noticeContent");
notice.noticeWriter = rs.getString("noticeWriter");
notice.createdate = rs.getString("createdate");
notice.updatedate = rs.getString("updatedate");
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>noticeOne.jsp</title>
<!-- ํฐํธ๋ณ๊ฒฝ -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Comfortaa:wght@600&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Gowun+Dodum&display=swap" rel="stylesheet">
<!-- ๋ถํธ์คํธ๋ฉ5 -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js"></script>
<style>
a {text-decoration: none;}
a:hover {text-decoration: underline;}
.center {text-align: center;}
.enFont {
font-family: 'Comfortaa', cursive;
}
.krFont {
font-family: 'Gowun Dodum', sans-serif;
}
</style>
</head>
<body>
<div class="p-5 bg-warning text-white text-center">
<h1 class="enFont">Diary Project</h1>
<p class="krFont">๊ฐ๋ฐํ๊ฒฝ: Eclipse(2022-12), JDK(17.0.6), Mariadb(10.5.19), Apache Tomcat(10.1.7), HeidiSQL<br>์ฌ์ฉ์ธ์ด: java, sql, html, css, bootstrap5</p>
</div>
<div class="container mt-3 center krFont">
<div><!-- ๋ฉ์ธ๋ฉ๋ด -->
<a class="btn btn-warning krFont" href="./home.jsp">ํ์ผ๋ก</a>
<a class="btn btn-outline-warning krFont" href="./noticeList.jsp">๊ณต์ง ๋ฆฌ์คํธ</a> <!-- ์ต๊ทผ 10๊ฐ์ฉ -->
<a class="btn btn-outline-warning krFont" href="./scheduleList.jsp">์ผ์ ๋ฆฌ์คํธ</a> <!-- ์ด๋ฒ๋ฌ ์ ์ฒด -->
</div>
<br>
<h1 class="krFont">๊ณต์ง ์์ธ๋ณด๊ธฐ 📝 </h1>
<table class="table container">
<tr>
<th class="table-warning">๊ธ๋ฒํธ</th>
<td><%=notice.noticeNo%></td>
</tr>
<tr>
<th class="table-warning">๊ณต์ง ์ ๋ชฉ</th>
<td><%=notice.noticeTitle%></td>
</tr>
<tr>
<th class="table-warning">๊ณต์ง ๋ด์ฉ</th>
<td><%=notice.noticeContent%></td>
</tr>
<tr>
<th class="table-warning">์์ฑ์</th>
<td><%=notice.noticeWriter%></td>
</tr>
<tr>
<th class="table-warning">์์ฑ์ผ์</th>
<td><%=notice.createdate.substring(0, 10)%></td>
</tr>
<tr>
<th class="table-warning">์์ ์ผ์</th>
<td><%=notice.updatedate.substring(0, 10)%></td>
</tr>
</table>
<div class="center">
<a class="btn btn-outline-secondary" href="./noticeList.jsp">๋ค๋ก</a>
<!-- ์ด๋ค ๊ฒ์๊ธ์(noticeNo๋ก ๊ตฌ๋ถ) ์ญ์ /์์ ํ ์ง -->
<a class="btn btn-outline-secondary" href="./updateNoticeForm.jsp?noticeNo=<%=noticeNo%>">์์ </a>
<a class="btn btn-outline-secondary" href="./deleteNoticeForm.jsp?noticeNo=<%=noticeNo%>">์ญ์ </a>
</div>
</div>
<div class="mt-5 p-4 bg-secondary text-white text-center krFont">
<p>๊ตฌ๋์์นด๋ฐ๋ฏธ GDJ 66๊ธฐ ๊นํฌ์ง</p>
</div>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import = "java.sql.Connection" %>
<%@ page import = "java.sql.DriverManager" %>
<%@ page import = "java.sql.PreparedStatement" %>
<%@ page import = "java.sql.ResultSet" %> <!-- ์์ ํผ๋ select ํด์ผํ๋ฏ๋ก rs ์ด์ฉ -->
<%@ page import = "vo.*" %>
<%
// ์ ํจ์ฑ ๊ฒ์ฌ
// null์ผ ๊ฒฝ์ฐ ๋ฆฌ๋ค์ด๋ ์
// ๋ฆฌํด // ์ฝ๋์งํ์ข
๋ฃ // ๋ฐํ๊ฐ์ ๋๊ธธ๋
if(request.getParameter("noticeNo") == null) {
response.sendRedirect("./noticeList.jsp");
return;
}
// null์ด ์๋๊ฒฝ์ฐ
// ๋ณ์์ ๊ฐ ๋ฐ๊ธฐ // int ํ์
์ผ๋ก ๋ณํ
int noticeNo = Integer.parseInt(request.getParameter("noticeNo"));
System.out.println("updateNoticeForm noticeNo: " + noticeNo); // ๋๋ฒ๊น
// 1) ๋๋ผ์ด๋ฒ๋ก๋ฉ
Class.forName("org.mariadb.jdbc.Driver");
// 2) db์๋ฒ์ ์ ์
Connection conn = DriverManager.getConnection("jdbc:mariadb://127.0.0.1:3306/diary","****","****");
// 3) ์ฟผ๋ฆฌ ์์ฑ
// ํด๋น no์ ๋ง๋ ํ์ด์ง ์ถ๋ ฅ == noticeOne ํ์ด์ง์ ๊ฐ์ sql
String sql = "SELECT notice_no noticeNo, notice_title noticeTitle, notice_content noticeContent, notice_writer noticeWriter, createdate, updatedate FROM notice WHERE notice_no = ?";
PreparedStatement stmt = conn.prepareStatement(sql);
// ์ฒซ๋ฒ์งธ ?์ noticeNo ๊ฐ์ set
stmt.setInt(1, noticeNo);
System.out.println("updateNoticeForm sql: " + stmt); // ๋๋ฒ๊น
ResultSet rs = stmt.executeQuery();
// ResultSet -> ๋ฐ์ดํฐ ํ์
(Notice)์ ํด๋์ค๋ก ๋ฐ๊พธ๊ธฐ
Notice notice = null;
// ํ๋ฒ์ ์ฐ๋ฉด Notice notice = new Notice();
if(rs.next()) {
notice = new Notice();
notice.noticeNo = rs.getInt("noticeNo");
notice.noticeTitle = rs.getString("noticeTitle");
notice.noticeContent = rs.getString("noticeContent");
notice.noticeWriter = rs.getString("noticeWriter");
notice.createdate = rs.getString("createdate");
notice.updatedate = rs.getString("updatedate");
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>updateNoticeForm.jsp</title>
<!-- ํฐํธ๋ณ๊ฒฝ -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Comfortaa:wght@600&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Gowun+Dodum&display=swap" rel="stylesheet">
<!-- ๋ถํธ์คํธ๋ฉ5 -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js"></script>
<style>
a {text-decoration: none;}
a:hover {text-decoration: underline;}
.center {text-align: center;}
.enFont {
font-family: 'Comfortaa', cursive;
}
.krFont {
font-family: 'Gowun Dodum', sans-serif;
}
</style>
</head>
<body>
<div class="p-5 bg-warning text-white text-center">
<h1 class="enFont">Diary Project</h1>
<p class="krFont">๊ฐ๋ฐํ๊ฒฝ: Eclipse(2022-12), JDK(17.0.6), Mariadb(10.5.19), Apache Tomcat(10.1.7), HeidiSQL<br>์ฌ์ฉ์ธ์ด: java, sql, html, css, bootstrap5</p>
</div>
<div class="container mt-3 center krFont">
<div><!-- ๋ฉ์ธ๋ฉ๋ด -->
<a class="btn btn-warning" href="./home.jsp">ํ์ผ๋ก</a>
<a class="btn btn-outline-warning" href="./noticeList.jsp">๊ณต์ง ๋ฆฌ์คํธ</a> <!-- ์ต๊ทผ 10๊ฐ์ฉ -->
<a class="btn btn-outline-warning" href="./scheduleList.jsp">์ผ์ ๋ฆฌ์คํธ</a> <!-- ์ด๋ฒ๋ฌ ์ ์ฒด -->
</div>
<br>
<h1 class="krFont"> ๊ณต์ง ์์ ํ๊ธฐ 📝 </h1>
<div class="text-bg-danger" >
<!-- ์๋ฌ๋ฌธ๊ตฌ ๋ฐ์์ -->
<%
if(request.getParameter("msg") != null) {
%>
<%=request.getParameter("msg") %>
<%
}
%>
</div>
<form action="./updateNoticeAction.jsp" method="post">
<table class="table container">
<tr>
<!-- ์์ ๋ถ๊ฐ์ง๋ง, actionํ์ด์ง์์ where์ ์ ๋ค์ด๊ฐ์ผํ๋ฏ๋ก (๊ฐ์ ๋๊ฒจ์ผํ๋ฏ๋ก) input type์ hidden์ผ๋ก ์จ๊ธฐ๊ธฐ -->
<th class="table-warning">๊ธ๋ฒํธ</th>
<td>
<%=notice.noticeNo%> <!-- ๋จ์ ์ถ๋ ฅ -->
<input type="hidden" name="noticeNo" value="<%=notice.noticeNo%>">
</td>
</tr>
<tr>
<!-- ์์ ๊ฐ๋ฅ๋, inputํ๊ทธ -->
<th class="table-warning">๊ณต์ง ์ ๋ชฉ</th>
<td>
<input type="text" name="noticeTitle" value="<%=notice.noticeTitle%>">
</td>
</tr>
<tr>
<!-- ์์ ๊ฐ๋ฅ๋, inputํ๊ทธ -->
<th class="table-warning">๊ณต์ง ๋ด์ฉ</th>
<td>
<textarea rows="5" cols="80" name="noticeContent"><%=notice.noticeContent%></textarea>
</td>
</tr>
<tr>
<!-- ์์ ๋ถ๊ฐ๋, ์ถ๋ ฅ๋ง ํ๊ธฐ -->
<th class="table-warning">์์ฑ์</th>
<td>
<%=notice.noticeWriter%>
</td>
</tr>
<tr>
<!-- ์์ ๋ถ๊ฐ๋, ์ถ๋ ฅ๋ง ํ๊ธฐ -->
<th class="table-warning">์์ฑ์ผ์</th>
<td>
<%=notice.createdate.substring(0, 10)%>
</td>
</tr>
<tr>
<!-- ์์ ๋ถ๊ฐ๋, ์ถ๋ ฅ๋ง ํ๊ธฐ -->
<th class="table-warning">์์ ์ผ์</th>
<td>
<%=notice.updatedate.substring(0, 10)%>
</td>
</tr>
<tr>
<!-- ํจ์ค์๋์
๋ ฅ๋, actionํ์ด์ง์์ where์ ์ ๋ค์ด๊ฐ์ผํ๋ฏ๋ก (๊ฐ์ ๋๊ฒจ์ผํ๋ฏ๋ก) inputํ๊ทธ -->
<th class="table-warning">๋น๋ฐ๋ฒํธ</th>
<td>
<input type="password" name="noticePw" placeholder="๋น๋ฐ๋ฒํธ๋ฅผ ์
๋ ฅํด์ฃผ์ธ์">
</td>
</tr>
</table>
<div>
<a class="btn btn-outline-secondary" href="./noticeOne.jsp?noticeNo=<%=noticeNo%>">๋ค๋ก</a>
<button type="submit" class="btn btn-outline-secondary">์์ </button>
</div>
</form>
</div>
<div class="mt-5 p-4 bg-secondary text-white text-center krFont">
<p>๊ตฌ๋์์นด๋ฐ๋ฏธ GDJ 66๊ธฐ ๊นํฌ์ง</p>
</div>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import = "java.sql.Connection" %>
<%@ page import = "java.sql.DriverManager" %>
<%@ page import = "java.sql.PreparedStatement" %>
<%
// post๋ฐฉ์ ์ธ์ฝ๋ฉ์ฒ๋ฆฌ // ํ๊ธ ๊นจ์ง์ง ์๊ฒ
request.setCharacterEncoding("utf-8");
//์ ํจ์ฑ ๊ฒ์ฌ (1)
// noticNo๊ฐ null์ด๋ฉด formํ์ด์ง๋ก ๊ฐ ์ ์์ผ๋ฏ๋ก listํ์ด์ง๋ก ๋ฆฌ๋ค์ด๋ ์
if(request.getParameter("noticeNo") == null) {
response.sendRedirect("./noticeList.jsp");
return; // ์ฝ๋์งํ์ข
๋ฃ
}
// ์ ํจ์ฑ ๊ฒ์ฌ (2)
// null ์ด๊ฑฐ๋ ๊ณต๋ฐฑ์ธ ๊ฒ์๋ฐ๋ผ ์๋ฌ๋ฉ์ธ์ง(msg) ๋ถ๊ธฐ
String msg = null;
if(request.getParameter("noticeTitle") == null
|| request.getParameter("noticeTitle").equals("")) {
msg = "Title is required!";
} else if(request.getParameter("noticeContent") == null
|| request.getParameter("noticeContent").equals("")) {
msg = "Content is required!";
} else if(request.getParameter("noticePw") == null
|| request.getParameter("noticePw").equals("")) {
msg = "Password is required!";
}
System.out.println("updateNoticeAction msg: " + msg); // ๋๋ฒ๊น
// msg ๋ฐ์ ์ ์์ ํผ ํ์ด์ง๋ก ๋ฆฌ๋ค์ด๋ ์
// msg๋ ์ถ๋ ฅ๋๊ฒ ํ๊ธฐ ์ํด ๊ฐ์ด ๋๊ฒจ์ค๋ค
if(msg != null) {
response.sendRedirect("./updateNoticeForm.jsp?noticeNo=" + request.getParameter("noticeNo") + "&msg=" + msg);
return; // ์ฝ๋์งํ์ข
๋ฃ
}
// null ์ด๊ฑฐ๋ ๊ณต๋ฐฑ์ด ์๋ ๊ฒฝ์ฐ
// ๊ฐ ๋ณ์์ ๋ฐ๊ธฐ (ํ๋ณํ)
int noticeNo = Integer.parseInt(request.getParameter("noticeNo")); // intํ์
์ผ๋ก ๋ณํ
String noticePw = request.getParameter("noticePw");
String noticeTitle = request.getParameter("noticeTitle");
String noticeContent = request.getParameter("noticeContent");
// ๋๋ฒ๊น
// ์ด๋ ํ์ด์ง์ ์ด๋ค ๋๋ฒ๊น
์ธ์ง๋ ์ ์ ์ด์ฃผ๊ธฐ
System.out.println("updateNoticeAction noticeNo: " + noticeNo);
System.out.println("updateNoticeAction noticePw: " + noticePw);
System.out.println("updateNoticeAction noticeTitle: " + noticeTitle);
System.out.println("updateNoticeAction noticeContent: " + noticeContent);
// 1) ๋๋ผ์ด๋ฒ ๋ก๋ฉ
Class.forName("org.mariadb.jdbc.Driver");
// 2) mariadb ์๋ฒ์ ์ ์, ์ ์ ์ ์ง
Connection conn = DriverManager.getConnection("jdbc:mariadb://127.0.0.1:3306/diary","****","****");
// 3) ์ฟผ๋ฆฌ ์์ฑ ํ ์คํ
// UPDATE notice SET notice_title=? , notice_content=? , updatedate=now() WHERE notice_no=? AND notice_pw=?
String sql = "UPDATE notice SET notice_title=? , notice_content=? , updatedate=now() WHERE notice_no=? AND notice_pw=?";
PreparedStatement stmt = conn.prepareStatement(sql);
// ? ์ด 4๊ฐ
stmt.setString(1, noticeTitle);
stmt.setString(2, noticeContent);
stmt.setInt(3, noticeNo); // noticeNo๋ intํ์
stmt.setString(4, noticePw);
System.out.println("updateNoticeAction sql: " + stmt); // ๋๋ฒ๊น
// ์ฟผ๋ฆฌ๊ฐ ์ ์คํ๋์๋์ง ํ์ธ
int row = stmt.executeUpdate(); // ์์ ์ฑ๊ณต์ 1, ์คํจ์ 0
System.out.println("updateNoticeAction row: " + row);
// ์์ ์ฑ๊ณต ์ ๋ฌด์ ๋ฐ๋ผ ๋ฆฌ๋ค์ด๋ ์
// = ์ฟผ๋ฆฌ ์คํ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ํ์ด์ง(View)๋ฅผ ๋ถ๊ธฐํ๋ค
if(row == 0) { // ํจ์ค์๋๊ฐ ์ผ์นํ์ง ์๋ ๊ฒฝ์ฐ
msg = "incorrect Password!";
response.sendRedirect("./updateNoticeForm.jsp?noticeNo=" + noticeNo + "&msg=" + msg);
// formํ์ด์ง๋ก // msg ๋ฐ์
} else if(row == 1) { // ์ฟผ๋ฆฌ ์คํ ์ฑ๊ณต
response.sendRedirect("./noticeOne.jsp?noticeNo="+noticeNo);
// ํ์ธ์ ์ํด ์์ธํ์ด์ง(noticeOne)๋ก
} else { // ๊ทธ ์ธ ๊ฒฝ์ฐ์ ์๋ฌ ๋ฐ์์ update๋ฌธ ์คํ์ ์ทจ์(rollback)ํด์ผ ํ๋ค
System.out.println("error ๋ฐ์ row๊ฐ : "+row);
}
%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import = "java.sql.*" %>
<%@ page import = "vo.*" %>
<%
// ์์ฒญ๊ฐ ์ ํจ์ฑ ๊ฒ์ฌ
if(request.getParameter("noticeNo") == null
|| request.getParameter("noticeNo").equals("")) {
response.sendRedirect("./noticeList.jsp");
return; // 1) ์ฝ๋์งํ์ข
๋ฃ 2) ๋ฐํ๊ฐ์ ๋๊ธธ๋
}
// ๊ฐ ๋ณ์์ ๋ฐ๊ธฐ
// int ํ์
์ด๋ฏ๋ก Integer.parseInt
int noticeNo = Integer.parseInt(request.getParameter("noticeNo"));
System.out.println("deleteNoticeForm noticeNo: " + noticeNo); // ๋๋ฒ๊น
ํ ๋ ์์ ์ค๋ช
๋ ์ ๋ฃ๊ธฐ
// 1) ๋๋ผ์ด๋ฒ ๋ก๋ฉ
Class.forName("org.mariadb.jdbc.Driver");
// 2) db ์๋ฒ ์ ์
Connection conn = DriverManager.getConnection("jdbc:mariadb://127.0.0.1:3306/diary","****","****");
// 3) ์ฟผ๋ฆฌ ์์ฑ ๋ฐ ์คํ
// ์ฟผ๋ฆฌ๋ ํด๋น ํ์ด์ง์ ์ฌ์ฉํ๋ ์ ๋ณด์ ๋ง๊ฒ ๋ค์ ์์ฑ
String sql = "SELECT notice_no noticeNo, notice_title noticeTitle, notice_content noticeContent, notice_writer noticeWriter, createdate, updatedate FROM notice WHERE notice_no = ?";
// String sql = "select * from notice where notice_no = ?";
// ๋์ด์ค๋ notice_no์ ๊ฐ์ด ๊ณ์ ๋ฌ๋ผ์ง๋ฏ๋ก ?๋ก ์
๋ ฅ
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setInt(1, noticeNo);
// ?๋ก ์
๋ ฅ๋ notice_no์ ๊ฐ์ set๋ฉ์๋๋ฅผ ์ด์ฉํ์ฌ noticeNo๋ก ๋ฐ๊พธ๊ธฐ
// ์ฒซ๋ฒ์งธ ? = 1 // 1๋ถํฐ ์ผ๋ค
System.out.println("deleteNoticeForm sql: " + stmt); // ๋๋ฒ๊น
ResultSet rs = stmt.executeQuery();
// ResultSet -> ๋ฐ์ดํฐ ํ์
(Notice)์ ํด๋์ค๋ก ๋ฐ๊พธ๊ธฐ
Notice notice = null;
// ํ๋ฒ์ ์ฐ๋ฉด Notice notice = new Notice();
if(rs.next()) {
notice = new Notice();
notice.noticeNo = rs.getInt("noticeNo");
notice.noticeTitle = rs.getString("noticeTitle");
notice.noticeContent = rs.getString("noticeContent");
notice.noticeWriter = rs.getString("noticeWriter");
notice.createdate = rs.getString("createdate");
notice.updatedate = rs.getString("updatedate");
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>deleteNoticeForm.jsp</title>
<!-- ํฐํธ๋ณ๊ฒฝ -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Comfortaa:wght@600&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Gowun+Dodum&display=swap" rel="stylesheet">
<!-- ๋ถํธ์คํธ๋ฉ5 -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js"></script>
<style>
a {text-decoration: none;}
a:hover {text-decoration: underline;}
.center {text-align: center;}
.enFont {
font-family: 'Comfortaa', cursive;
}
.krFont {
font-family: 'Gowun Dodum', sans-serif;
}
</style>
</head>
<body>
<div class="p-5 bg-warning text-white text-center">
<h1 class="enFont">Diary Project</h1>
<p class="krFont">๊ฐ๋ฐํ๊ฒฝ: Eclipse(2022-12), JDK(17.0.6), Mariadb(10.5.19), Apache Tomcat(10.1.7), HeidiSQL<br>์ฌ์ฉ์ธ์ด: java, sql, html, css, bootstrap5</p>
</div>
<div class="container mt-3 center krFont">
<div><!-- ๋ฉ์ธ๋ฉ๋ด -->
<a class="btn btn-warning" href="./home.jsp">ํ์ผ๋ก</a>
<a class="btn btn-outline-warning" href="./noticeList.jsp">๊ณต์ง ๋ฆฌ์คํธ</a> <!-- ์ต๊ทผ 10๊ฐ์ฉ -->
<a class="btn btn-outline-warning" href="./scheduleList.jsp">์ผ์ ๋ฆฌ์คํธ</a> <!-- ์ด๋ฒ๋ฌ ์ ์ฒด -->
</div>
<br>
<h1 class="krFont"> ๊ณต์ง ์ญ์ ํ๊ธฐ 📝 </h1>
<div class="text-bg-danger" >
<!-- ์๋ฌ๋ฌธ๊ตฌ ๋ฐ์์ -->
<%
if(request.getParameter("msg") != null) {
%>
<%=request.getParameter("msg") %>
<%
}
%>
</div>
<form action="./deleteNoticeAction.jsp" method="post">
<table class="table container">
<tr>
<!-- noticeNo๋ actionํ์ด์ง๋ก ๊ฐ์ ๋๊ธฐ๊ณ hidden์ผ๋ก ์จ๊ธฐ๊ธฐ -->
<th class="table-warning">๊ธ๋ฒํธ</th>
<td>
<%=notice.noticeNo%> <!-- ๋จ์ ์ถ๋ ฅ -->
<input type="hidden" name="noticeNo" value="<%=noticeNo%>">
</td>
</tr>
<tr>
<th class="table-warning">๊ณต์ง ์ ๋ชฉ</th>
<td><%=notice.noticeTitle%></td>
</tr>
<tr>
<th class="table-warning">๊ณต์ง ๋ด์ฉ</th>
<td><%=notice.noticeContent%></td>
</tr>
<tr>
<th class="table-warning">์์ฑ์</th>
<td><%=notice.noticeWriter%></td>
</tr>
<tr>
<th class="table-warning">์์ฑ์ผ์</th>
<td><%=notice.createdate.substring(0, 10)%></td>
</tr>
<tr>
<th class="table-warning">์์ ์ผ์</th>
<td><%=notice.updatedate.substring(0, 10)%></td>
</tr>
<tr>
<th class="table-warning">๋น๋ฐ๋ฒํธ</th>
<td>
<!-- action ํ์ด์ง์์ pw๊ฐ ์ผ์นํ๋์ง ํ์ธ -->
<input type="password" name="noticePw" placeholder="๋น๋ฐ๋ฒํธ๋ฅผ ์
๋ ฅํด์ฃผ์ธ์">
</td>
</tr>
</table>
<div>
<a class="btn btn-outline-secondary" href="./noticeOne.jsp?noticeNo=<%=noticeNo%>">๋ค๋ก</a>
<button type="submit" class="btn btn-outline-secondary">์ญ์ </button>
</div>
</form>
</div>
<div class="mt-5 p-4 bg-secondary text-white text-center krFont">
<p>๊ตฌ๋์์นด๋ฐ๋ฏธ GDJ 66๊ธฐ ๊นํฌ์ง</p>
</div>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import = "java.sql.Connection" %>
<%@ page import = "java.sql.DriverManager" %>
<%@ page import = "java.sql.PreparedStatement" %>
<%
// ์์ฒญ๊ฐ ์ ํจ์ฑ ๊ฒ์ฌ
String msg = null;
if(request.getParameter("noticeNo") == null
|| request.getParameter("noticeNo").equals("")) {
response.sendRedirect("./noticeList.jsp");
// ๋น์ ์์ ์ธ ์ ๊ทผ(noticeNo๊ฐ null์ด๊ฑฐ๋ ๊ณต๋ฐฑ)์ listํ์ด์ง๋ก
return;
} else if(request.getParameter("noticePw") == null
|| request.getParameter("noticePw").equals("")) {
msg = "Password is required!"; // ๋น๋ฐ๋ฒํธ๊ฐ null์ด๊ฑฐ๋ ๊ณต๋ฐฑ์ผ ๊ฒฝ์ฐ msg ๋ฐ์
}
System.out.println("deleteNoticeAction msg: " + msg); // ๋๋ฒ๊น
// msg ๋ฐ์ ์ ํด๋น form ํ์ด์ง๋ก ๋ฆฌ๋ค์ด๋ ์
// msg๋ ์ถ๋ ฅ๋๊ฒ ํ๊ธฐ ์ํด ๊ฐ์ด ๋๊ฒจ์ค๋ค
if(msg != null) {
response.sendRedirect("./deleteNoticeForm.jsp?noticeNo=" + request.getParameter("noticeNo") + "&msg=" + msg);
return;
}
// ์ ํจ์ฑ ๊ฒ์ฌ์ ๊ฑธ๋ฆฌ์ง ์์์ ๊ฒฝ์ฐ ๊ฐ ๋ณ์์ ๋ฐ๊ธฐ
int noticeNo = Integer.parseInt(request.getParameter("noticeNo"));
String noticePw = request.getParameter("noticePw");
// ๋๋ฒ๊น
// ์ด๋์์ ์ถ๋ ฅํ๋ ๊ฑด์ง๋ ๊ฐ์ด ์ ์ด์ฃผ๊ธฐ
System.out.println("deleteNoticeAction noticeNo: " + noticeNo);
System.out.println("deleteNoticeAction noticePw: " + noticePw);
// 1) ๋๋ผ์ด๋ฒ ๋ก๋ฉ
Class.forName("org.mariadb.jdbc.Driver");
// 2) mariadb ์๋ฒ์ ์ ์, ์ ์ ์ ์ง
Connection conn = DriverManager.getConnection("jdbc:mariadb://127.0.0.1:3306/diary","****","****");
// 3) ์ญ์ ์ฟผ๋ฆฌ ์์ฑ
// storeNo์ storepw๊ฐ ๋ชจ๋ ์ผ์นํด์ผํ๋ฏ๋ก and์ ์ฌ์ฉ
String sql = "DELETE FROM notice WHERE notice_no=? AND notice_pw=?";
PreparedStatement stmt = conn.prepareStatement(sql);
// ? ์ด 2๊ฐ (1~2)
stmt.setInt(1, noticeNo);
stmt.setString(2, noticePw);
System.out.println("deleteNoticeAction sql: " + stmt); // ๋๋ฒ๊น
// ์ญ์ ์ฟผ๋ฆฌ๊ฐ ์ ์คํ๋์๋์ง ํ์ธ
int row = stmt.executeUpdate(); // ์ ์ ์คํ์ 1, ์คํจ์ 0
System.out.println("deleteNoticeAction row: " + row);
if(row == 0) { // 0์ผ๊ฒฝ์ฐ ํจ์ค์๋ ์ค๋ฅ
msg = "incorrect Password!";
response.sendRedirect("./deleteNoticeForm.jsp?noticeNo=" + noticeNo + "&msg=" + msg);
} else { // 1์ผ๊ฒฝ์ฐ ์ฟผ๋ฆฌ ์คํ ์ฑ๊ณต
response.sendRedirect("./noticeList.jsp");
}
%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import = "java.util.*" %> <!-- *๋ก ๋ชจ๋ ๋ช
๋ น์ด๋ฅผ import ๊ฐ๋ฅ -->
<%@ page import = "java.sql.*" %>
<%@ page import = "vo.*" %>
<%
// if๋ฌธ๋ณด๋ค ๋จผ์ ์ ์ธ
int targetYear = 0;
int targetMonth = 0;
// ์ ํจ์ฑ ๊ฒ์ฌ // null์ด๋ฉด ์ค๋ ๋ ์ง์ ๋
์๊ฐ ์ฃผ๊ธฐ
if (request.getParameter("targetYear") == null
|| request.getParameter("targetMonth") == null) {
Calendar c = Calendar.getInstance();
targetYear = c.get(Calendar.YEAR);
targetMonth = c.get(Calendar.MONTH); // 0~11์์ด์ง๋ง ์ฌ๊ธฐ์ +1์ ํ๋ฉด ์๊ณ ๋ฆฌ์ฆ์ด ๊นจ์ง
} else { // null์ด ์๋ ๊ฒฝ์ฐ ํ๋ณํ
targetYear = Integer.parseInt(request.getParameter("targetYear"));
targetMonth = Integer.parseInt(request.getParameter("targetMonth"));
}
// ๋๋ฒ๊น
System.out.println("scheduleList targetYear: " + targetYear + "๋
");
System.out.println("scheduleList targetMonth: " + targetMonth + "์");
// ๋ณธ๊ฒฉ์ ์ผ๋ก ๋ ์ง ๊ตฌํ๊ธฐ
// ์ค๋ ๋ ์ง (์ค๋ ๋ ์ง๋ฅผ ํ์ํด์ฃผ๊ธฐ ์ํด!)
Calendar today = Calendar.getInstance();
int todayYear = today.get(Calendar.YEAR);
int todayMonth = today.get(Calendar.MONTH);
int todayDate = today.get(Calendar.DATE);
System.out.println("today: " + todayYear + "-" + todayMonth + "-" + todayDate);
// targetMonth(์ถ๋ ฅํ ์)์ 1์ผ๋ก ์
ํ
Calendar targetDay = Calendar.getInstance();
targetDay.set(Calendar.YEAR, targetYear);
targetDay.set(Calendar.MONTH, targetMonth);
targetDay.set(Calendar.DATE, 1);
// ์
ํ
ํ ๋ค, api ๋ด๋ถ์์ ์๋์ผ๋ก ๋ณ๊ฒฝ๋ ๊ฐ ๋ค์ ๋ณ์์ ๋ฃ๊ธฐ
/*
๋
23์12 ์
๋ ฅ Calendar API๋ด๋ถ์์ ๋
24 ์1๋ณ๊ฒฝ
๋
23์-1 ์
๋ ฅ Calendar API๋ด๋ถ์์ ๋
22 ์12 ๋ณ๊ฒฝ
*/
targetYear = targetDay.get(Calendar.YEAR);
targetMonth = targetDay.get(Calendar.MONTH);
System.out.println("scheduleList api ์คํ ํ targetYear: " + targetYear + "๋
");
System.out.println("scheduleList api ์คํ ํ targetMonth: " + targetMonth + "์");
// targetMonth(์ถ๋ ฅํ ์)์ 1์ผ์ ์์ผ ๊ตฌํ๊ธฐ
// DAY_OF_WEEK (์ผ์์ผ๋ถํฐ ํ ์์ผ๊น์ง 1,2,3,4,5,6,7)
int firstYoil = targetDay.get(Calendar.DAY_OF_WEEK);
System.out.println("firstYoil: " + firstYoil);
// 1์ผ ์์ ๊ณต๋ฐฑ์นธ ์ ๊ตฌํ๊ธฐ
int startBlank = firstYoil - 1;
System.out.println("startBlank: " + startBlank + "๊ฐ");
// targetMonth(์ถ๋ ฅํ ์)์ ๋ง์ง๋ง์ผ ๊ตฌํ๊ธฐ
// ActualMaximum ๊ฐ์ง๊ณ ์๋ ๋ ์ง ์ค์ ๊ฐ์ฅ ํฐ ๋ ์ง ์ฆ, ๋ง์ง๋ง ๋ ์ง
int lastDate = targetDay.getActualMaximum(Calendar.DATE);
System.out.println("lastDate: " + lastDate + "์ผ");
// ๋ง์ง๋ง์ผ ๋ค์ ๊ณต๋ฐฑ์นธ ์ ๊ตฌํ๊ธฐ
int endBlank = 0;
if((startBlank + lastDate) % 7 != 0 ) {
endBlank = 7 - ((startBlank + lastDate) % 7);
// ๋๋จธ์ง๋ ๋ง์ง๋ง ์ค์์ ์ถ๋ ฅ๋ ์นธ ์์ด๋ฏ๋ก 7์์ ๋นผ์ฃผ๋ฉด ๊ณต๋ฐฑ์นธ ์๋ฅผ ๊ตฌํ ์ ์๋ค
}
System.out.println("endBlank: " + endBlank + "๊ฐ");
// targetMonth(์ถ๋ ฅํ ์)์ ์ด td์ ๊ฐฏ์
int totalTd = startBlank + lastDate + endBlank;
System.out.println("totalTd: ์ด " + totalTd + "๊ฐ");
// ์ ์ ๋ง์ง๋ง๋ ์ง ๊ตฌํ๊ธฐ
Calendar preDate = Calendar.getInstance();
preDate.set(Calendar.YEAR, targetYear);
preDate.set(Calendar.MONTH, targetMonth-1);
int preEndDate = preDate.getActualMaximum(Calendar.DATE);
// DB date๋ฅผ ๊ฐ์ ธ์ค๋ ์๊ณ ๋ฆฌ์ฆ
// 1) ๋๋ผ์ด๋ฒ ๋ก๋ฉ
Class.forName("org.mariadb.jdbc.Driver");
// 2) mariadb ์๋ฒ์ ์ ์, ์ ์ ์ ์ง
Connection conn = DriverManager.getConnection("jdbc:mariadb://127.0.0.1:3306/diary","****","****");
// 3) ์ฟผ๋ฆฌ ์์ฑ ํ ์คํ
String sql = "SELECT schedule_no scheduleNo, DAY(schedule_date) scheduleDate, substr(schedule_memo, 1, 5) scheduleMemo, schedule_color scheduleColor FROM schedule WHERE YEAR(schedule_date)=? AND MONTH(schedule_date)=? ORDER BY MONTH(schedule_date) ASC;";
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setInt(1, targetYear);
stmt.setInt(2, targetMonth + 1); // ์๋ฐAPI์ ๋ง๋ฆฌ์DB์ ์์์์ด 0๊ณผ 1๋ก ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ +1์ ํด์ค๋ค
System.out.println("scheduleList sql: " + stmt);
ResultSet rs = stmt.executeQuery();
// ResultSet -> ArrayList<Schedule>
ArrayList<Schedule> scheduleList = new ArrayList<Schedule>();
while(rs.next()) {
Schedule s = new Schedule(); // rs์ ๊ฐฏ์๋งํผ ๋ง๋ค์ด์ง
s.scheduleNo = rs.getInt("scheduleNo");
s.scheduleDate = rs.getString("scheduleDate"); // ์ค์ ๋ก๋ day(์ผ)๋ง ๊ฐ์ ธ์ด
s.scheduleMemo = rs.getString("scheduleMemo"); // ๋ฉ๋ชจ ์ ์ฒด๊ฐ ์๋ ์ผ๋ถ(5๊ธ์)๋ง ๊ฐ์ ธ์ด
s.scheduleColor = rs.getString("scheduleColor");
scheduleList.add(s);
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>scheduleList.jsp</title>
<!-- ํฐํธ๋ณ๊ฒฝ -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Comfortaa:wght@600&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Gowun+Dodum&display=swap" rel="stylesheet">
<!-- ๋ถํธ์คํธ๋ฉ5 -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js"></script>
<style>
a {text-decoration: none;}
a:hover {text-decoration: underline;}
.center {text-align: center;}
.enFont {
font-family: 'Comfortaa', cursive;
}
.krFont {
font-family: 'Gowun Dodum', sans-serif;
}
</style>
</head>
<body>
<div class="p-5 bg-warning text-white text-center">
<h1 class="enFont">Diary Project</h1>
<p class="krFont">๊ฐ๋ฐํ๊ฒฝ: Eclipse(2022-12), JDK(17.0.6), Mariadb(10.5.19), Apache Tomcat(10.1.7), HeidiSQL<br>์ฌ์ฉ์ธ์ด: java, sql, html, css, bootstrap5</p>
</div>
<div class="container mt-3 center">
<div><!-- ๋ฉ์ธ๋ฉ๋ด -->
<a class="btn btn-warning krFont" href="./home.jsp">ํ์ผ๋ก</a>
<a class="btn btn-outline-warning krFont" href="./noticeList.jsp">๊ณต์ง ๋ฆฌ์คํธ</a> <!-- ์ต๊ทผ 10๊ฐ์ฉ -->
<a class="btn btn-outline-warning krFont" href="./scheduleList.jsp">์ผ์ ๋ฆฌ์คํธ</a> <!-- ์ด๋ฒ๋ฌ ์ ์ฒด -->
</div>
<br>
<table class="container">
<tr>
<td>
<a class="btn btn-outline-secondary btn-sm krFont" href="./scheduleList.jsp?targetYear=<%=targetYear%>&targetMonth=<%=targetMonth - 1%>">์ด์ ๋ฌ</a>
</td>
<td>
<h1 class="enFont"> 💛 <%=targetYear%>.<%=targetMonth + 1%> calendar 🌻 </h1> <!-- ์ถ๋ ฅํ ๋ month +1 -->
</td>
<td>
<a class="btn btn-outline-secondary btn-sm krFont" href="./scheduleList.jsp?targetYear=<%=targetYear%>&targetMonth=<%=targetMonth + 1%>">๋ค์๋ฌ</a>
</td>
</tr>
</table>
<table class="table">
<thead class="table-warning h5 krFont">
<tr>
<th>์ผ</th>
<th>์</th>
<th>ํ</th>
<th>์</th>
<th>๋ชฉ</th>
<th>๊ธ</th>
<th>ํ </th>
</tr>
</thead>
<tbody>
<tr>
<%
for(int i=0; i<totalTd; i+=1) { // totalTd๋งํผ ์ถ๋ ฅ
if(i != 0 && i % 7 == 0) { // 7์นธ๋ง๋ค ์ค๋ฐ๊ฟ(tr)
%>
</tr><tr>
<%
}
String tdStyle = "";
int num = i - startBlank + 1; // td์ ์ถ๋ ฅ๋๋ ์ผ
if(num > 0 && num <= lastDate) { // ์ถ๋ ฅ๋๋ ์ผ์ 1์ผ~๋ง์ง๋ง์ผ
// ์ค๋ ๋ ์ง ํ์ํด์ฃผ๊ธฐ // tdStyle ๋ณ์ ์ด์ฉ
if(todayYear == targetYear
&& todayMonth == targetMonth
&& todayDate == num) {
tdStyle ="background-color: #FFE08C;";
}
if(i % 7 == 0) { // ์ผ์์ผ
%>
<td style = "<%=tdStyle%>">
<div class="h5 enFont"> <!-- num์ผ -->
<a class="text-danger" href="./scheduleListByDate.jsp?y=<%=targetYear%>&m=<%=targetMonth%>&d=<%=num%>"><%=num%></a>
</div>
<div> <!-- ์ผ์ memo ์๋ผ์(5๊ธ์๋ง) ๋ณด์ฌ์ฃผ๊ธฐ -->
<%
for(Schedule s : scheduleList) { // ์ด๋ ๊ฒ ํ๋ฉด ์ผ๋ง๋ค ๋ชจ๋ ๊ฐ์ด ์ถ๋ ฅ๋จ
if(num == Integer.parseInt(s.scheduleDate)) { // num์ผ๊ณผ ์ผ์นํ๋ ๊ฐ๋ง ์ถ๋ ฅ๋จ // num์ intํ์
์ด๋ฏ๋ก ๋ง์ถฐ์ฃผ๊ธฐ
%>
<div class="krFont" style="color: <%=s.scheduleColor%>"><%=s.scheduleMemo%></div>
<!-- style์ color๊ฐ ๋ฃ์ด์ฃผ๊ธฐ -->
<%
}
}
%>
</div>
</td>
<%
} else if(i % 7 == 6) { // ํ ์์ผ
%>
<td style = "<%=tdStyle%>">
<div class="h5 enFont"> <!-- num์ผ -->
<a class="text-primary" href="./scheduleListByDate.jsp?y=<%=targetYear%>&m=<%=targetMonth%>&d=<%=num%>"><%=num%></a>
</div>
<div> <!-- ์ผ์ memo ์๋ผ์(5๊ธ์๋ง) ๋ณด์ฌ์ฃผ๊ธฐ -->
<%
for(Schedule s : scheduleList) { // ์ด๋ ๊ฒ ํ๋ฉด ์ผ๋ง๋ค ๋ชจ๋ ๊ฐ์ด ์ถ๋ ฅ๋จ
if(num == Integer.parseInt(s.scheduleDate)) { // num์ผ๊ณผ ์ผ์นํ๋ ๊ฐ๋ง ์ถ๋ ฅ๋จ // num์ intํ์
์ด๋ฏ๋ก ๋ง์ถฐ์ฃผ๊ธฐ
%>
<div class="krFont" style="color: <%=s.scheduleColor%>"><%=s.scheduleMemo%></div>
<!-- style์ color๊ฐ ๋ฃ์ด์ฃผ๊ธฐ -->
<%
}
}
%>
</div>
</td>
<%
} else { // ๊ทธ ๋ฐ ํ์ผ
%>
<td style = "<%=tdStyle%>">
<div class="h5 enFont"> <!-- num์ผ -->
<a class="text-dark" href="./scheduleListByDate.jsp?y=<%=targetYear%>&m=<%=targetMonth%>&d=<%=num%>"><%=num%></a>
</div>
<div> <!-- ์ผ์ memo ์๋ผ์(5๊ธ์๋ง) ๋ณด์ฌ์ฃผ๊ธฐ -->
<%
for(Schedule s : scheduleList) { // ์ด๋ ๊ฒ ํ๋ฉด ์ผ๋ง๋ค ๋ชจ๋ ๊ฐ์ด ์ถ๋ ฅ๋จ
if(num == Integer.parseInt(s.scheduleDate)) { // num์ผ๊ณผ ์ผ์นํ๋ ๊ฐ๋ง ์ถ๋ ฅ๋จ // num์ intํ์
์ด๋ฏ๋ก ๋ง์ถฐ์ฃผ๊ธฐ
%>
<div class="krFont" style="color: <%=s.scheduleColor%>"><%=s.scheduleMemo%></div>
<!-- style์ color๊ฐ ๋ฃ์ด์ฃผ๊ธฐ -->
<%
}
}
%>
</div>
</td>
<%
}
} else if(num < 1){ // 1์ผ ์
%>
<td class="text-black-50 h5 enFont">
<%=preEndDate + num%>
</td>
<%
} else { // ๋ง์ง๋ง๋ ์ดํ
%>
<td class="text-black-50 h5 enFont">
<%=num - lastDate%>
</td>
<%
}
}
%>
</tr>
</tbody>
</table>
</div>
<div class="mt-5 p-4 bg-secondary text-white text-center krFont">
<p>๊ตฌ๋์์นด๋ฐ๋ฏธ GDJ 66๊ธฐ ๊นํฌ์ง</p>
</div>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import = "java.sql.*" %> <!-- *๋ก ๋ชจ๋ ๋ช
๋ น์ด๋ฅผ import ๊ฐ๋ฅ -->
<%@ page import = "java.util.*" %>
<%@ page import = "vo.*" %>
<%
// ์ ํจ์ฑ ๊ฒ์ฌ
// y, m, d์ ๊ฐ์ด null ์ด๊ฑฐ๋ ๊ณต๋ฐฑ์ผ ๊ฒฝ์ฐ
if(request.getParameter("y") == null
|| request.getParameter("y").equals("")
|| request.getParameter("m") == null
|| request.getParameter("m").equals("")
|| request.getParameter("d") == null
|| request.getParameter("d").equals("")) {
response.sendRedirect("./scheduleList.jsp");
return;
}
// y, m, d์ ๊ฐ์ด null ์ด๊ฑฐ๋ ๊ณต๋ฐฑ์ด ์๋๊ฒฝ์ฐ ํ๋ณํ
int y = Integer.parseInt(request.getParameter("y"));
int m = Integer.parseInt(request.getParameter("m")) + 1; // ์๋ฐAPI์์๋ 0์๋ถํฐ ์์ํ๋ฏ๋ก +1์ ํด์ค๋ค
int d = Integer.parseInt(request.getParameter("d"));
// ๋๋ฒ๊น
System.out.println("scheduleListByDate y: " + y);
System.out.println("scheduleListByDate m: " + m);
System.out.println("scheduleListByDate d: " + d);
// yyyy-mm-dd ํ์์ ๋ง์ถ๊ธฐ ์ํด
String strM = m+""; // ๊ณต๋ฐฑ ๋ถ์ฌ์ ๊ฐ๋จํ๊ฒ Stringํ์
์ผ๋ก ๋ฐ๊พธ๊ธฐ
if(m<10) { // ์ผ์ ์๋ฆฌ ์๋ฉด ์์ 0 ๋ถ์ฌ์ฃผ๊ธฐ
strM = "0" + strM;
}
String strD = d+"";
if(d<10) {
strD = "0" + strD;
}
// ์ค์ผ์ค ๋ชฉ๋ก ๊ณต๊ฐ์ ์ถ๋ ฅ (์ผ๋ณ ์ค์ผ์ค ๋ฆฌ์คํธ)
// 1) ๋๋ผ์ด๋ฒ ๋ก๋ฉ
Class.forName("org.mariadb.jdbc.Driver");
// 2) mariadb ์๋ฒ์ ์ ์, ์ ์ ์ ์ง
Connection conn = DriverManager.getConnection("jdbc:mariadb://127.0.0.1:3306/diary","****","****");
// 3) ์ฟผ๋ฆฌ ์์ฑ ํ ์คํ
String sql = "SELECT schedule_no scheduleNo, schedule_date scheduleDate, schedule_time scheduleTime, schedule_memo scheduleMemo, schedule_color scheduleColor, createdate, updatedate FROM schedule WHERE schedule_date=? ORDER BY schedule_time DESC";
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setString(1, y + "-" + strM + "-" + strD); // yyyy-mm-dd ํ์์ ๋ง์ถ๊ธฐ
System.out.println("scheduleListByDate sql: " + stmt);
ResultSet rs = stmt.executeQuery();
// ResultSet -> ArrayList<Schedule>
ArrayList<Schedule> scheduleList = new ArrayList<Schedule>();
while(rs.next()) {
Schedule s = new Schedule(); // rs์ ๊ฐฏ์๋งํผ ๋ง๋ค์ด์ง
s.scheduleNo = rs.getInt("scheduleNo");
s.scheduleDate = rs.getString("scheduleDate"); // ์ค์ ๋ก๋ day(์ผ)๋ง ๊ฐ์ ธ์ด
s.scheduleTime = rs.getString("scheduleTime");
s.scheduleMemo = rs.getString("scheduleMemo"); // ๋ฉ๋ชจ ์ ์ฒด๊ฐ ์๋ ์ผ๋ถ(5๊ธ์)๋ง ๊ฐ์ ธ์ด
s.scheduleColor = rs.getString("scheduleColor");
s.createdate = rs.getString("createdate");
s.updatedate = rs.getString("updatedate");
scheduleList.add(s);
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>scheduleListByDate.jsp</title>
<!-- ํฐํธ๋ณ๊ฒฝ -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Comfortaa:wght@600&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Gowun+Dodum&display=swap" rel="stylesheet">
<!-- ๋ถํธ์คํธ๋ฉ5 -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js"></script>
<style>
a {text-decoration: none;}
a:hover {text-decoration: underline;}
.center {text-align: center;}
.enFont {
font-family: 'Comfortaa', cursive;
}
.krFont {
font-family: 'Gowun Dodum', sans-serif;
}
</style>
</head>
<body>
<div class="p-5 bg-warning text-white text-center">
<h1 class="enFont">Diary Project</h1>
<p class="krFont">๊ฐ๋ฐํ๊ฒฝ: Eclipse(2022-12), JDK(17.0.6), Mariadb(10.5.19), Apache Tomcat(10.1.7), HeidiSQL<br>์ฌ์ฉ์ธ์ด: java, sql, html, css, bootstrap5</p>
</div>
<div class="container mt-3 center krFont">
<div><!-- ๋ฉ์ธ๋ฉ๋ด -->
<a class="btn btn-warning krFont" href="./home.jsp">ํ์ผ๋ก</a>
<a class="btn btn-outline-warning krFont" href="./noticeList.jsp">๊ณต์ง ๋ฆฌ์คํธ</a> <!-- ์ต๊ทผ 10๊ฐ์ฉ -->
<a class="btn btn-outline-warning krFont" href="./scheduleList.jsp">์ผ์ ๋ฆฌ์คํธ</a> <!-- ์ด๋ฒ๋ฌ ์ ์ฒด -->
</div>
<br>
<!-- ์ค์ผ์ค ์
๋ ฅ ๊ณต๊ฐ -->
<h1> ์ผ์ ์ถ๊ฐํ๊ธฐ 📝 </h1>
<div class="text-bg-danger" >
<!-- ์๋ฌ๋ฌธ๊ตฌ ๋ฐ์์ -->
<%
if(request.getParameter("msg") != null) {
%>
<%=request.getParameter("msg") %>
<%
}
%>
</div>
<form action="./insertScheduleAction.jsp" method="post">
<table class="table container">
<tr>
<th class="table-warning">๋ ์ง</th>
<td>
<input type="date" name="scheduleDate" value="<%=y%>-<%=strM%>-<%=strD%>" readonly="readonly">
<!-- ์ ํ๋ ๋ ์ง๋ ์์ ์๋๊ฒ readonly -->
</td>
</tr>
<tr>
<th class="table-warning">์๊ฐ</th>
<td>
<input type="time" name="scheduleTime">
</td>
</tr>
<tr>
<th class="table-warning">์์</th>
<td>
<input type="color" name="scheduleColor" value="#000000">
</td>
</tr>
<tr>
<th class="table-warning">์ผ์ ๋ฉ๋ชจ</th>
<td>
<textarea cols="80" rows="3" name="scheduleMemo"></textarea>
</td>
</tr>
<tr>
<th class="table-warning">๋น๋ฐ๋ฒํธ</th>
<td>
<input type="password" name="schedulePw" placeholder="๋น๋ฐ๋ฒํธ๋ฅผ ์
๋ ฅํด์ฃผ์ธ์">
</td>
</tr>
</table>
<div>
<a class="btn btn-outline-secondary" href="./scheduleList.jsp">๋ค๋ก</a>
<button type="submit" class="btn btn-outline-secondary">์ถ๊ฐ</button>
</div>
</form>
<br><br>
<!-- ์ค์ผ์ค ๋ชฉ๋ก ๊ณต๊ฐ(์ผ๋ณ ์ค์ผ์ค ๋ฆฌ์คํธ) -->
<h1 class="krFont"> 💛 <%=y%>.<%=m%>.<%=d%> ์ผ์ ๋ชฉ๋ก 🌻</h1>
<table class="table">
<thead class="table-warning h5 krFont">
<tr>
<th>์๊ฐ</th>
<th>์ผ์ ๋ฉ๋ชจ</th>
<th>์์ฑ์ผ์</th>
<th>์์ ์ผ์</th>
<th>์์ </th>
<th>์ญ์ </th>
</tr>
</thead>
<tbody>
<%
for(Schedule s : scheduleList) {
%>
<tr>
<td><%=s.scheduleTime.substring(0, 5)%></td>
<td>
<div style="color: <%=s.scheduleColor%>">
<%=s.scheduleMemo%>
</div>
</td>
<td><%=s.createdate.substring(0, 10)%></td>
<td><%=s.updatedate.substring(0, 10)%></td>
<td>
<a class="btn btn-outline-secondary" href="./updateScheduleForm.jsp?scheduleNo=<%=s.scheduleNo%>">์์ </a>
</td>
<td>
<a class="btn btn-outline-secondary" href="./deleteScheduleForm.jsp?scheduleNo=<%=s.scheduleNo%>">์ญ์ </a>
</td>
</tr>
<%
}
%>
</tbody>
</table>
</div>
<div class="mt-5 p-4 bg-secondary text-white text-center krFont">
<p>๊ตฌ๋์์นด๋ฐ๋ฏธ GDJ 66๊ธฐ ๊นํฌ์ง</p>
</div>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import = "java.sql.*" %> <!-- *๋ก ๋ชจ๋ ๋ช
๋ น์ด๋ฅผ import ๊ฐ๋ฅ -->
<%
// ํ๊ธ ๊นจ์ง์ง ์๊ฒ ์ธ์ฝ๋ฉ
request.setCharacterEncoding("utf-8");
// ์ ํจ์ฑ ๊ฒ์ฌ(1) scheduleDate๊ฐ null์ด๊ฑฐ๋ ๊ณต๋ฐฑ์ผ ๊ฒฝ์ฐ
if(request.getParameter("scheduleDate") == null
|| request.getParameter("scheduleDate").equals("")) {
response.sendRedirect("./scheduleList.jsp"); // ๋ฆฌ์คํธํ์ด์ง๋ก
return;
}
// scheduleDate๊ฐ null์ด๊ฑฐ๋ ๊ณต๋ฐฑ์ด ์๋ ๊ฒฝ์ฐ
// ์ ํํ ๋ ์ง ๊ฐ ๋ณ์์ ๋ฃ๊ธฐ
String scheduleDate = request.getParameter("scheduleDate");
System.out.println("insertScheduleAction scheduleDate: " + scheduleDate);
// scheduleDate์ ๋ฐ์ดํฐ๋ฅผ y,m,d ๋ณ์์ ๋ฃ๊ธฐ
String y = scheduleDate.substring(0, 4);
int m = Integer.parseInt(scheduleDate.substring(5,7)) - 1; // ๋์ด์จ m์ ๊ฐ์ +1ํ ์ํ์ด๊ธฐ ๋๋ฌธ์!
String d = scheduleDate.substring(8);
// ๋๋ฒ๊น
System.out.println("insertScheduleAction y: " + y);
System.out.println("insertScheduleAction m: " + m);
System.out.println("insertScheduleAction d: " + d);
// ์ ํจ์ฑ ๊ฒ์ฌ(2) null์ด๊ฑฐ๋ ๊ณต๋ฐฑ์ผ ๊ฒฝ์ฐ
String msg = null;
if(request.getParameter("scheduleTime") == null
|| request.getParameter("scheduleTime").equals("")) {
msg = "Time is required!";
} else if(request.getParameter("scheduleColor") == null
|| request.getParameter("scheduleColor").equals("")) {
msg = "Color is required!";
} else if(request.getParameter("scheduleMemo") == null
|| request.getParameter("scheduleMemo").equals("")) {
msg = "Memo is required!";
} else if(request.getParameter("schedulePw") == null
|| request.getParameter("schedulePw").equals("")) {
msg = "Password is required!";
}
System.out.println("insertScheduleAction msg: " + msg); // ๋๋ฒ๊น
if(msg != null) {
response.sendRedirect("./scheduleListByDate.jsp?y=" + y + "&m=" + m + "&d=" + d + "&msg=" + msg);
// ์ค์ผ์ค์
๋ ฅํ์ด์ง๋ก
return;
}
// null์ด๊ฑฐ๋ ๊ณต๋ฐฑ์ด ์๋๊ฒฝ์ฐ
// ๊ฐ ๋ณ์์ ๋ฐ๊ธฐ
String scheduleTime = request.getParameter("scheduleTime");
String scheduleColor = request.getParameter("scheduleColor");
String scheduleMemo = request.getParameter("scheduleMemo");
String schedulePw = request.getParameter("schedulePw");
// ๋๋ฒ๊น
System.out.println("insertScheduleAction scheduleTime: " + scheduleTime);
System.out.println("insertScheduleAction scheduleColor: " + scheduleColor);
System.out.println("insertScheduleAction scheduleMemo: " + scheduleMemo);
System.out.println("insertScheduleAction schedulePw: " + schedulePw);
// 1) ๋๋ผ์ด๋ฒ ๋ก๋ฉ
Class.forName("org.mariadb.jdbc.Driver");
// 2) mariadb ์๋ฒ์ ์ ์, ์ ์ ์ ์ง
Connection conn = DriverManager.getConnection("jdbc:mariadb://127.0.0.1:3306/diary","****","****");
// 3) ์ฟผ๋ฆฌ ์์ฑ ํ ์คํ
String sql = "INSERT into schedule(schedule_date, schedule_time, schedule_color, schedule_memo, schedule_pw, createdate, updatedate) values(?,?,?,?,?,now(),now())";
PreparedStatement stmt = conn.prepareStatement(sql);
// ? ์ด 4๊ฐ (1~4)
stmt.setString(1, scheduleDate);
stmt.setString(2, scheduleTime);
stmt.setString(3, scheduleColor);
stmt.setString(4, scheduleMemo);
stmt.setString(5, schedulePw);
System.out.println("insertScheduleAction sql: " + stmt); // ๋๋ฒ๊น
// 4) ์ฟผ๋ฆฌ๊ฐ ์ ์คํ๋์๋์ง ํ์ธ
int row = stmt.executeUpdate(); // ์ฑ๊ณต์ 1, ์คํจ์ 0
if(row == 1) {
System.out.println("insertScheduleAction ์ฟผ๋ฆฌ ์คํ ์ฑ๊ณต");
} else {
System.out.println("insertScheduleAction ์ฟผ๋ฆฌ ์คํ ์คํจ");
}
// view๊ฐ ์์ผ๋ฏ๋ก insert ํ ๋ฆฌ๋ค์ด๋ ์
response.sendRedirect("./scheduleListByDate.jsp?y=" + y + "&m=" + m + "&d=" + d);
%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import = "java.sql.*" %> <!-- *๋ก ๋ชจ๋ ๋ช
๋ น์ด๋ฅผ import ๊ฐ๋ฅ -->
<%@ page import = "vo.*" %>
<%
// ์ ํจ์ฑ ๊ฒ์ฌ
if(request.getParameter("scheduleNo") == null
|| request.getParameter("scheduleNo").equals("")) {
response.sendRedirect("./scheduleList.jsp"); // ๋ฆฌ์คํธํ์ด์ง๋ก ๋ฆฌ๋ค์ด๋ ์
return;
}
// null์ด๊ฑฐ๋ ๊ณต๋ฐฑ์ด ์๋ ๊ฒฝ์ฐ ๊ฐ ๋ณ์์ ๋ฃ๊ธฐ(ํ๋ณํ)
int scheduleNo = Integer.parseInt(request.getParameter("scheduleNo"));
System.out.println("updateScheduleForm scheduleNo: " + scheduleNo);
// 1) ๋๋ผ์ด๋ฒ๋ก๋ฉ
Class.forName("org.mariadb.jdbc.Driver");
// 2) db์๋ฒ์ ์ ์
Connection conn = DriverManager.getConnection("jdbc:mariadb://127.0.0.1:3306/diary","****","****");
// 3) ์ฟผ๋ฆฌ ์์ฑ (์์ ํ ํ์ด์ง๋ฅผ '์กฐํ'ํด์ผํ๋ฏ๋ก select๋ฌธ ์์ฑ)
// ๋ฐ์์จ no์ ๊ฐ๊ณผ ์ผ์นํ๋(where) ๋ด์ฉ ๋ถ๋ฌ์ค๊ธฐ
String sql = "SELECT schedule_no scheduleNo, schedule_date scheduleDate, schedule_time scheduleTime, schedule_memo scheduleMemo, schedule_color scheduleColor, createdate, updatedate FROM schedule WHERE schedule_no=?";
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setInt(1, scheduleNo);
System.out.println("updateScheduleForm sql: " + stmt); // ๋๋ฒ๊น
ResultSet rs = stmt.executeQuery();
// ResultSet -> ๋ฐ์ดํฐ ํ์
(Schedule)์ ํด๋์ค๋ก ๋ฐ๊พธ๊ธฐ
Schedule schedule = null;
if(rs.next()) {
schedule = new Schedule();
schedule.scheduleNo = rs.getInt("scheduleNo");
schedule.scheduleDate = rs.getString("scheduleDate");
schedule.scheduleTime = rs.getString("scheduleTime");
schedule.scheduleMemo = rs.getString("scheduleMemo");
schedule.scheduleColor = rs.getString("scheduleColor");
schedule.createdate = rs.getString("createdate");
schedule.updatedate = rs.getString("updatedate");
}
// scheduleDate์์ y,m,d ๊ฐ ๋ฐ๊ธฐ
String y = schedule.scheduleDate.substring(0,4);
int m = Integer.parseInt(schedule.scheduleDate.substring(5,7)) - 1; // ์๋ฐ API๋ 0์๋ถํฐ ์์
String d = schedule.scheduleDate.substring(8);
System.out.println("home y: " + y);
System.out.println("home m: " + m);
System.out.println("home d: " + d);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>updateScheduleForm.jsp</title>
<!-- ํฐํธ๋ณ๊ฒฝ -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Comfortaa:wght@600&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Gowun+Dodum&display=swap" rel="stylesheet">
<!-- ๋ถํธ์คํธ๋ฉ5 -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js"></script>
<style>
a {text-decoration: none;}
a:hover {text-decoration: underline;}
.center {text-align: center;}
.enFont {
font-family: 'Comfortaa', cursive;
}
.krFont {
font-family: 'Gowun Dodum', sans-serif;
}
</style>
</head>
<body>
<div class="p-5 bg-warning text-white text-center">
<h1 class="enFont">Diary Project</h1>
<p class="krFont">๊ฐ๋ฐํ๊ฒฝ: Eclipse(2022-12), JDK(17.0.6), Mariadb(10.5.19), Apache Tomcat(10.1.7), HeidiSQL<br>์ฌ์ฉ์ธ์ด: java, sql, html, css, bootstrap5</p>
</div>
<div class="container mt-3 center krFont">
<div><!-- ๋ฉ์ธ๋ฉ๋ด -->
<a class="btn btn-warning" href="./home.jsp">ํ์ผ๋ก</a>
<a class="btn btn-outline-warning" href="./noticeList.jsp">๊ณต์ง ๋ฆฌ์คํธ</a> <!-- ์ต๊ทผ 10๊ฐ์ฉ -->
<a class="btn btn-outline-warning" href="./scheduleList.jsp">์ผ์ ๋ฆฌ์คํธ</a> <!-- ์ด๋ฒ๋ฌ ์ ์ฒด -->
</div>
<br>
<h1> ์ผ์ ์์ ํ๊ธฐ 📝 </h1>
<div class="text-bg-danger" >
<!-- ์๋ฌ๋ฌธ๊ตฌ ๋ฐ์์ -->
<%
if(request.getParameter("msg") != null) {
%>
<%=request.getParameter("msg") %>
<%
}
%>
</div>
<form action="./updateScheduleAction.jsp" method="post">
<!-- scheduleNo๋ action ํ์ด์ง์์๋ง ์ฌ์ฉ๋๋ฏ๋ก hidden์ผ๋ก ์จ๊ธฐ๊ธฐ -->
<input type="hidden" name="scheduleNo" value="<%=schedule.scheduleNo%>">
<table class="table container">
<tr>
<th class="table-warning">๋ ์ง</th>
<td>
<!-- ์์ ๊ฐ๋ฅ๋, inputํ๊ทธ-->
<input type="date" name="scheduleDate" value="<%=schedule.scheduleDate%>">
</td>
</tr>
<tr>
<!-- ์์ ๊ฐ๋ฅ๋, inputํ๊ทธ -->
<th class="table-warning">์๊ฐ</th>
<td>
<input type="time" name="scheduleTime" value="<%=schedule.scheduleTime%>">
</td>
</tr>
<tr>
<!-- ์์ ๊ฐ๋ฅ๋, inputํ๊ทธ -->
<th class="table-warning">์์</th>
<td>
<input type="color" name="scheduleColor" value="<%=schedule.scheduleColor%>">
</td>
</tr>
<tr>
<!-- ์์ ๊ฐ๋ฅ๋, inputํ๊ทธ -->
<th class="table-warning">์ผ์ ๋ฉ๋ชจ</th>
<td>
<textarea cols="80" cols="3" name="scheduleMemo"><%=schedule.scheduleMemo%></textarea>
</td>
</tr>
<tr>
<!-- ์์ ๋ถ๊ฐ๋, ์ถ๋ ฅ๋ง ํ๊ธฐ -->
<th class="table-warning">์์ฑ์ผ์</th>
<td>
<%=schedule.createdate.substring(0, 10)%>
</td>
</tr>
<tr>
<!-- ์์ ๋ถ๊ฐ๋, ์ถ๋ ฅ๋ง ํ๊ธฐ -->
<th class="table-warning">์์ ์ผ์</th>
<td>
<%=schedule.updatedate.substring(0, 10)%>
</td>
</tr>
<tr>
<!-- ํจ์ค์๋ ์
๋ ฅ๋, actionํ์ด์ง์์ where์ ์ ๋ค์ด๊ฐ์ผํ๋ฏ๋ก inputํ๊ทธ -->
<th class="table-warning">๋น๋ฐ๋ฒํธ</th>
<td>
<input type="password" name="schedulePw" placeholder="๋น๋ฐ๋ฒํธ๋ฅผ ์
๋ ฅํด์ฃผ์ธ์">
</td>
</tr>
</table>
<div>
<a class="btn btn-outline-secondary" href="./scheduleListByDate.jsp?y=<%=y%>&m=<%=m%>&d=<%=d%>">๋ค๋ก</a>
<button type="submit" class="btn btn-outline-secondary">์์ </button>
</div>
</form>
</div>
<div class="mt-5 p-4 bg-secondary text-white text-center krFont">
<p>๊ตฌ๋์์นด๋ฐ๋ฏธ GDJ 66๊ธฐ ๊นํฌ์ง</p>
</div>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import = "java.sql.*" %> <!-- *๋ก ๋ชจ๋ ๋ช
๋ น์ด๋ฅผ import ๊ฐ๋ฅ -->
<%
//ํ๊ธ ๊นจ์ง์ง ์๊ฒ ์ธ์ฝ๋ฉ
request.setCharacterEncoding("utf-8");
// ์ ํจ์ฑ ๊ฒ์ฌ (1) scheduleNo๊ฐ null์ผ ๊ฒฝ์ฐ
if(request.getParameter("scheduleNo") == null) {
response.sendRedirect("./scheduleList.jsp");
return;
}
// scheduleNo๊ฐ null์ด ์๋๊ฒฝ์ฐ ๊ฐ ๋ณ์์ ๋ฐ๊ธฐ
int scheduleNo = Integer.parseInt(request.getParameter("scheduleNo"));
// ์ ํจ์ฑ ๊ฒ์ฌ (2)
// formํ์ด์ง์์ ์
๋ ฅํ ๊ฐ์ด null์ด๊ฑฐ๋ ๊ณต๋ฐฑ์ผ ๊ฒฝ์ฐ์ ๋ฐ๋ผ msg ๋ถ๊ธฐ
String msg = null;
if(request.getParameter("scheduleDate") == null
|| request.getParameter("scheduleDate").equals("")) {
msg = "Date is required!";
} else if(request.getParameter("scheduleTime") == null
|| request.getParameter("scheduleTime").equals("")) {
msg = "Time is required!";
} else if(request.getParameter("scheduleColor") == null
|| request.getParameter("scheduleColor").equals("")) {
msg = "Color is required!";
} else if(request.getParameter("scheduleMemo") == null
|| request.getParameter("scheduleMemo").equals("")) {
msg = "Memo is required!";
} else if(request.getParameter("schedulePw") == null
|| request.getParameter("schedulePw").equals("")) {
msg = "Password is required!";
}
System.out.println("updateScheduleAction msg: " + msg); // ๋๋ฒ๊น
// msg ๋ฐ์์ ๋ฆฌ๋ค์ด๋ ์
if(msg != null) {
response.sendRedirect("./updateScheduleForm.jsp?scheduleNo=" + scheduleNo + "&msg=" + msg);
return;
}
// formํ์ด์ง์์ ์
๋ ฅํ ๊ฐ์ด null์ด๊ฑฐ๋ ๊ณต๋ฐฑ์ด ์๋ ๊ฒฝ์ฐ ๊ฐ ๋ณ์์ ๋ฐ๊ธฐ
String scheduleDate = request.getParameter("scheduleDate");
String scheduleTime = request.getParameter("scheduleTime");
String scheduleColor = request.getParameter("scheduleColor");
String scheduleMemo = request.getParameter("scheduleMemo");
String schedulePw = request.getParameter("schedulePw");
// ๋๋ฒ๊น
System.out.println("updateScheduleAction scheduleNo: " + scheduleNo);
System.out.println("updateScheduleAction scheduleDate: " + scheduleDate);
System.out.println("updateScheduleAction scheduleTime: " + scheduleTime);
System.out.println("updateScheduleAction scheduleColor: " + scheduleColor);
System.out.println("updateScheduleAction scheduleMemo: " + scheduleMemo);
System.out.println("updateScheduleAction schedulePw: " + schedulePw);
// scheduleDate์์ y,m,d ๊ฐ ๋ฐ๊ธฐ
String y = scheduleDate.substring(0,4);
int m = Integer.parseInt(scheduleDate.substring(5,7)) - 1; // ์๋ฐ API๋ 0์๋ถํฐ ์์
String d = scheduleDate.substring(8);
System.out.println("updateScheduleAction y: " + y);
System.out.println("updateScheduleAction m: " + m);
System.out.println("updateScheduleAction d: " + d);
// 1) ๋๋ผ์ด๋ฒ๋ก๋ฉ
Class.forName("org.mariadb.jdbc.Driver");
// 2) db์๋ฒ์ ์ ์
Connection conn = DriverManager.getConnection("jdbc:mariadb://127.0.0.1:3306/diary","****","****");
// 3) ์ฟผ๋ฆฌ ์์ฑ
String sql = "UPDATE schedule SET schedule_date=?, schedule_time=?, schedule_color=?, schedule_memo=?, updatedate=now() WHERE schedule_no=? AND schedule_pw=?";
PreparedStatement stmt = conn.prepareStatement(sql);
// ? ์ด 5๊ฐ
stmt.setString(1, scheduleDate);
stmt.setString(2, scheduleTime);
stmt.setString(3, scheduleColor);
stmt.setString(4, scheduleMemo);
stmt.setInt(5, scheduleNo); // noticeNo๋ intํ์
stmt.setString(6, schedulePw);
System.out.println("updateScheduleAction sql: " + stmt); // ๋๋ฒ๊น
// ์ฟผ๋ฆฌ๊ฐ ์ ์คํ๋์๋์ง ํ์ธํ๊ธฐ
int row = stmt.executeUpdate(); // ์ฑ๊ณต์ 1, ์คํจ์ 0
System.out.println("updateScheduleAction row: " + row);
// ์ฟผ๋ฆฌ ์คํ ๊ฒฐ๊ณผ(row๊ฐ)์ ๋ฐ๋ผ ๋ฆฌ๋ค์ด๋ ์
if(row == 0) { // 0์ผ ๊ฒฝ
์ฐ ํจ์ค์๋ ์ค๋ฅ
msg = "incorrect Password!";
response.sendRedirect("./updateScheduleForm.jsp?scheduleNo=" + scheduleNo + "&msg=" + msg);
// msg์ ํจ๊ป formํ์ด์ง๋ก
} else if(row == 1) { // 1์ผ ๊ฒฝ์ฐ ์ฟผ๋ฆฌ ์คํ ์ฑ๊ณต
response.sendRedirect("./scheduleListByDate.jsp?y=" + y + "&m=" + m + "&d=" + d);
// ์์ ๋ ํ๋ฉด ํ์ธ์ ์ํด ListByDateํ์ด์ง๋ก
}
%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import = "java.sql.*" %>
<%@ page import = "vo.*" %>
<%
//์ ํจ์ฑ ๊ฒ์ฌ
if(request.getParameter("scheduleNo") == null
|| request.getParameter("scheduleNo").equals("")) {
response.sendRedirect("./scheduleList.jsp"); // ๋ฆฌ์คํธํ์ด์ง๋ก ๋ฆฌ๋ค์ด๋ ์
return;
}
//null์ด๊ฑฐ๋ ๊ณต๋ฐฑ์ด ์๋ ๊ฒฝ์ฐ ๊ฐ ๋ณ์์ ๋ฃ๊ธฐ(ํ๋ณํ)
int scheduleNo = Integer.parseInt(request.getParameter("scheduleNo")); // no๋ intํ์
System.out.println("updateScheduleForm scheduleNo: " + scheduleNo);
// 1) ๋๋ผ์ด๋ฒ๋ก๋ฉ
Class.forName("org.mariadb.jdbc.Driver");
// 2) db์๋ฒ์ ์ ์
Connection conn = DriverManager.getConnection("jdbc:mariadb://127.0.0.1:3306/diary","****","****");
// 3) ์ฟผ๋ฆฌ ์์ฑ (์์ ํ ํ์ด์ง๋ฅผ '์กฐํ'ํด์ผํ๋ฏ๋ก select๋ฌธ ์์ฑ)
// ๋ฐ์์จ no์ ๊ฐ๊ณผ ์ผ์นํ๋(where) ๋ด์ฉ ๋ถ๋ฌ์ค๊ธฐ
String sql = "SELECT schedule_no scheduleNo, schedule_date scheduleDate, schedule_time scheduleTime, schedule_memo scheduleMemo, schedule_color scheduleColor, createdate, updatedate FROM schedule WHERE schedule_no=?";
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setInt(1, scheduleNo);
System.out.println("updateScheduleForm sql: " + stmt); // ๋๋ฒ๊น
ResultSet rs = stmt.executeQuery();
// ResultSet -> ๋ฐ์ดํฐ ํ์
(Schedule)์ ํด๋์ค๋ก ๋ฐ๊พธ๊ธฐ
Schedule schedule = null;
if(rs.next()) {
schedule = new Schedule();
schedule.scheduleNo = rs.getInt("scheduleNo");
schedule.scheduleDate = rs.getString("scheduleDate");
schedule.scheduleTime = rs.getString("scheduleTime");
schedule.scheduleMemo = rs.getString("scheduleMemo");
schedule.scheduleColor = rs.getString("scheduleColor");
schedule.createdate = rs.getString("createdate");
schedule.updatedate = rs.getString("updatedate");
}
// scheduleDate์์ y,m,d ๊ฐ ๋ฐ๊ธฐ
String y = schedule.scheduleDate.substring(0,4);
int m = Integer.parseInt(schedule.scheduleDate.substring(5,7)) - 1; // ์๋ฐ API๋ 0์๋ถํฐ ์์
String d = schedule.scheduleDate.substring(8);
System.out.println("home y: " + y);
System.out.println("home m: " + m);
System.out.println("home d: " + d);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>deleteScheduleForm.jsp</title>
<!-- ํฐํธ๋ณ๊ฒฝ -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Comfortaa:wght@600&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Gowun+Dodum&display=swap" rel="stylesheet">
<!-- ๋ถํธ์คํธ๋ฉ5 -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js"></script>
<style>
a {text-decoration: none;}
a:hover {text-decoration: underline;}
.center {text-align: center;}
.enFont {
font-family: 'Comfortaa', cursive;
}
.krFont {
font-family: 'Gowun Dodum', sans-serif;
}
</style>
</head>
<body>
<div class="p-5 bg-warning text-white text-center">
<h1 class="enFont">Diary Project</h1>
<p class="krFont">๊ฐ๋ฐํ๊ฒฝ: Eclipse(2022-12), JDK(17.0.6), Mariadb(10.5.19), Apache Tomcat(10.1.7), HeidiSQL<br>์ฌ์ฉ์ธ์ด: java, sql, html, css, bootstrap5</p>
</div>
<div class="container mt-3 center krFont">
<div><!-- ๋ฉ์ธ๋ฉ๋ด -->
<a class="btn btn-warning" href="./home.jsp">ํ์ผ๋ก</a>
<a class="btn btn-outline-warning" href="./noticeList.jsp">๊ณต์ง ๋ฆฌ์คํธ</a> <!-- ์ต๊ทผ 10๊ฐ์ฉ -->
<a class="btn btn-outline-warning" href="./scheduleList.jsp">์ผ์ ๋ฆฌ์คํธ</a> <!-- ์ด๋ฒ๋ฌ ์ ์ฒด -->
</div>
<br>
<h1> ์ผ์ ์ญ์ ํ๊ธฐ 📝 </h1>
<div class="text-bg-danger" >
<!-- ์๋ฌ๋ฌธ๊ตฌ ๋ฐ์์ -->
<%
if(request.getParameter("msg") != null) {
%>
<%=request.getParameter("msg") %>
<%
}
%>
</div>
<form action="./deleteScheduleAction.jsp" method="post">
<!-- scheduleNo๋ action ํ์ด์ง๋ก ๊ฐ์ ๋๊ธฐ๊ณ hidden์ผ๋ก ์จ๊ธฐ๊ธฐ -->
<input type="hidden" name="scheduleNo" value="<%=scheduleNo%>">
<table class="table container">
<tr>
<th class="table-warning">๋ ์ง</th>
<td>
<input type="date" name="scheduleDate" value="<%=schedule.scheduleDate%>" readonly="readonly">
</td>
</tr>
<tr>
<th class="table-warning">์๊ฐ</th>
<td>
<input type="time" value="<%=schedule.scheduleTime%>" readonly="readonly">
</td>
</tr>
<tr>
<th class="table-warning">์์</th>
<td>
<input type="color" value="<%=schedule.scheduleColor%>" disabled="disabled">
</td>
</tr>
<tr>
<th class="table-warning">์ผ์ ๋ฉ๋ชจ</th>
<td><%=schedule.scheduleMemo%></td>
</tr>
<tr>
<th class="table-warning">์์ฑ์ผ์</th>
<td><%=schedule.createdate.substring(0, 10)%></td>
</tr>
<tr>
<th class="table-warning">์์ ์ผ์</th>
<td><%=schedule.updatedate.substring(0, 10)%></td>
</tr>
<tr>
<!-- ํจ์ค์๋ ์
๋ ฅ๋ -->
<th class="table-warning">๋น๋ฐ๋ฒํธ</th>
<td>
<input type="password" name="schedulePw" placeholder="๋น๋ฐ๋ฒํธ๋ฅผ ์
๋ ฅํด์ฃผ์ธ์">
</td>
</tr>
</table>
<div>
<a class="btn btn-outline-secondary" href="./scheduleListByDate.jsp?y=<%=y%>&m=<%=m%>&d=<%=d%>">๋ค๋ก</a>
<button type="submit" class="btn btn-outline-secondary">์ญ์ </button>
</div>
</form>
</div>
<div class="mt-5 p-4 bg-secondary text-white text-center krFont">
<p>๊ตฌ๋์์นด๋ฐ๋ฏธ GDJ 66๊ธฐ ๊นํฌ์ง</p>
</div>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import = "java.sql.*" %>
<%
// ์ ํจ์ฑ ๊ฒ์ฌ
String msg = null;
if(request.getParameter("scheduleNo") == null
|| request.getParameter("scheduleNo").equals("")
|| request.getParameter("scheduleDate") == null
|| request.getParameter("scheduleDate").equals("")) {
response.sendRedirect("./scheduleList.jsp");
// null์ด๊ฑฐ๋ ๊ณต๋ฐฑ์ผ ๊ฒฝ์ฐ ๋ฆฌ์คํธํ์ด์ง๋ก
return;
} else if(request.getParameter("schedulePw") == null
|| request.getParameter("schedulePw").equals("")) {
msg = "Password is required!";
// ๋น๋ฐ๋ฒํธ๊ฐ null์ด๊ฑฐ๋ ๊ณต๋ฐฑ์ผ ๊ฒฝ์ฐ msg ๋ฐ์
}
System.out.println("deleteScheduleAction msg: " + msg); // ๋๋ฒ๊น
// ๋น๋ฐ๋ฒํธ๊ฐ null์ด๊ฑฐ๋ ๊ณต๋ฐฑ์ผ ๊ฒฝ์ฐ (msg ๋ฐ์) ๋ฆฌ๋ค์ด๋ ์
// msg๋ ์ถ๋ ฅ๋๊ฒ ํ๊ธฐ ์ํด ๊ฐ์ด ๋๊ฒจ์ค๋ค
if(msg != null) {
response.sendRedirect("./deleteScheduleForm.jsp?scheduleNo=" + request.getParameter("scheduleNo") + "&scheduleDate=" + request.getParameter("scheduleDate") + "&msg=" + msg);
return;
}
// ๊ฐ ๋ณ์์ ๋ฐ๊ธฐ
int scheduleNo = Integer.parseInt(request.getParameter("scheduleNo")); // no๋ intํ์
String scheduleDate = request.getParameter("scheduleDate");
String schedulePw = request.getParameter("schedulePw");
System.out.println("deleteScheduleAction scheduleNo: " + scheduleNo);
System.out.println("deleteScheduleAction scheduleDate: " + scheduleDate);
System.out.println("deleteScheduleAction schedulePw: " + schedulePw);
// scheduleDate์์ y,m,d ๊ฐ ๋ฐ๊ธฐ
String y = scheduleDate.substring(0,4);
int m = Integer.parseInt(scheduleDate.substring(5,7)) - 1; // ์๋ฐ API๋ 0์๋ถํฐ ์์
String d = scheduleDate.substring(8);
System.out.println("deleteScheduleAction y: " + y);
System.out.println("deleteScheduleAction m: " + m);
System.out.println("deleteScheduleAction d: " + d);
// 1) ๋๋ผ์ด๋ฒ๋ก๋ฉ
Class.forName("org.mariadb.jdbc.Driver");
// 2) db์๋ฒ์ ์ ์
Connection conn = DriverManager.getConnection("jdbc:mariadb://127.0.0.1:3306/diary","****","****");
// 3) ์ฟผ๋ฆฌ ์์ฑ
String sql = "DELETE FROM schedule WHERE schedule_no=? AND schedule_pw=?";
PreparedStatement stmt = conn.prepareStatement(sql);
// ? ์ด 2๊ฐ
stmt.setInt(1, scheduleNo);
stmt.setString(2, schedulePw);
System.out.println("deleteScheduleAction sql: " + stmt);
// ์ฟผ๋ฆฌ๊ฐ ์ ์คํ๋์๋์ง ํ์ธํ๊ธฐ
int row = stmt.executeUpdate(); // ์ฑ๊ณต์ 1, ์คํจ์ 0
System.out.println("deleteScheduleAction row: " + row);
// ์ฟผ๋ฆฌ ์คํ ๊ฒฐ๊ณผ(row๊ฐ)์ ๋ฐ๋ผ ๋ฆฌ๋ค์ด๋ ์
if(row == 0) { // 0์ผ ๊ฒฝ์ฐ ํจ์ค์๋ ์ค๋ฅ
msg = "incorrect schedulePw!";
response.sendRedirect("./deleteScheduleForm.jsp?scheduleNo=" + scheduleNo + "&scheduleDate=" + scheduleDate + "&msg=" + msg);
// msg์ ํจ๊ป formํ์ด์ง๋ก
} else if(row == 1) { // 1์ผ ๊ฒฝ์ฐ ์ฟผ๋ฆฌ ์คํ ์ฑ๊ณต
response.sendRedirect("./scheduleListByDate.jsp?y=" + y + "&m=" + m + "&d=" + d);
// ์ญ์ ์ฑ๊ณต์ ํ์ธ์ ์ํด ํด๋น ListByDateํ์ด์ง๋ก
}
%>
์ฒ์์ผ๋ก ์ด๋ ํ ๊ฒฐ๊ณผ๋ฌผ์ ๋ง๋ค์ด๋ธ ๊ฒ ๊ฐ์์ ์ ๋ง ๋ฟ๋ฏํ๋ค. ์๊ฐ๊ณผ ๋
ธ๋ ฅ์ ๋ค์ฌ์ ๋ด๊ฐ ์ํ๋๋๋ก ๊ตฌํํด๊ฐ๋ ๊ณผ์ ์ ์ ๋๋ก ๊ฒฝํํด๋ณด๋ฉด์, ๊ฐ๋ฐ์๋ผ๋ ์ง์ข
์ด ์ด๋ค ์ง์ข
์ธ์ง์ ๋ํด์๋ ๋ง์ด ๋๋ผ๊ฒ๋ ๊ธฐ๊ฐ์ด์๋ค. ๋น์ทํ๊ฑฐ๋ ๊ฐ์ ๊ธฐ๋ฅ์ด์ด๋ ์ฃผ๋ณ ์ฌ๋๋ค์ ์ฝ๋๋ฅผ ๋ณด๋ฉด ๋ชจ๋ ๊ฐ์๊ฐ์์ด์๋ค. ์ฝ๋์ ์ ๋ต์ ์๋ค๋ ์๊ฐ์ด ๋ค์๋ค. ๋๋ ์ ์ด๋ด๊นํ๋ฉฐ ์กฐ๊ธํดํ๊ฑฐ๋ ๋ถ์ํดํ์ง ๋ง๊ณ ์ฒ์ฒํ ๋๋ง์ ์คํ์ผ์ ๋ง๋ค์ด๊ฐ๋ ๊ฒ์ด ์ค์ํ๋ค๊ณ ๋ค์ ํ๋ฒ ๋ค์งํ๋ค. ๋ฌผ๋ก ๊ทธ๋ฌ๊ธฐ ์ํด์๋ ๊พธ์คํ ๊ณต๋ถ์ ์ฐ์ต์ด ํ์์ผ ๊ฒ์ด๋ค! ๐