자바42일차

달달한스위츠·2024년 4월 12일

자바배우기

목록 보기
39/43

오늘의코드
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>게시판 목록 &nbsp; <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()

}

0개의 댓글