본문 바로가기

HTML

231229 HTML

오늘은 게시판 만들기

기본 페이지

<%@page import="com.poseidon.dao.BoardDAO"%>
<%@page import="com.poseidon.db.DBConnection"%>
<%@page import="java.util.HashMap"%>
<%@page import="java.util.Map"%>
<%@page import="java.util.List"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.Connection"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>index</title>
<style type="text/css">
table {
	width: 600px;
	border-collapse: collapse;
}

td {
	text-align: center;
	border-bottom: gray 1px solid;
}

tbody tr:hover {
	background-color: silver;
}

.w1 {
	width: 10%;
}

.w2 {
	width: 20%;
}

.w5 {
	width: 50%;
	/* text-align: left; */
}
</style>
</head>
<body>
	<h1>index</h1>
	<!-- 게시판 내용 보기 -->
	<%
	BoardDAO dao = new BoardDAO();
	List<Map<String, String>> list = dao.boardList();
	%>
	<%-- 자바 코드를 여러 줄 쓸 경우 <% %>
	자바의 값 하나를 출력할 경우 <%= %> --%>
	<table>
		<thead>
			<tr>
				<th>번호</th>
				<th>제목</th>
				<!-- <th>내용</th> -->
				<th>작성자</th>
				<th>작성날짜</th>
				<th>조회수</th>
			</tr>
		</thead>
		<tbody>
			<%
			// servlet 서블릿 : 자바 코드 속에 html 이 있음
			// jsp, Java Server Page : html 코드 속에 java 가 있음
			for (int i = 0; i < list.size(); i++) {
			%>
			<tr>
				<td class="w1"><%=list.get(i).get("board_no")%></td>
				<td class="w5"><a
					href="./detail.jsp?no=<%=list.get(i).get("board_no")%>"> <%=list.get(i).get("board_title")%>
				</a></td>
				<%-- <td class="w2"><%=list.get(i).get("board_content")%></td> --%>
				<td class="w1"><%=list.get(i).get("board_write")%></td>
				<td class="w2"><%=list.get(i).get("board_date")%></td>
				<td class="w1"><%=list.get(i).get("board_count")%></td>
			</tr>
			<%
			}
			%>
		</tbody>
	</table>
	연습
	<a href="./test">버튼</a>을 눌러보세요.
	<br>
	<button onclick="write1()">글쓰기버튼~</button>

	<script type="text/javascript">
		function write1() {
			if (confirm("정말 글쓰기를 하시겠습니까?")) {
				alert("ㅏㅇㅅ");
				location.href = "./write.jsp";
			} else {
				alert("취소하였습니다.");
			}
		}
	</script>
</body>
</html>

 

test Servlet 페이지

package com.poseidon.web;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/test")
public class Test extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public Test() {
		super();
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// response.getWriter().append("Served at: ").append(request.getContextPath());
		String str = "poseidon";

		response.setContentType("text/html;charset=UTF-8");
		PrintWriter pw = response.getWriter();
		pw.println("<html>");
		pw.println("<head>");
		pw.println("<title>타이틀</title>");
		pw.println("</head>");
		pw.println("<body>");
		pw.println("<h1>서블릿이 호출됨</h1>");
		pw.println("하나하나 작업해야함");
		pw.println("수정 시 다시 컴파일하여 실행이 필요<br>");
		pw.println("이것보다 jsp 가 더 편함<br>");
		pw.println(str + "<br>");
		pw.println("<a href=\"./main.jsp\">main으로 이동</a><br>");
		pw.println("<a href=\"./index.jsp\">index로 이동</a>");
		pw.println("</body>");
		pw.println("</html>");
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}

