<14:30 5교시>
FoodDao.java
package test.food.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import test.food.dto.FoodDto;
import test.util.DbcpBean;
public class FoodDao {
public boolean update(FoodDto dto) {
Connection conn = null;
PreparedStatement pstmt = null;
int rowCount = 0;
try {
conn = new DbcpBean().getConn();
//실행할 미완성의 sql 문
String sql = """
update food
set type=?, name=?, price=?
where num=?
""";
pstmt = conn.prepareStatement(sql);
// ? 에 값을 여기서 바인딩한다.
pstmt.setString(1, dto.getType());
pstmt.setString(2, dto.getName());
pstmt.setInt(3, dto.getPrice());
pstmt.setInt(4, 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 FoodDto getData(int num) {
FoodDto dto= null;
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
//Connection Pool 로 부터 Connection 객체 하나 가져오기
conn = new DbcpBean().getConn();
//실행할 sql 문 작성
String sql = """
select num, type, name, price
from food
where num=?
""";
pstmt = conn.prepareStatement(sql);
// ? 에 값 바인딩할게 있으면 여기서 하기
pstmt.setInt(1, num);
//sql 문 실행하고 결과를 ResultSet 객체로 리턴받기
rs = pstmt.executeQuery();
while (rs.next()) {
dto=new FoodDto();
dto.setNum(num);
dto.setType(rs.getString("type"));
dto.setName(rs.getString("name"));
dto.setPrice(rs.getInt("Price"));
}
} 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 insert(FoodDto dto) {
Connection conn = null;
PreparedStatement pstmt = null;
int rowCount = 0;
try {
conn = new DbcpBean().getConn();
//실행할 미완성의 sql 문
String sql = """
insert into food
(num, type, name, price)
values (food_seq.nextval, ?,?,?)
""";
pstmt = conn.prepareStatement(sql);
// ? 에 값을 여기서 바인딩한다.
pstmt.setString(1, dto.getType());
pstmt.setString(2, dto.getName());
pstmt.setInt(3, dto.getPrice());
// 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 food
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 List<FoodDto> getList(){
List<FoodDto> list = new ArrayList<FoodDto>();
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
//Connection Pool 로 부터 Connection 객체 하나 가져오기
conn = new DbcpBean().getConn();
//실행할 sql 문 작성
String sql = """
select num, type, name, price
from food
order by num asc
""";
pstmt = conn.prepareStatement(sql);
// ? 에 값 바인딩할게 있으면 여기서 하기
//sql 문 실행하고 결과를 ResultSet 객체로 리턴받기
rs = pstmt.executeQuery();
while (rs.next()) {
FoodDto dto=new FoodDto();
dto.setNum(rs.getInt("num"));
dto.setType(rs.getString("type"));
dto.setName(rs.getString("name"));
dto.setPrice(rs.getInt("price"));
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;
}
}
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>
</head>
<body>
<div class="container">
<h1>맛집 목록에 추가하기 양식</h1>
<form action="${pageContext.request.contextPath}/food/insert.jsp">
<div>
<label for="type">종류 구분</label>
<select name="type" id="type">
<option value="한식">한식</option>
<option value="중식">중식</option>
<option value="양식">양식</option>
<option value="일식">일식</option>
<option value="기타">기타</option>
</select>
</div>
<div>
<label for="name">이름</label>
<input type="text" name="name" id="name"/>
</div>
<div>
<label for="price">가격</label>
<input type="text" name="price" id="price"/>
</div>
<button type="submit">저장</button>
</form>
</div>
</body>
</html>
insert.jsp
<%@page import="test.food.dao.FoodDao"%>
<%@page import="test.food.dto.FoodDto"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//폼으로 전송되는 종류, 이름, 가격 추출
String type=request.getParameter("type");
String name=request.getParameter("name");
int price=Integer.parseInt(request.getParameter("price"));
//Dto 객체에 담기
FoodDto dto=new FoodDto();
dto.setType(type);
dto.setName(name);
dto.setPrice(price);
//DB에 저장하기
FoodDao dao= new FoodDao();
boolean isSuccess= dao.insert(dto);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<div class="container">
<h3>알림</h3>
<%if(isSuccess){%>
<p><strong><%=name %></strong> 맛집 정보를 저장했습니다.</p>
<a href="list.jsp">목록보기</a>
<%}else{%>
<p>데이터 저장 실패</p>
<a href="insertform.jsp">다시 작성</a>
<%}%>
</div>
</body>
</html>
delete.jsp
<%@page import="test.food.dao.FoodDao"%>
<%@page import="test.food.dto.FoodDto"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//폼으로 전송되는 번호 추출
int num=Integer.parseInt(request.getParameter("num"));
//DB에서 삭제
FoodDao dao= new FoodDao();
boolean isSuccess= dao.delete(num);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<div class="container">
<h3>알림</h3>
<%if(isSuccess){ %>
<p>
<strong><%=num %></strong> 맛집의 정보를 삭제 했습니다.
<a href="list.jsp">확인</a>
</p>
<%}else{ %>
<p>
삭제 실패!
<a href="list.jsp">확인</a>
</p>
<%} %>
</div>
</body>
</html>
update.dto
<%@page import="test.food.dto.FoodDto"%>
<%@page import="test.food.dao.FoodDao"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//Get 방식 파라미터로 전달되는 회원 번호 추출(updateform.jsp?num=x)
int num= Integer.parseInt(request.getParameter("num"));
//num에 해당하는 회원 정보를 MemberDao 객체를 이용해서 얻어온다
FoodDto dto=new FoodDao().getData(num);
//아래의 내용으로 응답된다
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<div class="container">
<h1>맛집정보 수정 폼</h1>
<form action="update.jsp" method="post">
<div>
<label for="num">번호</label>
<input type="text" name="num" id="num" value="<%=dto.getNum()%>" readonly/>
</div>
<div>
<label for="type">종류 구분</label>
<select name="type" id="type" value="<%=dto.getType() %>">
<option value="한식">한식</option>
<option value="중식">중식</option>
<option value="양식">양식</option>
<option value="일식">일식</option>
<option value="기타">기타</option>
</select>
</div>
<div>
<label for="name">이름</label>
<input type="text" name="name" id="name" value="<%=dto.getName() %>"/>
</div>
<div>
<label for="price">가격</label>
<input type="text" name="price" id="price" value="<%=dto.getPrice() %>"/>
</div>
<button type="submit">저장</button>
<button type="reset">취소</button> <!-- 작성하던 내용을 원래 상태로 되돌림 -->
</form>
</div>
</body>
</html>
update.jsp
<%@page import="test.food.dao.FoodDao"%>
<%@page import="test.food.dto.FoodDto"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//1. 폼으로 전송되는 번호, 이름과 주소 추출
int num=Integer.parseInt(request.getParameter("num"));
String type=request.getParameter("type");
String name=request.getParameter("name");
int price=Integer.parseInt(request.getParameter("price"));
//2. MemberDto 객체에 담기
FoodDto dto = new FoodDto(num, type, name, price);
//2. DB에 수정하기
boolean isSuccess=new FoodDao().update(dto);
//3. 응답하기
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<script>
<%if(isSuccess){%>
//알림창을 띄우고
alert("정보를 수정했습니다");
//list.jsp 페이지로 이동
location.href="list.jsp"
<%}else{%>
//알림창을 띄우고
alert("정보 수정 실패");
//updateform.jsp 페이지로 이동하면서 num이라는 파라미터명으로 수정할 회원의 번호를 가지고 간다
location.href="updateform.jsp?num=<%=num%>";
<%}%>
</script>
</body>
</html>
빼먹거나 오류났거나 복붙하다가 고치지 못한 부분들
<15:30 6교시>
선생님이 답 알려주시는거 보고 필요한 내용 메모
한국에선 java를 많이 쓰고, 서양권에서는 node.js나 php를 많이 쓴다.
샘이 보내준 FoodDao
더보기
package test.food.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import test.food.dto.FoodDto;
import test.util.DbcpBean;
public class FoodDao {
public boolean insert(FoodDto dto) {
Connection conn = null;
PreparedStatement pstmt = null;
int rowCount = 0;
try {
conn = new DbcpBean().getConn();
//실행할 미완성의 sql 문
String sql = """
INSERT INTO food
(num, type, name, price)
VALUES(food_seq.NEXTVAL, ?, ?, ?)
""";
pstmt = conn.prepareStatement(sql);
// ? 에 값을 여기서 바인딩한다.
pstmt.setString(1, dto.getType());
pstmt.setString(2, dto.getName());
pstmt.setInt(3, dto.getPrice());
// 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(FoodDto dto) {
Connection conn = null;
PreparedStatement pstmt = null;
int rowCount = 0;
try {
conn = new DbcpBean().getConn();
//실행할 미완성의 sql 문
String sql = """
UPDATE food
SET type=?, name=?, price=?
WHERE num=?
""";
pstmt = conn.prepareStatement(sql);
// ? 에 값을 여기서 바인딩한다.
pstmt.setString(1, dto.getType());
pstmt.setString(2, dto.getName());
pstmt.setInt(3, dto.getPrice());
pstmt.setInt(4, 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 food
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 FoodDto getData(int num) {
FoodDto dto=null;
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
//Connection Pool 로 부터 Connection 객체 하나 가져오기
conn = new DbcpBean().getConn();
//실행할 sql 문 작성
String sql = """
SELECT type, name, price
FROM food
WHERE num=?
""";
pstmt = conn.prepareStatement(sql);
// ? 에 값 바인딩할게 있으면 여기서 하기
pstmt.setInt(1, num);
//sql 문 실행하고 결과를 ResultSet 객체로 리턴받기
rs = pstmt.executeQuery();
if (rs.next()) {
dto=new FoodDto();
dto.setNum(num);
dto.setType(rs.getString("type"));
dto.setName(rs.getString("name"));
dto.setPrice(rs.getInt("price"));
}
} 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<FoodDto> getList(){
List<FoodDto> list=new ArrayList<>();
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
//Connection Pool 로 부터 Connection 객체 하나 가져오기
conn = new DbcpBean().getConn();
//실행할 sql 문 작성
String sql = """
SELECT num, type, name, price
FROM food
ORDER BY num ASC
""";
pstmt = conn.prepareStatement(sql);
// ? 에 값 바인딩할게 있으면 여기서 하기
//sql 문 실행하고 결과를 ResultSet 객체로 리턴받기
rs = pstmt.executeQuery();
while (rs.next()) {
FoodDto dto=new FoodDto();
dto.setNum(rs.getInt("num"));
dto.setType(rs.getString("type"));
dto.setName(rs.getString("name"));
dto.setPrice(rs.getInt("price"));
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;
}
}
주소창에 나타나게 되는 경로들에는 모두 소문자를 써주고,
여러 단어의 조합이라 불가피하다면 언더바(_) 혹은 대쉬(/)를 사용
<16:30 7교시>
비즈니스 로직(위키피디아 뜻)
<%@page import="test.food.dao.FoodDao"%>
<%@page import="test.food.dto.FoodDto"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//폼 전송되는 내용을 읽어와서
String type=request.getParameter("type");
String name=request.getParameter("name");
int price=Integer.parseInt(request.getParameter("price"));
//FoodDto 에 담고
FoodDto dto=new FoodDto();
dto.setType(type);
dto.setName(name);
dto.setPrice(price);
//DB 에 저장하기
boolean isSuccess=new FoodDao().insert(dto);
//응답하기
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>/food/insert.jsp</title>
</head>
<body>
<script>
<%if(isSuccess){%>
alert("<%=name%> 을(를) 추가 했습니다.");
location.href="list.jsp";
<%}else{%>
alert("추가 실패!");
location.href="insertform.jsp";
<%}%>
</script>
</body>
</html>
내가 코딩한 내용이 어떻게 클라이언트 화면에 전달되어 나타날지를 예상할 수 있으면 프로그래밍을 잘 할 수 있다.
그러니 기능을 구현하고 나면 소스보기를 눌러서 확인을 해서 제대로 작성되었는지를 확인해야 한다.
콘솔창에서 페이지 이동하는 방법
location.href="링크주소" 이런식으로 명령어 치면 된다.
redirect 응답 : 웹브라우저로 하여금 강제로 특정 페이지로 이동시켜버리는 응답 방식
새로운 경로로 요청을 다시 하라는 응답
아래가 리다이렉트 응답의 코드
<%@page import="test.food.dao.FoodDao"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//폼으로 전송되는 번호 추출
int num=Integer.parseInt(request.getParameter("num"));
//DB에서 삭제
FoodDao dao= new FoodDao();
boolean isSuccess= dao.delete(num);
//3. redirect 방식의 응답
//특정 경로로 요청을 다시 하라는 리다이렉트 응답
//list.jsp=>delete.jsp=>list.jsp 이동이기 때문에 새로고침하는 느낌을 줄 수 있음
response.sendRedirect("Step02DataBase/food/list.jsp");
%>
<17:30 8교시>
리다이렉트코드의 context path(Step02DataBase)를 객체를 이용해서 얻어낸 다음 사용하는 방법
<%@page import="test.food.dao.FoodDao"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//폼으로 전송되는 번호 추출
int num=Integer.parseInt(request.getParameter("num"));
//DB에서 삭제
FoodDao dao= new FoodDao();
boolean isSuccess= dao.delete(num);
//3. redirect 방식의 응답
//특정 경로로 요청을 다시 하라는 리다이렉트 응답
//list.jsp=>delete.jsp=>list.jsp 이동이기 때문에 새로고침하는 느낌을 줄 수 있음
//context path는 HttpServletRequest 객체를 이용해서 얻어낸다.
String cPath=request.getContextPath();
response.sendRedirect(cPath+"/food/list.jsp");
%>
수정할 때 이전에 선택했던 선택지가 그대로 출력되게 나오는 게 하는 코드
<%@page import="test.food.dao.FoodDao"%>
<%@page import="test.food.dto.FoodDto"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//수정할 음식번호를 읽어온다.
int num=Integer.parseInt(request.getParameter("num"));
//수정할 음식의 정보를 DB 에서 읽어온다.
FoodDto dto=new FoodDao().getData(num);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>/food/updateform.jsp</title>
</head>
<body>
<div class="container">
<h1>음식 수정 양식</h1>
<p><%=false ? "selected" : "" %></p>
<p><%="" %></p>
<p></p>
<form action="update.jsp" method="post">
<div>
<label for="type">유형</label>
<select name="type" id="type">
<option value="">선택</option>
<option <%=dto.getType().equals("한식") ? "selected":"" %>>한식</option>
<option <%=dto.getType().equals("중식") ? "selected":"" %>>중식</option>
<option <%=dto.getType().equals("양식") ? "selected":"" %>>양식</option>
<option <%=dto.getType().equals("일식") ? "selected":"" %>>일식</option>
<option <%=dto.getType().equals("기타") ? "selected":"" %>>기타</option>
</select>
</div>
</form>
</div>
</body>
</html>
'공부의 기록 > 자바 풀 스택 : 수업내용정리' 카테고리의 다른 글
자바 풀 스택 1/8 오후 기록 033-2 (0) | 2025.01.08 |
---|---|
자바 풀 스택 1/8 오전 기록 033-1 (0) | 2025.01.08 |
자바 풀 스택 1/7 오전 기록 032-1 (0) | 2025.01.07 |
자바 풀 스택 1/6 오후 기록 031-2 (0) | 2025.01.06 |
자바 풀 스택 1/6 오전 기록 031-1 (0) | 2025.01.06 |