728x90
원래 로그인 화면이다.
로그인을 하면 옆에 게시판 기능이 작동하도록 해보자.
( 나중에 메뉴에서 로그인 되면 로그인 버튼은 없어지도록 해야 겠다 )
위의 모양을 만들려면 아래의 코드처럼 짜면 된다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import= "java.util.List" %>
<%@ page import= "java.util.HashMap"%>
<%@ page import= "java.util.Map"%>
<%@ page import= "model1.board.BoardDAO"%>
<%@ page import= "model1.board.BoardDTO"%>
<%@include file="./signUp/sessionLogin.jsp" %>
<%
BoardDAO dao = new BoardDAO(application);
Map<String, Object> param = new HashMap<String, Object>();
String searchField = request.getParameter("searchField");
String searchWord = request.getParameter("searchWord");
if(searchWord != null){
param.put("searchField", searchField);
param.put("searchWord", searchWord);
}
int totalCount = dao.selectCount(param);
List<BoardDTO> boardLists = dao.selectList(param);
dao.close();
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">
<script
src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.3/jquery.min.js"></script>
</head>
<body>
<jsp:include page="menu.jsp"></jsp:include>
<%!String greeting = "게시물";%>
<div class="jumbotron">
<div class="container">
<h1 class="display-3">
<%=greeting%>
</h1>
</div>
</div>
<div class="container">
<!-- 검색홈 -->
<h2 class="h2">목록 보기(List)</h2>
<form method="get">
<table class="table">
<tr>
<td align="center"><select name="searchField">
<option value="title">제목</option>
<option value="submit">내용</option>
</select> <input type="text" name="searchWord"> <input type="submit"
value="검색하기" class="btn btn-primary"></td>
</tr>
</table>
</form>
<!-- 게시물 목록 테이블 (표) -->
<table class="table">
<tr>
<th width="10%">번호</th>
<th width="50%">제목</th>
<th width="15%">작성자</th>
<th width="10%">조회수</th>
<th width="15%">작성일</th>
</tr>
<!-- 목폭의 내용 -->
<%
if (boardLists.isEmpty()) {
%>
<tr>
<td colspan="5" align="center">등록된 게시물이 없습니다^^*.</td>
</tr>
<%
} else {
int virtualNum = 0;
for (BoardDTO dto : boardLists) {
virtualNum = totalCount--;
%>
<tr align="center">
<td><%=virtualNum%></td>
<td align="left"><a href="View.jsp?num=<%=dto.getNum()%>"><%=dto.getTitle()%></a></td>
<td align="center"><%=dto.getId()%></td>
<td align="center"><%=dto.getVisitcount()%></td>
<td align="center"><%=dto.getPostdate()%></td>
</tr>
<%
}
}
%>
</table>
<!-- 목록 하단의 [글쓰기] 버튼 -->
<table class="table">
<tr align="right">
<td>
<button type="button" class="btn btn-primary"
onclick="location.href='Write.jsp';">글쓰기</button>
</td>
</tr>
</table>
</div>
</body>
</html>
이 역시 DTO와 DAO가 필요하다.
아래는 DTO 이다.
package model1.board;
public class BoardDTO {
private String num;
private String title;
private String content;
private String id;
private java.sql.Date postdate;
private String visitcount;
private String name;
public String getNum() {
return num;
}
public void setNum(String num) {
this.num = num;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public java.sql.Date getPostdate() {
return postdate;
}
public void setPostdate(java.sql.Date postdate) {
this.postdate = postdate;
}
public String getVisitcount() {
return visitcount;
}
public void setVisitcount(String visitcount) {
this.visitcount = visitcount;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
아래는 DAO이다.
package model1.board;
import javax.servlet.ServletContext;
import common.JDBConnect;
import java.util.List;
import java.util.Map;
import java.util.Vector;
public class BoardDAO extends JDBConnect{
public BoardDAO(ServletContext application) {
super(application);
}
public int selectCount(Map<String, Object> map) {
int totalCount = 0;
String query = "SELECT COUNT(*) FROM board";
// 스테트먼트 보낼 변수 query 스트링 타입으로
if(map.get("searchWord") != null) {
//만약에 맵에 딸려온 값이 있으면(!=null)쿼리문을 추가시켜준다.
query += " WHERE " + map.get("searchField") + " "
+ "LIKE '%" + map.get("searchWord") + "%'";
}
try {
stmt = con.createStatement();
rs = stmt.executeQuery(query);
rs.next();
totalCount = rs.getInt(1);
}
catch (Exception e) {
System.out.println("게시물 수를 구하는 중 예외 발생");
e.printStackTrace();
}
return totalCount;
}
public List<BoardDTO> selectList(Map<String, Object> map){
List<BoardDTO> bbs = new Vector<BoardDTO>();
String query = "SELECT * FROM board";
if(map.get("searchWord") != null ) {
query += " WHERE " + map.get("searchField") + " "
+ " LIKE '%" + map.get("searchWord") + "%' ";
}
//searchWord searchField는 키값으로 맵에 공간 만들어서 계속 꺼내서 사용하는거고
//jsp에서 입력 받은 값을 워드 필드 각각 키에 해당하는 공간에 value로 저장,
//DAO에서 map.get(키값)으로 해당 공간에 있던 벨류 꺼내서 쿼리에 넣어서 사용
query += " ORDER BY num DESC ";
try {
stmt = con.createStatement();
rs = stmt.executeQuery(query);
while(rs.next()) {
BoardDTO dto = new BoardDTO();
dto.setNum(rs.getString("num"));
dto.setTitle(rs.getString("title"));
dto.setContent(rs.getString("content"));
dto.setPostdate(rs.getDate("postdate"));
dto.setId(rs.getString("id"));
dto.setVisitcount(rs.getString("visitcount"));
bbs.add(dto);
}
}catch (Exception e) {
System.out.println("게시물 조회 중 예외 발생");
e.printStackTrace();
}
return bbs;
}
}
( DAO 출처 : 선영 누나 )
를 넣어서 작동을 확인한다.
이 역시 게시판도 로그인을 해야 쓸수 있는 기능이므로
페이지에
<%@include file="./signUp/sessionLogin.jsp" %>
를 입력하여 페이지 접근을 막는다.
이제부터 모든 코드들은 노션에 개인 저장 할 것이다.
코드 전체를 올리는 식의 공부는 좋지 않은 듯 하다.
간단한 거라도 직접 만들어 봐야겠다고 다짐 했다.
728x90
'국비교육 [完] > WebMarket' 카테고리의 다른 글
프로젝트 배너 (0) | 2023.05.11 |
---|---|
10. 로그아웃 (0) | 2023.03.09 |
9. 상품 페이지 데이터 베이스 (0) | 2023.03.09 |
8. 로그인이 안되어 있으면 로그인 창으로 (0) | 2023.03.09 |
7. 로그인 유지 기능 (0) | 2023.03.09 |