/*
 * request : 클라이언트가 서버에 요청하는 것
 * response : 서버가 클라이언트의 요청에 응답하는 것
 * 
 * get 방식 : 오픈, url 뒤에 요청 정보를 붙여 보내는 방식
 * https://developer.mozilla.org/ko/search?q=%3Ctr%3E
 * ? 뒤에 필요한 값을 붙임, 주소가 공개되어 있음
 * 
 * post 방식 : 숨김, url 은 그대로, http 바디에 요청 정보를 숨겨서 보냄
 * https://developer.mozilla.org/ko/search
 * ex) 로그인 시 id, pw 등 노출되면 안되는 중요한 정보를 송수신할 때 사용
 */

 

게시판의 글을 조회하는 페이지

<%@page import="java.util.Map"%>
<%@page import="java.util.List"%>
<%@page import="com.poseidon.dao.BoardDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<style>
.delete_letter {
  cursor: pointer;
} <!-- 마우스 커서가 올라가면 변하는 모양 설정 -->

</style>
<head>
<meta charset="UTF-8">
<title>제목</title>
</head>
<body>
	<h1>보기</h1>
	<%
	String no = request.getParameter("no");
	BoardDAO dao = new BoardDAO();
	Map<String, String> detail = dao.detail(no);
	%>
	글 번호 :
	<%=detail.get("board_no")%>
	<br>
	<h3>
		제목 :
		<%=detail.get("board_title")%>
	</h3>
	<a href="./delete.jsp?no=<%=detail.get("board_no")%>"> <img
		alt="삭제" src="./image/scissor_picture.png"
		title="버튼을 누르면 삭제됩니다. (a 태그 이용)"><br>
	</a>
	<img class = "delete_letter" onclick="del(<%=detail.get("board_no")%>)" alt="삭제"
		src="./image/scissor_picture.png" title="버튼을 누르면 삭제됩니다. (js 이용)">
	<%-- <button onclick="location.href='./delete.jsp?no=<%=detail.get("board_no") %>'">
	<img alt="삭제" src="./image/scissor_picture.png" title = "버튼을 누르면 삭제됩니다."><br>
	</button> --%>
	글쓴이 :
	<%=detail.get("board_write")%>
	<br> 날짜 :
	<%=detail.get("board_date")%>
	<br> 조회수 :
	<%=detail.get("board_count")%>
	<br>
	<hr>
	<!-- 삭제를 누르면 지워지는   이미지를 넣어보기 -->
	<%=detail.get("board_content")%>
	<br>
	<!-- html 문서에서 간혹 click, onclick 버튼 = 자바스크립트 -->
	<button onclick="location.href='./index.jsp'">돌아가기</button>
	<br>
	<button onclick="what()">눌러보세요</button> <!-- 클릭 가능한 버튼 만들기 -->
	<br>

	<script type="text/javascript"> /* 자바 스크립트 구역 */
		function what() {
			for (var i = 0; i < 3; i++) {
				alert("메롱"); /* 메롱 이 써진 팝업창이 생김, 3 번 반복*/
			}
		}
		function del(no){
			if(confirm("삭제하시면 복구가 불가능합니다.\n삭제 하시겠습니까?")) {
			 location.href="./delete.jsp?no=" + no;
			}
		}
	</script>
</body>
</html>

 

DBConnection 하는 페이지는 생략

서버 주소, 아이디 비밀번호 있어서

 

DAO 만들기, delete, 글 한개만 조회하기, 전체 조회하기

package com.poseidon.dao;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.poseidon.db.DBConnection;

public class BoardDAO {
	DBConnection dbConn = new DBConnection();

	// 글 삭제하기
	public void delete(String no) {
		PreparedStatement pstmt = null;
		String sql = "DELETE FROM board WHERE board_no = ?";

		try {
			pstmt = dbConn.getConn().prepareStatement(sql);
			pstmt.setString(1, no);
			pstmt.execute();
			// executeQuery : 리턴 값이 있는 것, execute() : 실행만 진행
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			close(null, pstmt);
		}

	}

