Notice
Recent Posts
Recent Comments
Link
«   2026/06   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

정보처리기사 실기

🪑7. action.jsp 작성하기 본문

🪑 독서실 자리관리 프로그램

🪑7. action.jsp 작성하기

윤서입니다롱 2026. 6. 2. 11:10

자리등록 데이터를 실제 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