대학원 등록 완료했고, 보드게임 만드는것도 얘기 계속 하고 있음.
<14:30 5교시>
아.... 친구들이랑 보드게임 만든다고 신나게 얘기중이라 수업에 집중을 안하냐 집중해라.
놓친거는 렛잇고 하고.
tailwindcss는 디자인만 있어서 자바스크립트는 우리가 다 작성해야 한다.
아까전에 했던거 다른 페이지에 한거 같은데 어디다 했냐, 인덱스 페이지 선생님한테 받은 코드 다음과 같다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//navbar.jsp 페이지가 어떤 페이지에 include 되었는지 정보 읽어오기
String currentPage=request.getParameter("current"); // "index" or "member" or "food"
%>
<%-- /include/navbar.jsp 페이지의 내용 --%>
<nav class="navbar navbar-expand-md bg-primary" data-bs-theme="dark">
<div class="container">
<a class="navbar-brand" href="${pageContext.request.contextPath }/">Acorn</a>
<button class="navbar-toggler" type="button"
data-bs-toggle="collapse" data-bs-target="#navbarNav">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link <%=currentPage.equals("member") ? "active":"" %>" href="${pageContext.request.contextPath }/member/list.jsp">Member</a>
</li>
<li class="nav-item">
<a class="nav-link <%=currentPage.equals("food") ? "active":"" %>" href="${pageContext.request.contextPath }/food/list.jsp">Food</a>
</li>
<li class="nav-item">
<a class="nav-link <%=currentPage.equals("guest") ? "active":"" %>" href="${pageContext.request.contextPath }/guest/list.jsp">방명록</a>
</li>
</ul>
</div>
</div>
</nav>
이번에는 방명록 만들기
비밀번호를 입력해야지만 수정이나 삭제가 가능한 기능을 추가할 것이다.
/guest/list.jsp
<%@ 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>
<jsp:include page="/include/resource.jsp"></jsp:include>
</head>
<body>
<jsp:include page="/include/navbar.jsp">
<jsp:param value="guest" name="current"/>
</jsp:include>
<div class="container">
<a href="insertform.jsp">새글 작성</a>
<h1>방명록 목록</h1>
<table>
<thead>
<tr>
<th>번호</th>
<th>작성자</th>
<th>내용</th>
<th>등록일</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</body>
</html>
/guest/insertform.jsp
<%@ 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>
<jsp:include page="/include/resource.jsp"></jsp:include>
</head>
<body>
<div class="container">
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="${pageContext.request.contextPath}/">Home</a></li>
<li class="breadcrumb-item"><a href="${pageContext.request.contextPath}/food/list.jsp">방명록 목록</a></li>
<li class="breadcrumb-item">새글작성</li>
</ol>
</nav>
<h1>방명록입니다</h1>
<form action="insert.jsp" method="post">
<div class="mb-2">
<label class="form-label" for="writer">작성자</label>
<input class="form-control" type="text" name="writer" id="writer"/>
</div>
<div class="mb-2">
<label class="form-label" for="content">내용</label>
<textarea class="form-control" name="content" id="content" style="height:200px"></textarea>
</div>
<div class="mb-2">
<label class="form-label" for="pwd">비밀번호 입력</label>
<input class="form-control" type="password" name="pwd" id="pwd" />
</div>
<button class="btn btn-outline-success btn-sm" type="submit">저장</button>
</form>
</div>
</body>
</html>
과제 : dto, dao 만들기
<15:30 6교시>
package test.guest.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.List;
import test.guest.dto.GuestDto;
import test.util.DbcpBean;
/*
* application 전역에서 GuestDao 객체는 오직 한개만 생성되어서 사용되도록 클래스를 설계한다.
* - 한정된 자원인 Connection 객체가 여러번 생성되지 않고, Connection 객체를 좀 더 효율적으로 사용하기 위해
* GuestDao dao= new GuestDao();가 안된다는 이야기
* 그렇다면 어디선가 GuestDao(); 참조값이 필요하다면
* GuestDao dao=GuestDao.getInstance();로 스태틱메소드를 호출하면 된다는 것.
*/
public class GuestDao {
//자신의 참조값을 저장할 static 필드
private static GuestDao dao;
//static 초기화 블럭(이 클래스가 최초로 사용될 때 오직 한번만 수행됨)
static {
//객체를 생성되면서 오직 1번만 객체 생성이 된 상태로 static 필드에 담는다
dao=new GuestDao();
}
//외부에서 객체 생성하지 못하도록 생성자의 접근 지정자를 private 로 설정
private GuestDao() {
}
//static 필드에 저장된 GuestDao의 참조값을 리턴해주는 static 메소드
public static GuestDao getInstance() {
return dao;
}
public boolean insert(GuestDto dto) {
Connection conn = null;
PreparedStatement pstmt = null;
int rowCount = 0;
try {
conn = new DbcpBean().getConn();
//실행할 미완성의 sql 문
String sql = """
insert into board_guest
(num, writer, content, pwd, regdate)
values (board_guest_seq.nextval, ?, ?, ?, sysdate)
""";
pstmt = conn.prepareStatement(sql);
// ? 에 값을 여기서 바인딩한다.
pstmt.setString(1, "writer");
pstmt.setString(2, "content");
pstmt.setString(3, "pwd");
// sql 문 실행하고 변화된 row 의 갯수 리턴받기
rowCount = pstmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (conn != null)
conn.close();
if (pstmt != null)
pstmt.close();
} catch (Exception e) {
}
}
if (rowCount > 0) {return true;}else{return false;}
}
public boolean update(int num) {
GuestDto dto=null;
Connection conn = null;
PreparedStatement pstmt = null;
int rowCount = 0;
try {
conn = new DbcpBean().getConn();
//실행할 미완성의 sql 문
String sql = """
update board_guest
set writer=?, content=?, pwd=?
where num=?
""";
pstmt = conn.prepareStatement(sql);
// ? 에 값을 여기서 바인딩한다.
pstmt.setString(1, "writer");
pstmt.setString(2, "content");
pstmt.setString(3, "pwd");
pstmt.setInt(4, num);
// sql 문 실행하고 변화된 row 의 갯수 리턴받기
rowCount = pstmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (conn != null)conn.close();
if (pstmt != null)pstmt.close();
} catch (Exception e) { }
}
if (rowCount > 0) {return true;}else{return false;}
}
public boolean delete(int num) {
Connection conn = null;
PreparedStatement pstmt = null;
int rowCount = 0;
try {
conn = new DbcpBean().getConn();
//실행할 미완성의 sql 문
String sql = """
delete from guest_board
where num =
""";
pstmt = conn.prepareStatement(sql);
// ? 에 값을 여기서 바인딩한다.
// sql 문 실행하고 변화된 row 의 갯수 리턴받기
rowCount = pstmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (conn != null)
conn.close();
if (pstmt != null)
pstmt.close();
} catch (Exception e) {
}
}
if (rowCount > 0) {
return true;
} else {
return false;
}
}
public GuestDto getData() {
GuestDto dto=null;
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
//Connection Pool 로 부터 Connection 객체 하나 가져오기
conn = new DbcpBean().getConn();
//실행할 sql 문 작성
String sql = """
""";
pstmt = conn.prepareStatement(sql);
// ? 에 값 바인딩할게 있으면 여기서 하기
//sql 문 실행하고 결과를 ResultSet 객체로 리턴받기
rs = pstmt.executeQuery();
while (rs.next()) {
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (rs != null)
rs.close();
if (pstmt != null)
pstmt.close();
if (conn != null)
conn.close();
} catch (Exception e) {
}
}
return dto;
}
public List<GuestDto> getList(){
}
}
내코드 어딘가 오류난거 ㅠ
package test.guest.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.List;
import test.guest.dto.GuestDto;
import test.util.DbcpBean;
/*
* application 전역에서 GuestDao 객체는 오직 한개만 생성되어서 사용되도록 클래스를 설계한다.
* - 한정된 자원인 Connection 객체가 여러번 생성되지 않고, Connection 객체를 좀 더 효율적으로 사용하기 위해
* GuestDao dao= new GuestDao();가 안된다는 이야기
* 그렇다면 어디선가 GuestDao(); 참조값이 필요하다면
* GuestDao dao=GuestDao.getInstance();로 스태틱메소드를 호출하면 된다는 것.
*/
public class GuestDao {
//자신의 참조값을 저장할 static 필드
private static GuestDao dao;
//static 초기화 블럭(이 클래스가 최초로 사용될 때 오직 한번만 수행됨)
static {
//객체를 생성되면서 오직 1번만 객체 생성이 된 상태로 static 필드에 담는다
dao=new GuestDao();
}
//외부에서 객체 생성하지 못하도록 생성자의 접근 지정자를 private 로 설정
private GuestDao() {
}
//static 필드에 저장된 GuestDao의 참조값을 리턴해주는 static 메소드
public static GuestDao getInstance() {
return dao;
}
public boolean insert(GuestDto dto) {
Connection conn = null;
PreparedStatement pstmt = null;
int rowCount = 0;
try {
conn = new DbcpBean().getConn();
//실행할 미완성의 sql 문
String sql = """
insert into board_guest
(num, writer, content, pwd, regdate)
values (board_guest_seq.nextval, ?, ?, ?, sysdate)
""";
pstmt = conn.prepareStatement(sql);
// ? 에 값을 여기서 바인딩한다.
pstmt.setString(1, dto.getWriter());
pstmt.setString(2, dto.getContent());
pstmt.setString(3, dto.getPwd());
// sql 문 실행하고 변화된 row 의 갯수 리턴받기
rowCount = pstmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (conn != null)
conn.close();
if (pstmt != null)
pstmt.close();
} catch (Exception e) {
}
}
if (rowCount > 0) {return true;}else{return false;}
}
public boolean update(GuestDto dto) {
GuestDto dto=null;
Connection conn = null;
PreparedStatement pstmt = null;
int rowCount = 0;
try {
conn = new DbcpBean().getConn();
//실행할 미완성의 sql 문
String sql = """
update board_guest
set writer=?, content=?
where num=?
""";
pstmt = conn.prepareStatement(sql);
// ? 에 값을 여기서 바인딩한다.
pstmt.setString(1, dto.getWriter());
pstmt.setString(2, dto.getContent());
pstmt.setInt(3, dto.getNum());
// sql 문 실행하고 변화된 row 의 갯수 리턴받기
rowCount = pstmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (conn != null)conn.close();
if (pstmt != null)pstmt.close();
} catch (Exception e) { }
}
if (rowCount > 0) {return true;}else{return false;}
}
public boolean delete(int num) {
Connection conn = null;
PreparedStatement pstmt = null;
int rowCount = 0;
try {
conn = new DbcpBean().getConn();
//실행할 미완성의 sql 문
String sql = """
delete from guest_board
where num =?
""";
pstmt = conn.prepareStatement(sql);
// ? 에 값을 여기서 바인딩한다.
pstmt.setInt(1, num);
// sql 문 실행하고 변화된 row 의 갯수 리턴받기
rowCount = pstmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (conn != null)
conn.close();
if (pstmt != null)
pstmt.close();
} catch (Exception e) {
}
}
if (rowCount > 0) {
return true;
} else {
return false;
}
}
public GuestDto getData(int num) {
GuestDto dto=new GuestDto();
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
//Connection Pool 로 부터 Connection 객체 하나 가져오기
conn = new DbcpBean().getConn();
//실행할 sql 문 작성
String sql = """
select writer, content, pwd, regdate
from boadr_guest
where num=?
""";
pstmt = conn.prepareStatement(sql);
// ? 에 값 바인딩할게 있으면 여기서 하기
pstmt.setInt(1, num );
//sql 문 실행하고 결과를 ResultSet 객체로 리턴받기
rs = pstmt.executeQuery();
while (rs.next()) {
dto=new GuestDto();
dto.setNum(num);
dto.setWriter(rs.getString("writer"));
dto.setContent(rs.getString("content"));
dto.setPwd(rs.getString("pwd"));
dto.setRegdate(rs.getString("regdate"));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (rs != null)
rs.close();
if (pstmt != null)
pstmt.close();
if (conn != null)
conn.close();
} catch (Exception e) {
}
}
return dto;
}
public List<GuestDto> getList(){
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
//Connection Pool 로 부터 Connection 객체 하나 가져오기
conn = new DbcpBean().getConn();
//실행할 sql 문 작성
String sql = """
select num, writer, content, regdate
from board_guest
order by num desc
""";
pstmt = conn.prepareStatement(sql);
// ? 에 값 바인딩할게 있으면 여기서 하기
//sql 문 실행하고 결과를 ResultSet 객체로 리턴받기
rs = pstmt.executeQuery();
while (rs.next()) {
GuestDto dto=new GuestDto();
dto.setNum(rs.getInt("num"));
dto.setWriter(rs.getString("writer"));
dto.setContent(rs.getString("content"));
dto.setRegdate(rs.getString("regdate"));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (rs != null)
rs.close();
if (pstmt != null)
pstmt.close();
if (conn != null)
conn.close();
} catch (Exception e) {
}
}
}
}
일단 선생님껄로 수업 들어야지 ㅠ
package test.guest.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import test.guest.dto.GuestDto;
import test.util.DbcpBean;
/*
* application 전역에서 GuestDao 객체는 오직 한개만 생성되어서 사용되도록 클래스를 설계한다.
* - 한정된 자원인 Connection 객체를 좀더 효율적으로 사용하기 위해
*/
public class GuestDao {
//자신의 참조값을 저장할 static 필드
private static GuestDao dao;
//static 초기화 블럭 (이클래스가 최초로 사용될때 오직 한번만 수행된다)
static {
//객체를 생성해서 static 필드에 담는다.
dao=new GuestDao();
}
//외부에서 객체 생성하지 못하도록 생성자의 접근 지정자를 private 로 설정
private GuestDao() {}
//static 필드에 저장된 GuestDao 의 참조값을 리턴해주는 static 메소드
public static GuestDao getInstance() {
return dao;
}
public List<GuestDto> getList(){
List<GuestDto> list=new ArrayList<GuestDto>();
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
//Connection Pool 로 부터 Connection 객체 하나 가져오기
conn = new DbcpBean().getConn();
//실행할 sql 문 작성
String sql = """
SELECT num, writer, content, regdate
FROM board_guest
ORDER BY num DESC
""";
pstmt = conn.prepareStatement(sql);
// ? 에 값 바인딩할게 있으면 여기서 하기
//sql 문 실행하고 결과를 ResultSet 객체로 리턴받기
rs = pstmt.executeQuery();
while (rs.next()) {
//select 된 row 하나의 정보를 GuestDto 객체에 담고
GuestDto dto=new GuestDto();
dto.setNum(rs.getInt("num"));
dto.setWriter(rs.getString("writer"));
dto.setContent(rs.getString("content"));
dto.setRegdate(rs.getString("regdate"));
//GuestDto 객체를 List 객체에 누적 시킨다
list.add(dto);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (rs != null)
rs.close();
if (pstmt != null)
pstmt.close();
if (conn != null)
conn.close();
} catch (Exception e) {
}
}
return list;
}
public GuestDto getData(int num) {
GuestDto dto=null;
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
//Connection Pool 로 부터 Connection 객체 하나 가져오기
conn = new DbcpBean().getConn();
//실행할 sql 문 작성
String sql = """
SELECT writer, content, pwd, regdate
FROM board_guest
WHERE num=?
""";
pstmt = conn.prepareStatement(sql);
// ? 에 값 바인딩할게 있으면 여기서 하기
pstmt.setInt(1, num);
//sql 문 실행하고 결과를 ResultSet 객체로 리턴받기
rs = pstmt.executeQuery();
if (rs.next()) {
dto=new GuestDto();
dto.setNum(num);
dto.setWriter(rs.getString("writer"));
dto.setContent(rs.getString("content"));
dto.setPwd(rs.getString("pwd"));
dto.setRegdate(rs.getString("regdate"));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (rs != null)
rs.close();
if (pstmt != null)
pstmt.close();
if (conn != null)
conn.close();
} catch (Exception e) {
}
}
return dto;
}
public boolean delete(int num) {
Connection conn = null;
PreparedStatement pstmt = null;
int rowCount = 0;
try {
conn = new DbcpBean().getConn();
//실행할 미완성의 sql 문
String sql = """
DELETE FROM board_guest
WHERE num=?
""";
pstmt = conn.prepareStatement(sql);
// ? 에 값을 여기서 바인딩한다.
pstmt.setInt(1, num);
// sql 문 실행하고 변화된 row 의 갯수 리턴받기
rowCount = pstmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (conn != null)
conn.close();
if (pstmt != null)
pstmt.close();
} catch (Exception e) {
}
}
if (rowCount > 0) {
return true;
} else {
return false;
}
}
public boolean update(GuestDto dto) {
Connection conn = null;
PreparedStatement pstmt = null;
int rowCount = 0;
try {
conn = new DbcpBean().getConn();
//실행할 미완성의 sql 문
String sql = """
UPDATE board_guest
SET writer=?, content=?
WHERE num=?
""";
pstmt = conn.prepareStatement(sql);
// ? 에 값을 여기서 바인딩한다.
pstmt.setString(1, dto.getWriter());
pstmt.setString(2, dto.getContent());
pstmt.setInt(3, dto.getNum());
// sql 문 실행하고 변화된 row 의 갯수 리턴받기
rowCount = pstmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (conn != null)
conn.close();
if (pstmt != null)
pstmt.close();
} catch (Exception e) {
}
}
if (rowCount > 0) {
return true;
} else {
return false;
}
}
public boolean insert(GuestDto dto) {
Connection conn = null;
PreparedStatement pstmt = null;
int rowCount = 0;
try {
conn = new DbcpBean().getConn();
//실행할 미완성의 sql 문
String sql = """
INSERT INTO board_guest
(num, writer, content, pwd, regdate)
VALUES(board_guest_seq.NEXTVAL, ?, ?, ?, SYSDATE)
""";
pstmt = conn.prepareStatement(sql);
// ? 에 값을 여기서 바인딩한다.
pstmt.setString(1, dto.getWriter());
pstmt.setString(2, dto.getContent());
pstmt.setString(3, dto.getPwd());
// sql 문 실행하고 변화된 row 의 갯수 리턴받기
rowCount = pstmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (conn != null)
conn.close();
if (pstmt != null)
pstmt.close();
} catch (Exception e) {
}
}
if (rowCount > 0) {
return true;
} else {
return false;
}
}
}
GuestDto에 기본 생성자 안만들고 해서 그랬던거임 ㅠㅠ
package test.guest.dto;
public class GuestDto {
private int num;
private String writer;
private String content;
private String pwd;
private String regdate;
public GuestDto() {}
public GuestDto(int num, String writer, String content, String pwd, String regdate) {
super();
this.num = num;
this.writer = writer;
this.content = content;
this.pwd = pwd;
this.regdate = regdate;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getWriter() {
return writer;
}
public void setWriter(String writer) {
this.writer = writer;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getRegdate() {
return regdate;
}
public void setRegdate(String regdate) {
this.regdate = regdate;
}
}
/guest/list.jsp
<%@page import="test.guest.dao.GuestDao"%>
<%@page import="test.guest.dto.GuestDto"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//방명록 글 목록을 얻어온다.
List<GuestDto> list=GuestDao.getInstance().getList();
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>/guest/list.jsp</title>
<jsp:include page="/include/resource.jsp"></jsp:include>
</head>
<body>
<jsp:include page="/include/navbar.jsp">
<jsp:param value="guest" name="current"/>
</jsp:include>
<div class="container">
<a href="insertform.jsp">새글 작성</a>
<h1>방명록 목록 입니다.</h1>
<table class="table table-bordered">
<thead class="table-dark">
<tr>
<th>번호</th>
<th>작성자</th>
<th>내용</th>
<th>등록일</th>
</tr>
</thead>
<tbody>
<%for(GuestDto tmp:list){ %>
<tr>
<td><%=tmp.getNum() %></td>
<td><%=tmp.getWriter() %></td>
<td>
<textarea class="form-control" style="height:100px;resize:none;" readonly><%=tmp.getContent() %></textarea>
</td>
<td><%=tmp.getRegdate() %></td>
</tr>
<%} %>
</tbody>
</table>
</div>
</body>
</html>
/guest/insertform.jsp
<%@ 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>
<jsp:include page="/include/resource.jsp"></jsp:include>
</head>
<body>
<div class="container">
<nav>
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="${pageContext.request.contextPath}/">Home</a></li>
<li class="breadcrumb-item"><a href="${pageContext.request.contextPath}/food/list.jsp">방명록 목록</a></li>
<li class="breadcrumb-item">새글작성</li>
</ol>
</nav>
<h1>방명록입니다</h1>
<form action="insert.jsp" method="post">
<div class="mb-2">
<label class="form-label" for="writer">작성자</label>
<input class="form-control" type="text" name="writer" id="writer"/>
</div>
<div class="mb-2">
<label class="form-label" for="content">내용</label>
<textarea class="form-control" name="content" id="content" style="height:200px"></textarea>
</div>
<div class="mb-2">
<label class="form-label" for="pwd">비밀번호 입력</label>
<input class="form-control" type="password" name="pwd" id="pwd" />
</div>
<button class="btn btn-outline-success btn-sm" type="submit">저장</button>
</form>
</div>
</body>
</html>
/guest/insert.jsp
<%@page import="test.guest.dao.GuestDao"%>
<%@page import="test.guest.dto.GuestDto"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//1. 폼 전송되는 writer, content, pwd 를 추출한다
String writer=request.getParameter("writer");
String content=request.getParameter("content");
String pwd=request.getParameter("pwd");
//2. DB 에 저장한다
//글정보를 GuestDto 에 담는다.
GuestDto dto=new GuestDto();
dto.setWriter(writer);
dto.setContent(content);
dto.setPwd(pwd);
//GuestDao 객체의 참조값 얻어오기
GuestDao dao=GuestDao.getInstance();
boolean isSuccess=dao.insert(dto);
//3. 응답하기
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>/guest/insert.jsp</title>
</head>
<body>
<div class="container">
<h3>알림</h3>
<%if(isSuccess){ %>
<p>
<%=writer %> 님이 작성한 글을 성공적으로 저장 했습니다.
<a href="list.jsp">목록보기</a>
</p>
<%}else{ %>
<p>
저장 실패!
<a href="insertform.jsp">다시 작성</a>
</p>
<%} %>
</div>
</body>
</html>
<16:30 7교시>
글 삭제 기능
delete.jsp
<%@page import="test.guest.dao.GuestDao"%>
<%@page import="test.guest.dto.GuestDto"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//1. 폼 전송되는 삭제할 글의 글번호와 비밀번호를 추출해서
int num=Integer.parseInt(request.getParameter("num"));
String pwd=request.getParameter("pwd");
//2. 비밀번호가 일치하는지 확인해서 일치하면 삭제한다
//삭제할 글정보를 얻어와서
GuestDto dto=GuestDao.getInstance().getData(num);
//비밀번호가 일치하는지 확인하기
if(pwd.equals(dto.getPwd())){
//DB에서 삭제하고
GuestDao.getInstance().delete(num);
//"/guest/list.jsp" 페이지로 리다이렉트 이동하라는 응답하기
String cPath=request.getContextPath();
response.sendRedirect(cPath+"/guest/list.jsp");
}
//if 문을 건너 뛰었을 때는 삭제 실패임을 응답한다
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<script>
alert("비밀번호가 일치하지 않습니다")
location.href-"${pageContext.request.contextPath}/guest/list.jsp";
</script>
</body>
</html>
updateform.jsp
<%@page import="test.guest.dao.GuestDao"%>
<%@page import="test.guest.dto.GuestDto"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//1. 수정할 글번호를 읽어온다.
int num=Integer.parseInt(request.getParameter("num"));
//2. 글번호에 해당하는 글정보를 DB 에서 얻어온다.
GuestDto dto = GuestDao.getInstance().getData(num);
//3. 글 수정 양식을 응답한다.
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>/guest/updateform.jsp</title>
<jsp:include page="/include/resource.jsp"></jsp:include>
</head>
<body>
<div class="container">
<h1>방명록 글 수정 폼</h1>
<form action="update.jsp" method="post">
<div class="mb-2">
<label class="form-label" for="num">번호</label>
<input class="form-control" type="text" name="num" id="num"
value="<%=dto.getNum() %>" readonly/>
</div>
<div class="mb-2">
<label class="form-label" for="writer">작성자</label>
<input class="form-control" type="text" name="writer" id="writer"
value="<%=dto.getWriter() %>"/>
</div>
<div class="mb-2">
<label class="form-label" for="content">내용</label>
<textarea class="form-control" name="content" id="content" style="height:200px"><%=dto.getContent() %></textarea>
</div>
<div class="mb-2">
<label class="form-label" for="pwd">글 작성시 입력했던 비밀번호</label>
<input class="form-control" type="text" name="pwd" id="pwd"/>
</div>
<button type="submit" class="btn btn-outline-success btn-sm">수정확인</button>
<button type="reset" class="btn btn-outline-danger btn-sm">취소</button>
</form>
</div>
</body>
</html>
<17:30 8교시>
update.jsp 작성해보기 +CSS 적용 안된 페이지들 적용해주기
<%@page import="test.guest.dao.GuestDao"%>
<%@page import="test.guest.dto.GuestDto"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//1. 폼 전송되는 수정할 글의 글번호, 작성자, 내용, 비밀번호를 모두 가져와서
int num=Integer.parseInt(request.getParameter("num"));
String writer=request.getParameter("writer");
String content=request.getParameter("content");
String pwd=request.getParameter("pwd");
//2. DB에 저장
GuestDto dto =new GuestDto();
dto.setNum(num);
dto.setWriter(writer);
dto.setContent(content);
dto.setPwd(pwd);
//GuestDao 객체의 참조값 얻어오기
GuestDao dao=GuestDao.getInstance();
boolean isSuccess=dao.update(dto);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<div class="container">
<h3>알림</h3>
<%if(isSuccess){ %>
<p>
글을 수정했습니다.
<a href="list.jsp">목록보기</a>
</p>
<%}else{ %>
<p>
수정 실패!
<a href="insertform.jsp">다시 작성</a>
</p>
<%} %>
</div>
</body>
</html>
pwd의 경우는 type="password" 로 하면 입력 시에 별표 모양으로 보인다.
'공부의 기록 > 자바 풀 스택 : 수업내용정리' 카테고리의 다른 글
자바 풀 스택 1/9 오후 기록 034-2 (0) | 2025.01.09 |
---|---|
자바 풀 스택 1/9 오전 기록 034-1 (0) | 2025.01.09 |
자바 풀 스택 1/8 오전 기록 033-1 (0) | 2025.01.08 |
자바 풀 스택 1/7 오후 기록 032-2 (0) | 2025.01.07 |
자바 풀 스택 1/7 오전 기록 032-1 (0) | 2025.01.07 |