	public Map<String, String> detail(String no) {
		Map<String, String> detail = new HashMap<>();
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		String sql = "SELECT * FROM board WHERE board_no=?";

		try {
			pstmt = dbConn.getConn().prepareStatement(sql);
			// pstmt 에 no 값 추가
			pstmt.setString(1, no);
			rs = pstmt.executeQuery();

			if (rs.next()) {
				detail.put("board_no", rs.getString("board_no"));
				detail.put("board_title", rs.getString("board_title"));
				detail.put("board_content", rs.getString("board_content"));
				detail.put("board_write", rs.getString("board_write"));
				detail.put("board_date", rs.getString("board_date"));
				detail.put("board_count", rs.getString("board_count"));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			close(rs, pstmt);
		}

		return detail;
	}

	public List<Map<String, String>> boardList() {
		List<Map<String, String>> list = new ArrayList<>();
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		String sql = "SELECT * FROM board";

		try {
			pstmt = dbConn.getConn().prepareStatement(sql);
			rs = pstmt.executeQuery();

			while (rs.next()) {
				Map<String, String> map = new HashMap<>();
				map.put("board_no", rs.getString("board_no"));
				map.put("board_title", rs.getString("board_title"));
				map.put("board_content", rs.getString("board_content"));
				map.put("board_write", rs.getString("board_write"));
				map.put("board_date", rs.getString("board_date"));
				map.put("board_count", rs.getString("board_count"));
				list.add(map);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			close(rs, pstmt);
		}

		return list;
	}

	private void close(ResultSet rs, PreparedStatement pstmt) {
		try {
			if (rs != null) {
				rs.close();
			}
			if (pstmt != null) {
				pstmt.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}

 

글 삭제 Servlet 과 jsp 파일

package com.poseidon.web;

import java.io.IOException;
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 com.poseidon.dao.BoardDAO;

@WebServlet("/delete")
public class Delete extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public Delete() {
		super();
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// response.getWriter().append("Served at: ").append(request.getContextPath());
		String no = request.getParameter("no");
		
		BoardDAO dao = new BoardDAO();
		dao.delete(no);
		
		// 페이지 이동
		response.sendRedirect("./index.jsp");
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// doGet(request, response);
	}

}

 

<%@page import="com.poseidon.dao.BoardDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>삭제</title>
</head>
<body>
	<!-- 이 페이지는 삭제 기능만 수행하고 페이지 이동 -->
	<%
  String no = request.getParameter("no");
	
	BoardDAO dao = new BoardDAO();
	dao.delete(no);
	
	// 페이지 이동
	response.sendRedirect("./index.jsp");
	%>
  글자
</body>
</html>

 

글을 작성할 때에는 보안을 위해

get 방식이 아닌 post 방식으로 전송해야 함

 

글 쓰기 jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>글쓰기</title>
<link rel="stylesheet" type="text/css" href="./css/write.css">

</head>
<body>
	<h3>글쓰기</h3>
	<!-- form 글 제목, 글 내용-->
	<form action="./writeAction.jsp">
		<input type="text" name="title"> <br>
		<textarea name="content"></textarea>
		<button type="submit">글쓰기</button>
	</form>
    <!-- title, content 에 적힌 값을 가지고 writeAction.jsp 로 이동 -->
</body>
</html>

 

writeAction.jsp -> 이후 Servlet 으로 변경 예정

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Servlet 으로 변경 예정</title>
</head>
<body>
	<!-- 데이터베이스에 값 전달하고 종료 -->
	<%
	String title = request.getParameter("title");
	String content = request.getParameter("content");
	%> <!-- 넘어온 값을 받는 명령어 () 안에는 값의 key 값 입력 -->

	타이틀 :
	<%=title%><br> 
	내용 :
	<%=content%><br>
	<!-- 페이지 이동 -->
</body>
</html>

'HTML' 카테고리의 다른 글

240108  (0) 2024.01.08
240104 VScode 를 이용하기  (0) 2024.01.04
240102 HTML, Servlet 등  (2) 2024.01.02
231228 HTML  (1) 2023.12.28
231220 HTML  (0) 2023.12.20