** 현재 날짜 구하는 메서드 삭제 해보기
//등록 날짜를 위한 현재 날짜 반환 메서드
public String getDate() {
String sql = "SELECT NOW()";
try {
PreparedStatement pst = conn.prepareStatement(sql);
rs = pst.executeQuery();
if(rs.next()) {
return rs.getString(1);
}
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
- 이건 등록 날짜 시간을 위해 db의 함수를 이용하는 메서드였는데 이렇게 따로 메서드를 만들기보다는 그냥 insert문에 직접 함수를 꽂아주는 것이 좋다고 생각해서 수정하였다.
- 물론 모든 DB가 NOW() 함수를 가지고 있는 것은 아닐테고 프로젝트 중간에 DBMS를 바뀌는 경우에 유지 보수상 이렇게 하는 게 용이하겠지만 그럴 일은 별로 없을 것 같다는 생각이기도 하고 DB에 자주 접근하는 게 괜찮은가 싶은 생각이기도 했다.
- 위 코드 대신
public int write(String bbstitle, String userID, String content) {
String sql = "INSERT INTO BBS VALUES( ? , ? , ? , now() , ? , ?) ";
try {
PreparedStatement pst = conn.prepareStatement(sql);
pst.setInt(1, getNext());
pst.setString(2, bbstitle);
pst.setString(3, userID);
//pst.setString(4, getDate());
//pst.setString(5, content);
//pst.setInt(6, 1);
pst.setString(4, content);
pst.setInt(5, 1);
//insert는 업데이트시 1이상의 수를 반환함.
return pst.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}
return -1; //데이터베이스 오류
}
- now()함수를 insert문에 바로 꽂아주었다. 잘 작동된다.
** 로그인 없이 글쓰기 페이지 접근 불가 추가하기
//login이 안됐을 경우
if(userID == null){
PrintWriter script = response.getWriter();
script.println("<script>");
script.println("alert('먼저 로그인 하세요.')");
script.println("location.href = 'login.jsp'");
script.println("</script>");
}
- 위의 코드가 writeAction.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">
<!-- css를 참조하는 링크. bootstrap.css 경로를 링크한다.-->
<link rel="stylesheet" href="css/bootstrap.css">
<title>Hello World!</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>");
}
%>
<!-- 네비게이션 바 -->
<nav class="navbar navbar-default">
<div class="navbar-header">
<!-- 햄버거 버튼 큰화면에서는 x 좁은 화면에서는 o -->
<button type="button" class="navbar-toggle collapsed"
data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"
aria-expanded="false">
<!-- 햄버거의 갯수. 3개라서 3개. 1개면 1개 -->
<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 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="logoutAction.jsp">로그아웃</a></li>
</ul>
</li>
</ul>
<%
}
%>
</div>
</nav>
<!-- 게시판 부분 -->
<div class="container">
<div class="row">
<form action="writeAction.jsp" method="post">
<table class = "table table-striped" style="text-align : center; border: 1px solid #dddddd">
<thead> <!-- 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>
</body>
<!-- Jquery를 해당 주소에서 가져와 사용할 수 있게 해주는 스크립트 -->
<script src="http://code.jquery.com/jquery-3.1.1.min.js"></script>
<!-- 해당 경로의 부스트스트랩의 자바스크립트를 사용하게 해주는 스크립트 -->
<script src="js/bootstrap.js"></script>
</html>
- 그래서 세션 확인을 writeAction.jsp가 아닌 wirte.jsp 접근할 때, 그러니까 글쓰기 버튼을 눌렀을 때 하여 로그인없이 글을 못쓰게, 로그인 하도록 유도하였다. 잘 된다.
'웹 개발 한걸음' 카테고리의 다른 글
[JDBC] 용어 정리 해보기 (0) | 2021.03.12 |
---|---|
[JSP] 11강 - 게시글 목록 구현 (0) | 2021.03.12 |
[JSP] 9강 - 게시판 데이터 베이스 구축 (0) | 2021.03.10 |
[JSP] 8강 - 게시판 화면 만들기 (0) | 2021.03.10 |
[JSP] 7강 - 세션, 로그아웃 그리고 메인 페이지 만들기 (0) | 2021.03.09 |