정보처리기사 실기
🪑7. action.jsp 작성하기 본문
자리등록 데이터를 실제 DB에 저장하기
앞에서 reg.jsp를 작성하면서 사용자가 독서실 자리 정보를 입력할 수 있는 화면을 만들었습니다.
하지만 reg.jsp는 입력 화면일 뿐입니다.
사용자가 입력한 값을 실제 데이터베이스에 저장하려면 별도의 처리 페이지가 필요합니다.
그 역할을 하는 파일이:
action.jsp
입니다.
1. action.jsp가 필요한 이유
현재 프로젝트의 흐름은 다음과 같습니다.
reg.jsp
→ 자리등록 정보 입력
action.jsp
→ 입력받은 값을 DB에 저장
즉 reg.jsp와 action.jsp는 역할이 다릅니다.
reg.jsp → 입력 화면
action.jsp → DB 처리 화면
으로 나누어 생각하면 됩니다.
2. action.jsp가 하는 일
현재 문제에서 action.jsp는 다음 역할을 합니다.
1. reg.jsp에서 전달된 값 받기
2. 선택한 자리값을 가로위치, 세로위치로 나누기
3. INSERT SQL문 작성하기
4. tbl_studycafe 테이블에 저장하기
5. 저장 완료 메시지 출력하기
6. main.jsp로 이동하기
즉:
사용자가 입력한 독서실 자리 이용 정보를
실제로 DB에 저장하는 페이지
입니다.
3. action.jsp 전체 코드
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import = "java.sql.*" %>
<%@ page import = "DBPKG.Util" %>
<%
request.setCharacterEncoding("UTF-8");
Connection conn = Util.getConnection();
Statement stmt = conn.createStatement();
String pk_studycafe = request.getParameter("pk_studycafe");
String usage_date = request.getParameter("usage_date");
String usage_date_start = usage_date + " " + request.getParameter("usage_date_start");
String usage_date_end = usage_date + " " + request.getParameter("usage_date_end");
String fk_learner = request.getParameter("fk_learner");
String seat = request.getParameter("seat");
int seat_y = 0, seat_x = 0;
if(seat != null && seat.contains("/") ){
String[] parts = seat.split("/");
seat_y = Integer.parseInt(parts[0]);
seat_x = Integer.parseInt(parts[1]);
}
String sql =
" INSERT INTO tbl_studycafe VALUES('" + pk_studycafe + "'"+
" , TO_DATE('" + usage_date_start + "','YYYY-MM-DD HH24')"+
" , TO_DATE('" + usage_date_end + "','YYYY-MM-DD HH24')"+
" , '" + seat_x + "'"+
" , '" + seat_y + "'"+
" , '" + fk_learner + "')";
//out.print(sql);
ResultSet rs = stmt.executeQuery(sql);
%>
<%
rs.close();
conn.close();
stmt.close();
%>
<script>
alert("자리등록이 정상적으로 되었습니다.");
window.location.href = "main.jsp";
</script>
4. action.jsp는 화면보다 DB 처리가 중심입니다
앞에서 만든:
index.jsp
main.jsp
reg.jsp
는 화면 출력이 중심이었습니다.
하지만 action.jsp는 조금 다릅니다.
현재 페이지는 사용자에게 보여주는 화면보다는:
DB 작업 처리
가 중심인 파일입니다.
즉:
데이터 저장 전용 페이지
라고 생각하면 됩니다.
5. UTF-8 설정하기
request.setCharacterEncoding("UTF-8");
현재 프로젝트는 한글 데이터를 사용합니다.
예를 들어 학습자 이름이나 경고문 등이 한글로 표시됩니다.
따라서 입력값을 받을 때 한글이 깨지지 않도록 UTF-8 설정을 해줍니다.
6. DB 연결하기
Connection conn = Util.getConnection();
Statement stmt = conn.createStatement();
현재 페이지에서는 INSERT SQL문을 실행해야 합니다.
따라서 Oracle DB 연결이 필요합니다.
코드역할
| Connection conn | DB 연결 |
| Statement stmt | SQL 실행 준비 |
7. request.getParameter() 사용하는 이유
현재 사용자가 입력하거나 선택한 값은 reg.jsp에서 넘어옵니다.
즉 action.jsp는 사용자가 입력한 데이터를 직접 가지고 있는 것이 아니라,
form에서 전달된 값을 받아와야 합니다.
그래서 사용하는 코드가:
request.getParameter()
입니다.
8. 전달받은 값 저장하기
자리등록번호 받기
String pk_studycafe = request.getParameter("pk_studycafe");
reg.jsp에서 자동 생성된 자리등록번호를 받습니다.
예:
00022
사용일자 받기
String usage_date = request.getParameter("usage_date");
사용자가 선택한 날짜를 받습니다.
예:
2025-04-25
사용 시작시간 만들기
String usage_date_start = usage_date + " " + request.getParameter("usage_date_start");
사용일자와 시작시간을 합쳐서 하나의 날짜/시간 문자열로 만듭니다.
예를 들어:
usage_date = 2025-04-25
usage_date_start = 10
이라면 결과는:
2025-04-25 10
이 됩니다.
사용 종료시간 만들기
String usage_date_end = usage_date + " " + request.getParameter("usage_date_end");
사용일자와 종료시간도 같은 방식으로 합칩니다.
예:
2025-04-25 16
학습자 코드 받기
String fk_learner = request.getParameter("fk_learner");
사용자가 선택한 학습자 코드를 받습니다.
화면에는 영희처럼 이름이 보였지만 실제로 넘어오는 값은:
L0001
입니다.
자리값 받기
String seat = request.getParameter("seat");
사용자가 선택한 자리를 받습니다.
reg.jsp에서 radio 버튼의 value를 다음처럼 만들었습니다.
세로위치/가로위치
예를 들어 세로 3, 가로 5를 선택했다면:
3/5
가 넘어옵니다.
9. seat 값을 세로위치와 가로위치로 나누기
int seat_y = 0, seat_x = 0;
if(seat != null && seat.contains("/") ){
String[] parts = seat.split("/");
seat_y = Integer.parseInt(parts[0]);
seat_x = Integer.parseInt(parts[1]);
}
현재 seat 값은 "3/5"처럼 하나의 문자열로 넘어옵니다.
하지만 DB에는 다음 컬럼이 따로 있습니다.
seat_x → 자리 가로위치
seat_y → 자리 세로위치
그래서 / 기준으로 값을 나누어야 합니다.
예를 들어:
seat = "3/5"
이면:
parts[0] = 3 → seat_y
parts[1] = 5 → seat_x
가 됩니다.
즉:
reg.jsp에서는 하나로 선택
action.jsp에서는 두 값으로 분리
하는 구조입니다.
10. INSERT SQL문 작성하기
이번 문제의 핵심입니다.
현재 사용자가 입력한 독서실 자리 정보를:
tbl_studycafe
테이블에 저장해야 합니다.
그래서 INSERT SQL문을 작성합니다.
String sql =
" INSERT INTO tbl_studycafe VALUES('" + pk_studycafe + "'"+
" , TO_DATE('" + usage_date_start + "','YYYY-MM-DD HH24')"+
" , TO_DATE('" + usage_date_end + "','YYYY-MM-DD HH24')"+
" , '" + seat_x + "'"+
" , '" + seat_y + "'"+
" , '" + fk_learner + "')";
11. 현재 SQL문이 하는 일
현재 SQL문은 사용자가 입력한 값을 tbl_studycafe 테이블에 저장합니다.
예를 들어 사용자가 다음 값을 입력했다고 가정합니다.
자리등록번호: 00022
사용일자: 2025-04-25
시작시간: 10
종료시간: 16
학습자: L0001
자리: 3/5
그러면 실제 SQL은 다음처럼 완성됩니다.
INSERT INTO tbl_studycafe
VALUES(
'00022',
TO_DATE('2025-04-25 10','YYYY-MM-DD HH24'),
TO_DATE('2025-04-25 16','YYYY-MM-DD HH24'),
'5',
'3',
'L0001'
)
즉:
L0001 학습자가
2025-04-25 10시부터 16시까지
가로 5, 세로 3 자리를 사용했다
라는 정보가 저장됩니다.
12. TO_DATE를 사용하는 이유
usage_date_start와 usage_date_end는 DB에서 DATE 타입입니다.
하지만 JSP에서 전달받은 값은 문자열입니다.
그래서 Oracle에 저장할 때 날짜 형태로 바꿔줘야 합니다.
TO_DATE('2025-04-25 10','YYYY-MM-DD HH24')
이 코드는 문자열을 날짜/시간으로 변환합니다.
13. 문자열 연결(+) 사용하는 이유
현재 SQL문 안에는 사용자마다 달라지는 값이 들어가야 합니다.
예를 들어:
pk_studycafe
usage_date_start
usage_date_end
seat_x
seat_y
fk_learner
값은 등록할 때마다 달라집니다.
그래서 문자열 연결 연산자인:
+
를 사용해서 SQL문을 완성합니다.
14. SQL 실행하기
ResultSet rs = stmt.executeQuery(sql);
현재 SQL문은 INSERT문입니다.
실습 코드에서는 executeQuery()를 사용했지만,
개념적으로는 INSERT/UPDATE/DELETE는 executeUpdate()를 사용하는 것이 더 일반적입니다.
정리하면 다음과 같습니다.
메서드사용
| executeQuery() | SELECT 조회 |
| executeUpdate() | INSERT / UPDATE / DELETE |
따라서 개념적으로는 아래 코드가 더 적절합니다.
stmt.executeUpdate(sql);
다만 실습에서는 제공 코드 흐름에 맞춰 그대로 사용할 수도 있습니다.
15. out.print(sql)을 주석으로 둔 이유
//out.print(sql);
이 코드는 완성된 SQL문을 화면에 출력해서 확인할 때 사용합니다.
오류가 날 때는 주석을 잠깐 풀어서
SQL문이 어떻게 만들어졌는지 확인할 수 있습니다.
예를 들어:
날짜 형식이 잘못되었는지
seat_x, seat_y가 제대로 들어갔는지
확인할 때 유용합니다.
16. DB 연결 닫기
rs.close();
conn.close();
stmt.close();
DB 사용이 끝났기 때문에 연결을 닫아줍니다.
다만 executeUpdate()를 사용하는 방식으로 바꾼다면 ResultSet rs가 필요 없으므로
rs.close()도 필요하지 않습니다.
17. 저장 완료 메시지 출력하기
<script>
alert("자리등록이 정상적으로 되었습니다.");
window.location.href = "main.jsp";
</script>
현재 DB 저장이 끝나면 사용자에게 완료 메시지를 보여줘야 합니다.
그래서:
alert()
를 사용합니다.
18. 저장 후 페이지 이동하기
window.location.href = "main.jsp";
저장 완료 후 메인 화면으로 이동합니다.
즉 흐름은 다음과 같습니다.
사용자 입력
→ 등록 버튼 클릭
→ action.jsp 실행
→ DB 저장
→ 완료 메시지 출력
→ main.jsp 이동
19. 현재까지의 프로젝트 흐름
db.sql
→ DB 생성
index.jsp
→ 전체 화면 틀
style.css
→ 디자인 적용
main.jsp
→ 프로그램 설명 화면
reg.jsp
→ 사용자 입력 화면
action.jsp
→ 실제 DB 저장 처리
20. 핵심 정리
현재 action.jsp에서 가장 중요한 것은:
사용자 입력값을 받아서
실제 DB에 INSERT 하는 흐름
입니다.
특히 이번 독서실 프로그램에서는 자리값이:
3/5
처럼 하나의 문자열로 넘어오기 때문에
이를 seat_y, seat_x로 나누어 DB에 저장하는 부분이 중요합니다.
즉 현재 프로젝트 구조는:
reg.jsp
→ 사용자 입력
action.jsp
→ DB 저장 처리
로 역할이 분리되어 있다는 점을 이해하는 것이 중요합니다.
'🪑 독서실 자리관리 프로그램' 카테고리의 다른 글
| 🪑9. search.jsp 작성하기 (0) | 2026.06.02 |
|---|---|
| 🪑8. list.jsp 작성하기 (0) | 2026.06.02 |
| 🪑6. reg.jsp 작성하기 (0) | 2026.06.02 |
| 🪑5. main.jsp 작성하기 (0) | 2026.06.02 |
| 🪑4. style.css 작성하기 (0) | 2026.06.02 |
