오늘의코드
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Index</title>
</head>
<body>
<jsp:forward page="list.do" />
</body>
</html>
<%@page import="edu.web.domain.BoardVO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<%
BoardVO boardvo = (BoardVO) request.getAttribute("boardvo");
%>
<title>게시글 수정</title>
</head>
<body>
<form action="update.do" method="post">
<input type="hidden" name="boardId" value="<%=boardvo.getBoardId() %>">
<input type="hidden" name="memberId" value="<%=boardvo.getMemberId() %>">
<h2>게시글 수정 <button onclick="location.href='detail.do?boardId=<%=boardvo.getBoardId() %>'">뒤로가기</button></h2>
<label for="boardtitle">게시글 제목:</label>
<input type="text" id="boardtitle" name="boardtitle" placeholder="<%=boardvo.getBoardTitle() %>"
required> <br>
<label for="boardcontent">게시글 내용:</label><br>
<textarea id="boardcontent" name="boardcontent" rows="4" cols="50" placeholder="<%=boardvo.getBoardContent() %>"></textarea>
<br>
<input type="submit" value="게시글 수정">
</form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>게시글 작성하기</h2>
<form action="register.do" method="post">
<label for="memberid">작성자:</label>
<input type="text" id="memberid" name="memberid" size=10 maxlength=4 required> <br>
<label for="boardtitle">게시글 제목:</label>
<input type="text" id="boardtitle" name="boardtitle" size=10 maxlength=8 required> <br>
<label for="boardcontent">게시글 내용:</label><br>
<textarea id="boardcontent" name="boardcontent" rows="4" cols="50"></textarea>
<br>
<input type="submit" value="제출">
</form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.List" %>
<%@ page import="edu.web.domain.BoardVO" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>게시판 목록</title>
</head>
<body>
<h1>게시판 목록 <button onclick="location.href='register.do'">글 작성하기</button></h1>
<table border="1">
<thead>
<tr>
<th>ID</th>
<th>제목</th>
<th>작성자</th>
<th>작성일</th>
</tr>
</thead>
<tbody>
<%
List<BoardVO> boardList = (List<BoardVO>) request.getAttribute("boardList");
if (boardList != null) {
for (BoardVO board : boardList) {
%>
<tr>
<td><%= board.getBoardId() %></td>
<td><a href="detail.do?boardId=<%=board.getBoardId() %>"> <%=board.getBoardTitle() %> </a></td>
<td><%= board.getMemberId() %></td>
<td><%= board.getBoardDateCreated() %></td>
</tr>
<%
}
}
%>
</tbody>
</table>
</body>
</html>
<%@page import="edu.web.domain.BoardVO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<%
BoardVO boardvo = (BoardVO) request.getAttribute("boardvo");
%>
<title>게시글 상세조회</title>
</head>
<body>
<form id="updateForm" action="" method="post">
<input type="hidden" id="boardId" name="boardId" value="<%=boardvo.getBoardId() %>">
<h2>게시글 상세조회 <button onclick="listForm()">뒤로가기</button></h2>
<label for="memberId">게시글 작성자:</label>
<input type="text" id="memberId" name="memberId" value="<%=boardvo.getMemberId() %>" required> <br>
<label for="boardtitle">게시글 제목:</label>
<input type="text" id="boardtitle" name="boardtitle" value="<%=boardvo.getBoardTitle() %>" required> <br>
<label for="boardcontent">게시글 내용:</label><br>
<textarea id="boardcontent" name="boardcontent" rows="4" cols="50"><%=boardvo.getBoardContent() %></textarea>
<br>
<label for="boardDate">게시및수정 된 날짜:</label><br>
<input type="text" id="boardDate" name="boardDate" value="<%=boardvo.getBoardDateCreated() %>" required> <br>
<br>
<button onclick="updateForm()">게시글 수정하기</button>
<button onclick="deleteForm()">게시글 삭제하기</button>
</form> <br>
<script type="text/javascript">
function listForm() {
let form = document.getElementById("updateForm");
form.method = "GET";
form.action = "list.do";
form.submit();
}
function updateForm() {
let form = document.getElementById("updateForm");
form.method = "GET";
form.action = "update.do";
form.submit();
}
function deleteForm() {
if (confirm('정말로 삭제 하시겠습니까?')) {
let form = document.getElementById("updateForm");
form.method = "POST";
form.action = "delete.do";
form.submit();
} else {
form.method = "GET";
location.href = "detail.do";
}
}
</script>
</body>
</html>
package edu.web.dbcp.connmgr;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
// DBCP(Data Base Connection Pool)
// - 브라우저에서 서버에 호출 시 매번 DB 연결 객체를 생성하면 과부하가 발생할 수 있음
// - 이를 해결하기 위해 다수의 연결을 컨트롤하는 기법을 DBCP이라 함
// - DBCP 원리
// 1) 웹 컨테이너가 실행되면서 커넥션(Connection) 객체를 미리 풀(Pool)에 생성
// 2) 풀에 저장된 커넥션 객체를 필요할 때 쓰고 반환
// 3) 미리 생성하기 때문에 데이터베이스에 부하를 줄이고 유동적으로 연결을 관리
// DBCP 설정
// 1. ojdbc6.jar 파일을 \webapp\WEB-INF\lib에 저장
// 2. 톰캣 설치 경로\lib 폴더에 있는 tomcat-dbcp.jar 파일을
// 웹 프로젝트 경로\webapp\WEB-INF\lib에 저장
// 3. \webapp\META-INF\context.xml 파일에 Resource 태그 추가
public class ConnMgr {
public static Connection getConnection() throws Exception {
Connection conn = null;
Context initContext = new InitialContext();
Context envContext = (Context) initContext.lookup("java:comp/env");
DataSource ds = (DataSource) envContext.lookup("dbcp/orcl");
conn = ds.getConnection();
System.out.println("DBCP 연결 성공!");
return conn;
}
public static void close(Connection conn, Statement stmt) {
try {
stmt.close();
conn.close();
} catch (SQLException e) {
System.out.println(e.getMessage());
}
}
public static void close(Connection conn, Statement stmt, ResultSet rs) {
try {
rs.close();
stmt.close();
conn.close();
} catch (SQLException e) {
System.out.println(e.getMessage());
}
}
}
package edu.web.controller;
import java.io.IOException;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import edu.web.domain.BoardVO;
import edu.web.persistence.BoardDAO;
import edu.web.persistence.BoardDAOImple;
@WebServlet("*.do") // *.do : ~.do로 선언된 HTTP 호출에 대해 반응
public class BoardController extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final String BOARD_URL = "WEB-INF/board/";
private static final String MAIN = "index";
private static final String LIST = "list";
private static final String REGISTER = "register";
private static final String DETAIL = "detail";
private static final String UPDATE = "update";
private static final String DELETE = "delete";
private static final String EXTENSION = ".jsp";
private static final String SERVER_EXTENSION = ".do";
private static BoardDAO dao;
public BoardController() {
dao = BoardDAOImple.getInstance();
}
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String requestURI = request.getRequestURI();
String requestMethod = request.getMethod();
System.out.println("호출 경로 : " + requestURI);
System.out.println("호출 방식 : " + requestMethod);
if (requestURI.contains(LIST + SERVER_EXTENSION)) {
System.out.println("list 호출 확인");
list(request, response);
} else if (requestURI.contains(REGISTER + SERVER_EXTENSION)) {
System.out.println("register 호출 확인");
if (requestMethod.equals("GET")) { // GET 방식(페이지 불러오기)
registerGET(request, response);
} else if (requestMethod.equals("POST")) { // POST 방식(DB에 저장)
registerPOST(request, response);
}
} else if (requestURI.contains(DETAIL + SERVER_EXTENSION)) {
System.out.println("detail 호출 확인");
detail(request, response);
} else if (requestURI.contains(UPDATE + SERVER_EXTENSION)) {
System.out.println("update 호출 확인");
if(requestMethod.equals("GET")) { // GET 방식(페이지 불러오기)
updateGET(request, response);
} else if (requestMethod.equals("POST")) { // POST 방식(DB에 저장)
updatePOST(request, response);
}
} else if (requestURI.contains(DELETE + SERVER_EXTENSION)) {
System.out.println("delete 호출 확인");
if(requestMethod.equals("POST")) {
deletePOST(request, response);
}
}
} // end service()
// TODO : 전체 게시판 내용(list)을 DB에서 가져오고, 그 데이터를 list.jsp 페이지에 전송
private void list(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html; charset=UTF-8");
System.out.println("list()");
String path = BOARD_URL + LIST + EXTENSION;
List<BoardVO> boardList = dao.select();
request.setAttribute("boardList", boardList);
RequestDispatcher dis = request.getRequestDispatcher(path);
dis.forward(request, response);
} // end list()
// TODO : register.jsp 페이지 호출
private void registerGET(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html; charset=UTF-8");
System.out.println("registerGET()");
String path = BOARD_URL + REGISTER + EXTENSION;
RequestDispatcher dis = request.getRequestDispatcher(path);
dis.forward(request, response);
} // end registerGET()
// TODO : register.jsp form으로 전송된 데이터를 DB 테이블에 등록
// TODO : index.jsp로 이동
private void registerPOST(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html; charset=UTF-8");
System.out.println("registerPOST()");
String path = MAIN + EXTENSION;
String memberid = request.getParameter("memberid");
String boardtitle = request.getParameter("boardtitle");
String boardcontent = request.getParameter("boardcontent");
BoardVO board = new BoardVO(0, boardtitle, boardcontent, memberid, null);
int result = dao.insert(board);
System.out.println(result);
RequestDispatcher dis = request.getRequestDispatcher(path);
dis.forward(request, response);
} // end registerPOST()
// TODO : DB 테이블에서 상세 조회 데이터를 가져와서, detail.jsp로 전송 및 페이지 출력
private void detail(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html; charset=UTF-8");
System.out.println("detail()");
String path = BOARD_URL + DETAIL + EXTENSION;
int boardId = Integer.parseInt(request.getParameter("boardId"));
System.out.println(boardId);
BoardVO boardvo = dao.select(boardId);
request.setAttribute("boardvo", boardvo);
RequestDispatcher dis = request.getRequestDispatcher(path);
dis.forward(request, response);
} // end detail()
// TODO : DB 테이블에서 상세 조회한 게시글 데이터를 전송하고, update.jsp 페이지로 호출
private void updateGET(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html; charset=UTF-8");
System.out.println("updateGET()");
String path = BOARD_URL + UPDATE + EXTENSION;
int boardId = Integer.parseInt(request.getParameter("boardId"));
System.out.println(boardId);
BoardVO boardvo = dao.select(boardId);
request.setAttribute("boardvo", boardvo);
RequestDispatcher dis = request.getRequestDispatcher(path);
dis.forward(request, response);
} // end updateGET()
// TODO : update.jsp에서 전송된 수정할 데이터를 DB로 전송하여 테이블 수정 수행
// TODO : 수정이 완료되면, detail.jsp로 이동(이동할 때 어떤 값을 전송해야 할걸?ㅎ)
private void updatePOST(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html; charset=UTF-8");
System.out.println("updatePOST()");
String path = DETAIL + SERVER_EXTENSION;
int boardId = Integer.parseInt(request.getParameter("boardId"));
String boardtitle = request.getParameter("boardtitle");
String boardcontent = request.getParameter("boardcontent");
String memberId = request.getParameter("memberId");
BoardVO board = new BoardVO(boardId, boardtitle, boardcontent, memberId, null);
System.out.println(boardId);
int result = dao.update(board);
if(result == 1) {
System.out.println(result);
request.setAttribute("boardId", boardId);
RequestDispatcher dis = request.getRequestDispatcher(path);
dis.forward(request, response);
}
} // end updatePOST()
// TODO : 게시글 번호를 전송받아서, DB 테이블에서 데이터 삭제
// TODO : 삭제가 완료되면, index.jap로 이동
private void deletePOST(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html; charset=UTF-8");
System.out.println("deletePOST()");
String path = MAIN + EXTENSION;
int boardId = Integer.parseInt(request.getParameter("boardId"));
int result = dao.delete(boardId);
if(result == 1) {
RequestDispatcher dis = request.getRequestDispatcher(path);
dis.forward(request, response);
}
} // end deletePOST()
}