----------------------------------------------
성적관리 JSP(JDBC) 프로그램(1)
- JSP&JDBC 프로그램 작성은 아래 순서를 따른다.
기능 구현 분석 > 화면 구성(웹 환경) > 데이터베이스(샘플 쿼리) 준비 > 클래스 (JSP 포함) 구성 분석 > 액션 코드 작성(출력->입력->삭제->수정) > 테스트(콘솔 환경) > 최종 결과(웹 환경)
1. 기능 구현
- 학생 테이블에는 학생의 개인 정보(번호, 학생 이름, 전화번호)가 저장된다.
- 성적 테이블에는 학생의 성적 정보(번호, 과목1, 과목2, 과목3)가 저장된다.
- 번호 항목은 학생 테이블의 PK, 성적 테이블의 PK&FK로 지정한다.
- 학생 출력시 번호, 학생 이름, 전화번호, 성적 입력 여부가 출력된다.
- 학생 입력은 학생 이름, 전화번호를 입력한다.
- 성적 출력시 번호, 학생이름, 과목1, 과목2, 과목3, 총점, 평균, 판정 점수가 출력한다.
- 판정 기준은 합격, 과락, 불합격으로 구분한다.
- 성적 입력이 안된 학생인 경우는 번호, 학생 이름만 출력하고 점수는 null 문자 또는 X 문자로 출력한다.
- 성적 입력은 학생 개개인별로 과목1, 과목2, 과목3 점수를 입력한다.
2. 화면 구성
---------------------------------------------------
학생명단버튼 성적출력버튼
--- 학생 명단 ---
학생추가버튼
전체 학생 수 : 2명
-----------------------------------------
번호, 학생 이름, 전화번호, 성적 입력 여부
-----------------------------------------
1, kim, 010-111-1111, O
2, park, 010-222-2222, X
---------------------------------------------------
학생명단버튼 성적출력버튼
--- 학생 추가 ---
이름 [ ]
전화번호 [ ]
학생추가버튼
---------------------------------------------------
학생명단버튼 성적출력버튼
--- 성적 출력 ---
전체 학생 수 : 2명
-----------------------------------------
번호, 학생이름, 과목1, 과목2, 과목3, 총점, 평균, 판정
-----------------------------------------
1, kim, 100, 100, 100, 300, 100.0, 합격 성적추가버튼(비활성)
2, choi, X, X, X, X, X, 불합격 성적추가버튼(활성)
---------------------------------------------------
학생명단버튼 성적출력버튼
--성적 추가--
번호* [3 ] readonly
학생이름* [choi ] readonly
과목1(0~100) [ ]
과목2(0~100) [ ]
과목3(0~100) [ ]
성적추가버튼
3. 데이터베이스 준비
-- 학생 테이블 생성
CREATE TABLE student (
sid NUMBER --PK
,name VARCHAR2(30) -->NVARCHAR2(30)
,tel VARCHAR2(30)
);
--PK 제약 추가
ALTER TABLE student
ADD CONSTRAINT student_sid_pk PRIMARY KEY(sid);
--방법1
--일련번호 생성을 위한 시퀀스 객체 생성
CREATE SEQUENCE studentSeq;
--INSERT 쿼리 샘플 (프로그램 사용 예정)
INSERT INTO student (sid, name, tel)
VALUES (studentSeq.nextval, 'kim', '010-111-1111');
INSERT INTO student (sid, name, tel)
VALUES (studentSeq.nextval, 'park', '010-222-2222');
--방법2
INSERT INTO student (sid, name, tel)
VALUES ((SELECT NVL(MAX(sid),0)+1 FROM student), '김길동', '010-111-1111');
INSERT INTO student (sid, name, tel)
VALUES ((SELECT NVL(MAX(sid),0)+1 FROM student), '박길동', '010-222-2222');
COMMIT;
--학생 명단 출력
SELECT sid, name, tel
FROM student
ORDER BY sid;
--성적 테이블 생성
CREATE TABLE grade (
sid NUMBER --PK and FK
,sub1 NUMBER(3) --CHECK 제약 추가
,sub2 NUMBER(3) --CHECK 제약 추가
,sub3 NUMBER(3) --CHECK 제약 추가
);
--제약 추가
ALTER TABLE grade
ADD (CONSTRAINT grade_sid_pk PRIMARY KEY(sid)
, CONSTRAINT grade_sub1_ck CHECK (sub1 BETWEEN 0 AND 100)
, CONSTRAINT grade_sub2_ck CHECK (sub2 BETWEEN 0 AND 100)
, CONSTRAINT grade_sub3_ck CHECK (sub3 BETWEEN 0 AND 100));
ALTER TABLE grade
ADD CONSTRAINT grade_sid_fk FOREIGN KEY (sid)
REFERENCES student(sid);
SELECT *
FROM constraint_check
WHERE table_name='GRADE';
--INSERT 쿼리 샘플 (프로그램에서 사용 예정)
INSERT INTO grade (sid, sub1, sub2, sub3)
VALUES (1, 100, 100, 100); --O
COMMIT;
--학생 테이블의 자료 2명으로 만들 것.
SELECT * FROM student;
--성적 테이블의 자료 1명으로 만들 것.
SELECT * FROM grade;
--학생수 출력 쿼리
SELECT COUNT(*) AS count FROM student;
--학생 전체 명단 출력 쿼리 (프로그램에서 사용 예정)
--번호, 학생 이름, 전화번호, 성적 입력 여부(0 또는 1)
--학생 테이블 + 성적 테이블 -> JOIN, SUB QUERY
--방법1
--OUTER JOIN의 경우
SELECT s.sid AS sid, name, tel
, DECODE(sub1, NULL, 0, 1) AS sub --성적 입력 여부 (1 또는 0)
FROM student s, grade g
WHERE s.sid = g.sid(+);
--방법2
SELECT sid, name, tel
, (SELECT COUNT(*) FROM grade WHERE sid=s.sid) AS sub --성적 입력 여부 (1 또는 0)
FROM student s
ORDER BY sid;
-->뷰(View)로 등록하는 것을 권장
CREATE OR REPLACE VIEW studentView
AS
SELECT sid, name, tel
, (SELECT COUNT(*) FROM grade WHERE sid=s.sid) AS sub
FROM student s
ORDER BY sid;
-->뷰를 이용한 학생 전체 명단 출력 쿼리
SELECT sid, name, tel, sub
FROM studentView;
--학생 검색 쿼리(성적 입력 전에 학생 정보 검색 과정에서 사용. 프로그램에서 사용 예정)
SELECT sid, name, tel, sub
FROM studentView
WHERE sid=1;
--성적 출력 쿼리 (프로그램에서 사용 예정)
--번호, 학생이름, 과목1, 과목2, 과목3, 총점, 평균, 판정(0 합격, 1 과락, 2 불합격)
--학생 테이블->번호, 학생이름
--성적 테이블->과목1, 과목2, 과목3
--총점, 평균, 판정 -> 계산 결과
--학생 테이블 + 성적 테이블 -> JOIN, SUB QUERY
주의) 오라클에서 NULL 데이터는 자바에서는 String 자료형인 경우에만 처리 가능.
NUMBER -> int -> 숫자 서식 지정 가능
VARCHAR2 -> String -> 문자열 서식 지정 가능
NUMBER + NULL -> String -> NULL이 아닌 경우에만 Integer.parseInt(String) 가능
VARCHAR2 + NULL -> String
--OUTER JOIN의 경우
SELECT sid, name, sub1, sub2, sub3, tot, ave
, ( CASE
WHEN ave>=60 AND sub1>=40 AND sub2>=40 AND sub3>=40 THEN 0 --합격
WHEN ave>=60 THEN 1 --과락
ELSE 2 --불합격
END ) AS ch
FROM (SELECT s.sid AS sid, name, sub1, sub2, sub3
, (sub1 + sub2 + sub3) AS tot
, ( (sub1 + sub2 + sub3) / 3 ) AS ave
FROM student s, grade g
WHERE s.sid = g.sid(+));
--> 뷰(View) 등록
CREATE OR REPLACE VIEW gradeView
AS
SELECT sid, name, sub1, sub2, sub3, tot, ave
, ( CASE
WHEN ave>=60 AND sub1>=40 AND sub2>=40 AND sub3>=40 THEN 0 --합격
WHEN ave>=60 THEN 1 --과락
ELSE 2 --불합격
END ) AS ch
FROM (SELECT s.sid AS sid, name, sub1, sub2, sub3
, (sub1 + sub2 + sub3) AS tot
, ( (sub1 + sub2 + sub3) / 3 ) AS ave
FROM student s, grade g
WHERE s.sid = g.sid(+));
--> 뷰를 이용한 성적 출력
SELECT sid, name, sub1, sub2, sub3, tot, ave
, ch --판정(0, 1, 2)
FROM gradeView
ORDER BY sid;
-----------------------------------------------
학생 테이블에서 이름 저장용 컬럼의 자료형을 수정. 한글 자료 저장.
VARCHAR2(30) -> NVARCHAR2(30)
ALTER TABLE student
MODIFY (name NVARCHAR2(30));
DESC student;
4. 프로그램 구성
//DBConn.java
//StudentMain.jsp -> 학생 명단 출력 페이지. 메인 페이지.
//StudentInsertForm.jsp -> 학생 입력 폼 페이지.
//StudentInsert.jsp -> 학생 입력 액션 페이지. 액션 전용 페이지.
//GradeMain.jsp -> 성적 출력 페이지.
//GradeInsertForm.jsp -> 성적 입력 폼 페이지.
//GradeInsert.jsp -> 성적 입력 액션 페이지. 액션 전용 페이지.
//TableStyle.css
//DivStyle.css
//요청주소
http://localhost:8090/프로젝트이름/StudentMain.jsp
5. 프로그램 소스 코드
//TableStyle.css
@CHARSET "UTF-8";
table#t01 {
width: 100%;
background-color: #E5E5E5;
}
table#t01 tr:nth-child(odd) {
background-color: #eee;
}
table#t01 tr:nth-child(even) {
background-color: #fff;
}
table#t01 th {
color: white;
background-color: #595959;
}
table#t01 td {
text-align: center;
}
table#t02 {
width: 100%;
background-color: #E5E5E5;
}
table#t02 tr {
background-color: #fff;
}
table#t02 th {
color: white;
background-color: #595959;
}
//DivStyle.css
@CHARSET "UTF-8";
/* element Selector */
/* color 속성은 글자색 지정 속성 */
div { color:#404040; }
/* class Selector - class 속성이 있는 태그만 찾는다. */
/* height 고정된 높이 지정 */
/* background-color 배경색 지정 */
div.title {padding:10px; background-color: #E5E5E5;}
/* 하위 요소 선택자 - 조상 선택자와 자손 선택자 표기 */
/* font-size 글꼴 크기 지정 */
/* margin 바깥쪽 여백 지정 */
/* margin-left 바깥쪽 여백 중에서 왼쪽 여백 지정 */
div.title h1 {font-size:18pt; margin:0px; margin-left:10px;}
/* letter-spacing 자간 지정 */
div.title h2 {font-size:10pt; margin:0px; margin-left:50px; letter-spacing: 5px;}
div.title p {font-size:14pt; margin:0px; margin-left:10px; margin-top:5px;}
/* min-height 최소 높이 지정 */
/* padding 내부 여백 지정 */
div.main {padding-top:3px; paddig-bottom:3px; min-height: 300px;}
h1 {font-size:18pt;}
h2 {font-size:14pt;}
a { font-size:12pt; text-decoration: none; color:#404040; }
a:hover { text-decoration: underline; color:#2D2D2D; }
//StudentMain.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<%@ page import="com.test.*" %>
<%
//학생 명단 결과 저장용 임시 변수
StringBuilder sb = new StringBuilder();
//인원수 저장용 임시 변수
int count = 0;
Connection conn = null;
PreparedStatement pstmt1 = null;
PreparedStatement pstmt2 = null;
try {
conn = DBConn.getConnection();
//인원수 출력 쿼리
String sql1 = "SELECT COUNT(*) AS \"count\" FROM studentView";
//학생 명단 출력 쿼리
String sql2 = "SELECT sid, name, tel, sub FROM studentView";
//문제) 데이터베이스 액션 처리 과정 추가
//-> 성적 입력 여부는 1, 0으로 반환되는데 O, X로 출력되도록 수정할 것.
pstmt1 = conn.prepareStatement(sql1);
ResultSet rs1 = pstmt1.executeQuery();
while (rs1.next()) {
count = rs1.getInt("count");
}
rs1.close();
pstmt2 = conn.prepareStatement(sql2);
ResultSet rs2 = pstmt2.executeQuery();
while (rs2.next()) {
//웹페이지 동적 생성 과정 추가. -> Table 태그
sb.append(String.format("<tr>\r\n"));
sb.append(String.format("<td>%s</td>", rs2.getString("sid")));
sb.append(String.format("<td>%s</td>", rs2.getString("name")));
sb.append(String.format("<td>%s</td>", (rs2.getString("tel")==null)?"전화번호 없음":rs2.getString("tel")));
sb.append(String.format("<td>%s</td>", (rs2.getInt("sub")==0)?"X":"O"));
sb.append(String.format("</tr>\r\n"));
}
rs2.close();
}catch(Exception e){
e.printStackTrace();
}finally{
try {
if (pstmt1 != null) {
pstmt1.close();
}
if (pstmt2 != null) {
pstmt2.close();
}
}catch(Exception e){
}
DBConn.close();
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>성적관리</title>
<link rel="stylesheet" type="text/css" href="TableStyle.css">
<link rel="stylesheet" type="text/css" href="DivStyle.css">
</head>
<body>
<div>
<!-- 메인 메뉴 영역 -->
<div class="title">
<h1>성적관리 (JSP버전)</h1>
<p>
[<a href="StudentMain.jsp">학생관리</a>]
[<a href="GradeMain.jsp">성적관리</a>]
</p>
</div>
<!-- 콘텐츠 영역 -->
<div class="main">
<h2>학생 출력</h2>
<form><input type="button" value="학생 추가" onclick="location.href='StudentInsertForm.jsp'"></form>
<!-- <p>전체 학생수 : 1 명 </p> -->
<p>전체 학생수 : <%=count%> 명 </p>
<table id="t01">
<tr>
<th>번호</th><th>이름</th>
<th>전화번호</th><th>성적입력여부</th>
</tr>
<!--
<tr>
<td>1</td><td>홍길동</td>
<td>010-123-1234</td><td>X</td>
</tr>
-->
<%=sb.toString()%>
</table>
</div>
</div>
</body>
</html>
//StudentInsertForm.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>성적관리</title>
<link rel="stylesheet" type="text/css" href="TableStyle.css">
<link rel="stylesheet" type="text/css" href="DivStyle.css">
<script type="text/javascript">
window.onload=function() {
/* 문제)
1. 필수 항목에 대한 데이터 검증 과정 추가
2. 서브밋 액션
*/
};
</script>
</head>
<body>
<div>
<!-- 메인 메뉴 영역 -->
<div class="title">
<h1>성적관리 (JSP버전)</h1>
<p>
[<a href="StudentMain.jsp">학생관리</a>]
[<a href="GradeMain.jsp">성적관리</a>]
</p>
</div>
<!-- 콘텐츠 영역 -->
<div class="main">
<h2>학생 추가</h2>
<form><input type="button" value="학생 출력" onclick="location.href='StudentMain.jsp'"></form>
<form action="StudentInsert.jsp" method="post" id="myForm">
<table id="t02" >
<tr>
<th>이름*</th>
<td><input type="text" name="name" id="name">(30자 이내)</td>
</tr>
<tr>
<th>전화번호</th>
<td><input type="text" name="tel" id="tel">(30자 이내)</td>
</tr>
<tr>
<th></th>
<td>
<input type="submit">
<span id="errorMsg" style="color:red;"></span>
</td>
</tr>
</table>
</form>
</div>
</div>
</body>
</html>
//StudentInsert.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%-- 액션 전용 페이지 - HTML 코드 삭제, 강제 페이지 전환 --%>
<%@ page import="java.sql.*" %>
<%@ page import="com.test.*" %>
<%
//문제)
//데이터 수신(한글 인코딩 추가)
//데이터베이스 액션
//-> INSERT INTO student (sid, name, tel) VALUES ((SELECT NVL(MAX(sid),0)+1 FROM student), ?, ?)
request.setCharacterEncoding("UTF-8");
String name = request.getParameter("name");
String tel = request.getParameter("tel");
Connection conn = null;
PreparedStatement pstmt = null;
try {
conn = DBConn.getConnection();
String sql = "INSERT INTO student (sid, name, tel) VALUES ((SELECT NVL(MAX(sid),0)+1 FROM student), ?, ?)";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, name);
pstmt.setString(2, tel);
pstmt.executeUpdate();
}catch(Exception e){
e.printStackTrace();
}finally{
try {
if (pstmt != null) {
pstmt.close();
}
}catch(Exception e){
}
DBConn.close();
}
response.sendRedirect("StudentMain.jsp");
%>
//GradeMain.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<%@ page import="com.test.*" %>
<%
//성적 결과 저장용 임시 변수
StringBuilder sb = new StringBuilder();
//인원수 저장용 임시 변수
int count = 0;
Connection conn = null;
PreparedStatement pstmt1 = null;
PreparedStatement pstmt2 = null;
try {
conn = DBConn.getConnection();
String sql1 = "SELECT COUNT(*) AS \"count\" FROM studentView";
String sql2 = "SELECT sid, name, sub1, sub2, sub3, tot, ave, ch FROM gradeView ORDER BY sid";
pstmt1 = conn.prepareStatement(sql1);
ResultSet rs1 = pstmt1.executeQuery();
while(rs1.next()) {
count = rs1.getInt("count");
}
rs1.close();
pstmt2 = conn.prepareStatement(sql2);
ResultSet rs2 = pstmt2.executeQuery();
//판정 출력을 위한 메시지 배열 준비
String[] array = {"합격", "과락", "불합격"};
while(rs2.next()) {
//웹페이지 동적 생성 과정 추가. -> Table 태그
sb.append(String.format("<tr>\r\n"));
sb.append(String.format("<td>%s</td>", rs2.getString("sid")));
sb.append(String.format("<td>%s</td>", rs2.getString("name")));
//과목1, 과목2, 과목3, 총점 출력시 null이면 X로 출력하고
//null이 아니면 점수 자체를 출력
sb.append(String.format("<td>%s</td>", (rs2.getString("sub1")==null)?"X":rs2.getString("sub1") ));
sb.append(String.format("<td>%s</td>", (rs2.getString("sub2")==null)?"X":rs2.getString("sub2")));
sb.append(String.format("<td>%s</td>", (rs2.getString("sub3")==null)?"X":rs2.getString("sub3")));
sb.append(String.format("<td>%s</td>", (rs2.getString("tot")==null)?"X":rs2.getString("tot")) );
//평균 출력시 null이면 X로 출력하고
//null이 아니면 소수 이하 한 자리 서식 지정 출력
sb.append(String.format("<td>%s</td>", (rs2.getString("ave")==null)?"X":String.format("%.1f",rs2.getDouble("ave"))));
//판정 출력시 0-합격, 1-과락, 2-불합격 출력
sb.append(String.format("<td>%s</td>", array[rs2.getInt("ch")] ));
//성적 추가 버튼은 성적별로 별도 추가
//성적이 이미 입력된 경우는 버튼에 대해서 비활성 처리
//->과목1이 null인지 확인
//버튼 클릭시 GradeInsertForm.jsp 페이지로 연결되도록 지정
//페이지 연결시 sid 값을 넘기는 과정 필요(GET방식 전송)
sb.append(String.format("<td><input type=\"button\" value=\"성적 추가\" %s onclick=\"location.href='GradeInsertForm.jsp?sid=%s'\"></td>", (rs2.getString("sub1")==null)?"":"disabled=\"disabled\"" , rs2.getString("sid") ));
sb.append(String.format("<tr>\r\n"));
}
rs2.close();
}catch(Exception e){
e.printStackTrace();
}finally{
try {
if (pstmt1 != null) {
pstmt1.close();
}
if (pstmt2 != null) {
pstmt2.close();
}
}catch(Exception e){
}
DBConn.close();
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>성적관리</title>
<link rel="stylesheet" type="text/css" href="TableStyle.css">
<link rel="stylesheet" type="text/css" href="DivStyle.css">
</head>
<body>
<div>
<!-- 메인 메뉴 영역 -->
<div class="title">
<h1>성적관리 (JSP버전)</h1>
<p>
[<a href="StudentMain.jsp">학생관리</a>]
[<a href="GradeMain.jsp">성적관리</a>]
</p>
</div>
<!-- 콘텐츠 영역 -->
<div class="main">
<!-- 문제) 성적 출력 페이지 작성 -->
<h2>성적 출력</h2>
<!-- <p>전체 학생수 : 2 명 </p> -->
<p>전체 학생수 : <%=count%> 명 </p>
<form>
<table id="t01">
<tr>
<th>번호</th><th>학생이름</th><th>과목1</th><th>과목2</th><th>과목3</th>
<th>총점</th><th>평균</th><th>판정</th><th>성적추가</th>
</tr>
<!--
<tr>
<td>1</td><td>kim</td>
<td>100</td><td>100</td><td>100</td><td>300</td><td>100.0</td><td>합격</td>
<td><input type="button" value="성적 추가" onclick="" disabled="disabled"></td>
</tr>
<tr>
<td>2</td><td>choi</td>
<td>x</td><td>x</td><td>x</td><td>x</td><td>x</td><td>불합격</td>
<td><input type="button" value="성적 추가" onclick="location.href='GradeInsertForm.jsp'"></td>
</tr>
-->
<%=sb.toString()%>
</table>
</form>
</div>
</div>
</body>
</html>
//GradeInsertForm.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<%@ page import="com.test.*" %>
<%
String sid = "";
String name = "";
//데이터 수신
sid = request.getParameter("sid");
//데이터베이스 액션 처리
//SELECT name FROM studentView WHERE sid=번호;
Connection conn = null;
PreparedStatement pstmt = null;
try {
conn = DBConn.getConnection();
String sql = "SELECT name FROM studentView WHERE sid=?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, sid);
ResultSet rs = pstmt.executeQuery();
while(rs.next()){
name = rs.getString("name");
}
rs.close();
}catch(Exception e){
e.printStackTrace();
}finally{
try {
if (pstmt != null) {
pstmt.close();
}
}catch(Exception e){
}
DBConn.close();
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>성적관리</title>
<link rel="stylesheet" type="text/css" href="TableStyle.css">
<link rel="stylesheet" type="text/css" href="DivStyle.css">
<script type="text/javascript">
window.onlaod=function() {
//문제)
//번호, 이름 -> 자동 입력 -> 검증 과정 X
//과목1, 과목2, 과목3에 대한 데이터 검증 과정
//서브밋 액션
};
</script>
</head>
<body>
<div>
<!-- 메인 메뉴 영역 -->
<div class="title">
<h1>성적관리 (JSP버전)</h1>
<p>
[<a href="StudentMain.jsp">학생관리</a>]
[<a href="GradeMain.jsp">성적관리</a>]
</p>
</div>
<!-- 콘텐츠 영역 -->
<div class="main">
<!-- 문제) 성적 입력 폼 페이지 작성 -->
<h2>성적 추가</h2>
<form>
<input type="button" value="성적 출력" onclick="location.href='GradeMain.jsp'">
</form>
<form action="GradeInsert.jsp" method="post" id="myForm">
<table id="t02" >
<tr>
<th>번호*</th>
<td><input type="text" id="sid" name="sid" value="<%=sid%>" readonly="readonly"> readonly</td>
</tr>
<tr>
<th>학생이름*</th>
<td><input type="text" id="name" name="name" value="<%=name%>" readonly="readonly"> readonly</td>
</tr>
<tr>
<th>과목1*</th>
<td><input type="text" id="sub1" name="sub1"> (0~100)</td>
</tr>
<tr>
<th>과목2*</th>
<td><input type="text" id="sub2" name="sub2"> (0~100)</td>
</tr>
<tr>
<th>과목3*</th>
<td><input type="text" id="sub3" name="sub3"> (0~100)</td>
</tr>
<tr>
<th></th>
<td style="text-align:left;">
<input type="submit">
<span id="errorMsg" style="color:red;"></span>
</td>
</tr>
</table>
</form>
</div>
</div>
</body>
</html>
//GradeInsert.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%-- 액션 전용 페이지 - HTML 코드 삭제, 강제 페이지 전환 --%>
<%@ page import="java.sql.*"%>
<%@ page import="com.test.*"%>
<%
//문제)
//데이터 수신(한글 인코딩 추가)
//데이터베이스 액션
//INSERT INTO grade (sid, sub1, sub2, sub3) VALUES (?, ?, ?, ?)
response.sendRedirect("GradeMain.jsp");
%>
------------------------------------------------------------
'JSP' 카테고리의 다른 글
07일차_직원관리_JSTL라이브러리 사용 준비 (1) | 2015.06.22 |
---|---|
06일차_회원관리2차, 성적관리2차 (0) | 2015.06.22 |
04일차_회원관리1차 (0) | 2015.06.22 |
03일차_오라클 연결, SELECT 쿼리 실행 테스트 (1) | 2015.06.22 |
02일차_데이터송수신 (0) | 2015.06.22 |