구현하기구현하기
🔎 전체 흐름도
[select.jsp] 수정 버튼 클릭 (num 전달)
│
▼
[updateForm.jsp] num 기반으로 기존 값 불러오기
│
▼
사용자가 수정 후 "수정하기" 클릭
│
▼
[updateProc.jsp] 수정 데이터 MovieBean에 담아 DAO 전달
│
▼
[MovieDao.updateMovie()] DB update 실행
│
▼
성공 → select.jsp 리다이렉트
실패 → updateForm.jsp 재호출
1️⃣ updateForm.jsp (수정 화면)
<%@page import="myPkg.MovieBean"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
select.jsp(num)=>updateForm.jsp<br>
<jsp:useBean id="mdao" class="myPkg.MovieDao" />
<%
String[] genre = {"공포", "다큐", "액션", "애니메이션"};
String[] time = {"08~10","10~12","12~14","14~16","16~18","18~20"};
int num = Integer.parseInt(request.getParameter("num"));
MovieBean movie = mdao.getMovieByNum(num);
System.out.println(movie.getNum());
System.out.println(movie.getGenre()); // 공포 액션
%>
<h2>영화 선호도 조사 수정폼</h2>
<form action="updateProc.jsp" method="post">
<input type="hidden" name="num" value="<%=num%>">
<table border="1">
<tr>
<td>아이디</td>
<td><input type="text" name="id" value="<%=movie.getId()%>"></td>
</tr>
<tr>
<td>이름</td><td>
<input type="text" name="name" value="<%=movie.getName()%>"></td>
</tr>
<tr>
<td>나이</td>
<td><input type="text" name="age" value="<%=movie.getAge()%>"></td>
</tr>
<tr>
<td>좋아하는 장르</td>
<td>
<!--
<input type="checkbox" name="genre" value="공포">공포
<input type="checkbox" name="genre" value="다큐">다큐
<input type="checkbox" name="genre" value="액션">액션
<input type="checkbox" name="genre" value="애니메이션">애니메이션
-->
<%for(String g : genre) { %>
<input type="checkbox" name="genre" value="<%= g %>" <%if(movie.getGenre().contains(g)){ %> checked <%}%> ><%= g %>
<%} %>
</td>
</tr>
<tr>
<td>즐겨보는 시간대</td>
<td>
<select name="time">
<!-- <option value="08~10">08~10</option>
<option value="10~12">10~12</option>
<option value="12~14">12~14</option>
<option value="14~16">14~16</option>
<option value="16~18">16~18</option>
<option value="18~20">18~20</option> -->
<%for(int i = 0; i < time.length; i++){ %>
<option value="<%=time[i] %>" <%if(movie.getTime().equals(time[i])){%> selected <%} %>><%=time[i] %></option>
<%} %>
</select>
<tr>
<td>동반 관객수</td>
<td>
<%
for(int i=1;i<=5;i++){
%>
<input type="radio" name="partner" value="<%=i%>" <%if(movie.getPartner()==i){ %> checked <%}%>><%=i%>
<%} %>
</td>
</tr>
<tr>
<td>영화관 개선사항</td>
<td>
<textarea name="memo" cols="40" rows="3"><%=movie.getMemo() %></textarea>
</td>
</tr>
<tr align="center">
<td colspan="2">
<input type="submit" value="수정하기">
</td>
</tr>
</table>
</form>
<jsp:useBean id="mdao" class="myPkg.MovieDao" />
int num = Integer.parseInt(request.getParameter("num"));
MovieBean movie = mdao.getMovieByNum(num);
✔️ Dao 호출 하여 getMovieByNum(num) 으로 DB 값 불러와서
폼에 기본값으로 표시 (체크박스, 라디오, select 포함)
- URL: updateForm.jsp?num=10
- getParameter("num") → "10" (문자열)
- 정수로 쓰려면 Integer.parseInt("10") 해야 int로 변환됨
2️⃣ updateProc.jsp (수정 처리)
<%
request.setCharacterEncoding("UTF-8");
%>
<jsp:useBean id="mdao" class="myPkg.MovieDao"/>
<jsp:useBean id="mBean" class="myPkg.MovieBean"/>
<jsp:setProperty property="*" name="mBean"/>
<%
// 체크박스 다중 값 처리
String[] genre = request.getParameterValues("genre");
String temp = "";
if(genre != null){
for(int i=0; i<genre.length; i++){
temp += genre[i] + " ";
}
}
mBean.setGenre(temp);
int cnt = mdao.updateMovie(mBean);
if(cnt > 0){
response.sendRedirect("select.jsp");
}else{
response.sendRedirect("updateForm.jsp?num="+mBean.getNum());
}
%>
✔️ 폼 데이터를 MovieBean에 자동 매핑 (jsp:setProperty property="*")
✔️ 장르는 여러 개 선택될 수 있어서 수동으로 문자열 합쳐서 저장
✔️ DAO 호출 후 성공/실패에 따라 이동
3️⃣ MovieDao (DB 처리)
// 특정 번호 데이터 가져오기
public MovieBean getMovieByNum(int num) {
getConnection();
MovieBean mb = null;
try {
String sql = "select * from movie where num = ?";
ps = conn.prepareStatement(sql);
ps.setInt(1, num);
rs = ps.executeQuery();
if(rs.next()) {
mb = new MovieBean(
rs.getInt("num"),
rs.getString("id"),
rs.getString("name"),
rs.getInt("age"),
rs.getString("genre"),
rs.getString("time"),
rs.getInt("partner"),
rs.getString("memo")
);
}
} finally { /* 리소스 정리 */ }
return mb;
}
// 데이터 수정
public int updateMovie(MovieBean mb) {
getConnection();
int cnt = -1;
try {
String sql = "update movie set id=?, name=?, age=?, genre=?, time=?, partner=?, memo=? where num=?";
ps = conn.prepareStatement(sql);
ps.setString(1, mb.getId());
ps.setString(2, mb.getName());
ps.setInt(3, mb.getAge());
ps.setString(4, mb.getGenre());
ps.setString(5, mb.getTime());
ps.setInt(6, mb.getPartner());
ps.setString(7, mb.getMemo());
ps.setInt(8, mb.getNum());
cnt = ps.executeUpdate();
} finally { /* 리소스 정리 */ }
return cnt;
}
✔️ getMovieByNum() → 수정폼에 기존 데이터 표시
✔️ updateMovie() → 변경된 데이터 DB에 반영
✅ 정리
- updateForm.jsp
- num 받아서 해당 데이터 불러오기
- 기존 값들을 폼에 표시 (체크박스, 라디오, select 포함)
- updateProc.jsp
- 수정된 값들을 MovieBean에 묶어서 DAO로 전달
- 다중 선택값(장르)은 별도 처리
- MovieDao
- getMovieByNum() : 수정폼에 보여줄 데이터 조회
- updateMovie() : DB에 업데이트 실행
- Form.jsp → 화면만 담당 (Bean 필요 없음)
- Proc.jsp → 입력값을 Bean에 담아 DAO로 전달 (Bean 필수)
- Select.jsp → DAO가 반환한 Bean 리스트를 출력 (Bean 직접 생성 ❌, DAO가 만들어줌)
Proc.jsp에서만 Bean을 직접 호출하는 이유는 "사용자가 입력한 값(request 파라미터)"를 Bean에 묶어서 DAO로 보내는 역할이 있기 때문이에요.
'기초 및 언어 > ▶ Java&JSP' 카테고리의 다른 글
| 24 JSP + JDBC 다중 삭제 (multiDelete) 구현 (0) | 2025.09.15 |
|---|---|
| 23. JSP + JDBC delete예제 정리3 _ Movie (0) | 2025.09.15 |
| 21. JSP + JDBC insert , ajax 중복 체크 예제 정리 _ Movie (1) | 2025.09.15 |
| 20. JSP + JDBC Select 예제 정리 _ Movie (0) | 2025.09.15 |
| 19. JSP + JDBC multiDelete예제 정리2 _ Book (0) | 2025.09.13 |