05일차_성적관리1차

JSP 2015. 6. 22. 23:08

----------------------------------------------

성적관리 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");

%>






------------------------------------------------------------
























블로그 이미지

알 수 없는 사용자

,