반응형
01. JDBC이용을 위한 default 설정
- 접속하는 서버나, 사용자 이름이 다르면 변경하고, 나머지는 다 똑같이 설정하면 됨
- 세미프로젝트에 접속하는 서버는 강사님 서버 이용할 것이니 변경해서 사용하자!
ojdbc11.jar
- 빌드 처리 확인 후 사용하기
JNDI 기술을 사용하기 위해 context.xml 생성
<!-- WAS 프로그램 객체 생성 관련 정보를 제공하기 위한 파일 -->
<!-- WAS 프로그램 실행 시 자동으로 파일을 읽어 필요한 정보를 저장함 -->
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<!--[url] [username] [password] 변경 후 사용 -->
<Resource name="jdbc/oracle" auth="Container" type="javax.sql.DataSource"
factory="org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@localhost:1521:xe" username="scott" password="tiger"
initialSize="10" maxIdle="10" maxTotal="15"/>
</Context>
JNDI 기술을 사용하기 위해 jdbcDAO.java 생성
package xyz.itwill.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
//JDBC 기능을 제공하는 DAO 클래스가 상속받기 위해 작성된 부모 클래스
// => 객체 생성이 목적이 아닌 상속으로 목적으로 작성된 클래스 - 추상클래스로 작성하는 것을 권장
// => 1. WAS 프로그램에 등록된 자원을 얻어와 DataSource 객체를 반환받아 저장 - 정적영역을 이용해 1번만 실행
// => 2. DataSource 객체로부터 Connection 객체를 제공받아 반환하는 메소드
// => 3. 매개변수로 JDBC 관련 객체를 제공받아 제거하는 메소드
public abstract class JdbcDAO {
//1.
//WAS 프로그램에 등록된 자원을 얻어와 DataSource 객체를 반환받아 저장 - 정적영역을 이용해 1번만 실행
private static DataSource dataSource; //Connection이 미리 10개 생성됨
static { //메모리가 로딩되면 자동으로 아래의 명령 실행되어 객체 만들어짐
try {
dataSource = (DataSource)new InitialContext().lookup("java:comp/env/jdbc/oracle");
}catch (NamingException e) {
e.printStackTrace();
}
}
//2.
//DataSource 객체로부터 Connection 객체를 제공받아 반환하
public Connection getConnection() throws SQLException {
return dataSource.getConnection();
}
//3.
//매개변수로 JDBC 관련 객체를 제공받아 제거하는 메소드
public void close(Connection con) {
try {
if(con!=null) con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
public void close(Connection con, PreparedStatement pstmt) {
try {
if(con!=null) con.close();
if(pstmt!=null) pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
public void close(Connection con, PreparedStatement pstmt, ResultSet rs) {
try {
if(con!=null) con.close();
if(pstmt!=null) pstmt.close();
if(rs!=null) rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
02. 테이블 생성 및 DTO 생성
🤎STUDENT 테이블
CREATE TABLE STUDENT
(NO NUMBER(4) PRIMARY KEY,
NAME VARCHAR2(50),
PHONE VARCHAR2(50),
ADDRESS VARCHAR2(100),
BIRTHDAY DATE);
🤎studentDTO.java
package xyz.itwill.dto;
/*
이름 널? 유형
-------- -------- -------------
NO NOT NULL NUMBER(4)
NAME VARCHAR2(50)
PHONE VARCHAR2(20)
ADDRESS VARCHAR2(100)
BIRTHDAY DATE
*/
//STUDENT 테이블의 학생정보를 저장하여 전달하기 위한 클래스 - VO클래스
public class StudentDTO {
private int no;
private String name;
private String phone;
private String address;
private String birthday;
public StudentDTO() {
// TODO Auto-generated constructor stub
}
public int getNo() {return no;}
public void setNo(int no) {this.no = no;}
public String getName() {return name;}
public void setName(String name) {this.name = name;}
public String getPhone() {return phone;}
public void setPhone(String phone) {this.phone = phone;}
public String getAddress() {return address;}
public void setAddress(String address) {this.address = address;}
public String getBirthday() {return birthday;}
public void setBirthday(String birthday) {this.birthday = birthday;}
}
03. DAO 생성
🤎studentDAO.java
package xyz.itwill.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import xyz.itwill.dto.StudentDTO;
//STUDENT 테이블의 학생정보에 대한 삽입,변경,삭제,검색 기능을 제공하기 위한 클래스 - JDBC
public class StudentDAO extends JdbcDAO {
private static StudentDAO _dao;
private StudentDAO() { //싱글톤디자인클래스의 핵심
// TODO Auto-generated constructor stub
}
static {
_dao=new StudentDAO();
}
public static StudentDAO getDAO() {
return _dao;
}
① insertStudent(StudentDTO student)
//학생정보를 전달받아 STUDENT 테이블에 삽입하고 삽입행의 갯수를 반환하는 메소드
public int insertStudent(StudentDTO student) {
Connection con=null;
PreparedStatement pstmt=null;
int rows=0;
try {
con=getConnection();
String sql="insert into student values(?,?,?,?,?)";
pstmt=con.prepareStatement(sql);
pstmt.setInt(1, student.getNo());
pstmt.setString(2, student.getName());
pstmt.setString(3, student.getPhone());
pstmt.setString(4, student.getAddress());
pstmt.setString(5, student.getBirthday());
rows=pstmt.executeUpdate();
} catch (SQLException e) {
System.out.println("[에러]insertStudent() 메소드의 SQL 오류 = "+e.getMessage());
} finally {
close(con, pstmt);
}
return rows;
}
② updateStudent(StudentDTO student)
//학생정보를 전달받아 STUDENT 테이블에 저장된 학생정보를 변경하고 변경행의 갯수를 반환하는 메소드
public int updateStudent(StudentDTO student) {
Connection con=null;
PreparedStatement pstmt=null;
int rows=0;
try {
con=getConnection();
String sql="update student set name=?,phone=?,address=?,birthday=? where no=?";
pstmt=con.prepareStatement(sql);
pstmt.setString(1, student.getName());
pstmt.setString(2, student.getPhone());
pstmt.setString(3, student.getAddress());
pstmt.setString(4, student.getBirthday());
pstmt.setInt(5, student.getNo());
rows=pstmt.executeUpdate();
} catch (SQLException e) {
System.out.println("[에러]updateStudent() 메소드의 SQL 오류 = "+e.getMessage());
} finally {
close(con, pstmt);
}
return rows;
}
③ deleteStudent(int no)
//학생번호를 전달받아 STUDENT 테이블에 저장된 학생정보를 삭제하고 삭제행의 갯수를 반환하는 메소드
public int deleteStudent(int no) {
Connection con=null;
PreparedStatement pstmt=null;
int rows=0;
try {
con=getConnection();
String sql="delete from student where no=?";
pstmt=con.prepareStatement(sql);
pstmt.setInt(1, no);
rows=pstmt.executeUpdate();
} catch (SQLException e) {
System.out.println("[에러]deleteStudent() 메소드의 SQL 오류 = "+e.getMessage());
} finally {
close(con, pstmt);
}
return rows;
}
④ selectStudent(int no)
//학생정보를 전달받아 STUDENT 테이블에 저장된 해당 학생번호의 학생정보를 검색하여 반환하는 메소드
public StudentDTO selectStudent(int no) {
Connection con=null;
PreparedStatement pstmt=null;
ResultSet rs=null;
StudentDTO student=null;
try {
con=getConnection();
String sql="select * from student where no=?";
pstmt=con.prepareStatement(sql);
pstmt.setInt(1, no);
rs=pstmt.executeQuery();
//검색행이 단일행이라 if문
if(rs.next()) {
student=new StudentDTO();
student.setNo(rs.getInt("no"));
student.setName(rs.getString("name"));
student.setPhone(rs.getString("phone"));
student.setAddress(rs.getString("address"));
student.setBirthday(rs.getString("birthday"));
}
} catch (SQLException e) {
System.out.println("[에러]selectStudent() 메소드의 SQL 오류 = "+e.getMessage());
} finally {
close(con, pstmt, rs);
}
return student;
}
⑤ selectStudentList()
//STUDENT 테이블에 저장된 모든 학생정보를 검색하여 반환하는 메소드
public List<StudentDTO> selectStudentList() {
Connection con=null;
PreparedStatement pstmt=null;
ResultSet rs=null;
List<StudentDTO> studentList=new ArrayList<>();
try {
con=getConnection();
String sql="select * from student order by no";
pstmt=con.prepareStatement(sql);
rs=pstmt.executeQuery();
//검색행이 다중행이라 반복문
while(rs.next()) { //자바 객체로 맵핑처리
StudentDTO student=new StudentDTO();
student.setNo(rs.getInt("no"));
student.setName(rs.getString("name"));
student.setPhone(rs.getString("phone"));
student.setAddress(rs.getString("address"));
student.setBirthday(rs.getString("birthday"));
studentList.add(student); //List객체에 요소로 추가
}
} catch (SQLException e) {
System.out.println("[에러]selectStudentList() 메소드의 SQL 오류 = "+e.getMessage());
} finally {
close(con, pstmt, rs);
}
return studentList;
}
}
04. 학생정보 관리 프로그램
1) 학생목록 출력페이지(displayStudent.jsp) [GET]
- jsp/student/displayStudent.jsp
<%@page import="xyz.itwill.dto.StudentDTO"%>
<%@page import="java.util.List"%>
<%@page import="xyz.itwill.dao.StudentDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
//<%-- STUDENT 테이블에 저장된 모든 학생정보를 검색하여 클라이언트에게 전달하는 JSP 문서 --%>
//<%-- => [학생추가]를 클릭한 경우 학생정보 입력페이지(insertFormStudent.jsp)로 이동 --%>
//<%-- => 출력된 학생정보의 [삭제]를 클릭한 경우 학생정보 삭제페이지(deleteStudent.jsp)로 이동 - 학번 전달 --%>
//<%-- => 출력된 학생정보의 [변경]를 클릭한 경우 학생정보 입력페이지(updateFormStudent.jsp)로 이동 - 학번 전달 --%>
<%
//STUDENT 테이블에 저장된 모든 학생정보를 검색하여 반환하는 DAO 클래스의 메소드를 호출하여
//검색결과를 반환받아 저장
List<StudentDTO> studentList=StudentDAO.getDAO().selectStudentList();
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP</title>
</head>
<body>
<h1 align="center">학생목록</h1>
<table align="center" cellspacing="0" cellpadding="1" width="800">
<tr align="right">
<td>
<input type="button" value="학생추가" onclick="location.href='insertFormStudent.jsp';">
</td>
</tr>
</table>
<table align="center" border="1" cellspacing="0" cellpadding="1" width="800">
<tr bgcolor="yellow">
<th width="100">학생번호</th>
<th width="100">이름</th>
<th width="150">전화번호</th>
<th width="250">주소</th>
<th width="100">생년월일</th>
<th width="50">삭제</th>
<th width="50">변경</th>
</tr>
<%
if(studentList.isEmpty()) {//List 객체에 저장된 요소가 없는 경우
%>
<tr align="center">
<td colspan="7">검색된 학생정보가 없습니다.</td>
</tr>
<%
} else {//List 객체에 저장된 요소가 있는 경우
%>
// <%-- List 객체에 저장된 요소를 차례대로 제공받아 응답하도록 반복 처리 --%>
// <%-- => 반복문에서는 요소(학생정보 - StudentDTO 객체)의 필드값을 반환받아 클라이언트에게 전달 --%>
<%
for(StudentDTO student:studentList) {
%>
<tr align="center">
<td width="100"><%=student.getNo() %></td>
<td width="100"><%=student.getName() %></td>
<td width="150"><%=student.getPhone() %></td>
<td width="250"><%=student.getAddress() %></td>
<td width="100"><%=student.getBirthday().substring(0, 10) %></td>
<td width="50"><input type="button" value="삭제" onclick="location.href='deleteStudent.jsp?no=<%=student.getNo()%>';"></td>
<td width="50"><input type="button" value="변경" onclick="location.href='updateFormStudent.jsp?no=<%=student.getNo()%>';"></td>
</tr>
<% } %>
<% } %>
</table>
</body>
</html>
2) 학생정보 입력페이지(insertFormStudent.jsp) [GET]
- jsp/student/insertFormStudent.jsp
<%@page import="xyz.itwill.dto.StudentDTO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
//<%-- 사용자로부터 학생정보를 입력받기 위한 JSP 문서 --%>
//<%-- => [학생추가]를 클릭한 경우 학생정보 삽입페이지(insertStudent.jsp)로 이동 - 입력값 전달 --%>
//<%-- => [학생목록]을 클릭한 경우 학생목록 출력페이지(displayStudent.jsp)로 이동 --%>
<%
//1.
String message=(String)session.getAttribute("message");
if(message==null) {
message="";
} else {
session.removeAttribute("message");
}
//2.
StudentDTO student=(StudentDTO)session.getAttribute("student");
if(student!=null) {
session.removeAttribute("student");
}
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP</title>
</head>
<body>
<h1 align="center">학생정보 입력</h1>
<hr>
<form name="studentForm">
<table align="center" border="1" cellpadding="1" cellspacing="0" width="300">
<tr height="40">
<th bgcolor="yellow" width="100">학생번호</th>
<td width="200" align="center">
<input type="text" name="no" <% if(student!=null) { %> value="<%=student.getNo()%>" <% } %>>
</td>
</tr>
<tr height="40">
<th bgcolor="yellow" width="100">이름</th>
<td width="200" align="center">
<input type="text" name="name" <% if(student!=null) { %> value="<%=student.getName()%>" <% } %>>
</td>
</tr>
<tr height="40">
<th bgcolor="yellow" width="100">전화번호</th>
<td width="200" align="center">
<input type="text" name="phone" <% if(student!=null) { %> value="<%=student.getPhone()%>" <% } %>>
</td>
</tr>
<tr height="40">
<th bgcolor="yellow" width="100">주소</th>
<td width="200" align="center">
<input type="text" name="address" <% if(student!=null) { %> value="<%=student.getAddress()%>" <% } %>>
</td>
</tr>
<tr height="40">
<th bgcolor="yellow" width="100">생년월일</th>
<td width="200" align="center">
<input type="text" name="birthday" <% if(student!=null) { %> value="<%=student.getBirthday()%>" <% } %>>
</td>
</tr>
<tr height="40">
<td width="200" colspan="2" align="center">
<input type="button" value="학생추가" onclick="submitCheck();">
<input type="reset" value="초기화">
<input type="button" value="학생목록" onclick="location.href='displayStudent.jsp';">
</td>
</tr>
</table>
</form>
<p align="center" style="color: red;"><%=message %></p>
<script type="text/javascript">
studentForm.no.focus();
function submitCheck() {
if(studentForm.no.value=="") {
alert("학생번호를 입력해 주세요.");
studentForm.no.focus();
return;
}
var noReg=/\d{4}/g;
if(!noReg.test(studentForm.no.value)) {
alert("학생번호는 정수 4자리로 입력해주세요.");
studentForm.no.focus();
return;
}
if(studentForm.name.value=="") {
alert("이름을 입력해 주세요.");
studentForm.name.focus();
return;
}
if(studentForm.phone.value=="") {
alert("전화번호을 입력해 주세요.");
studentForm.phone.focus();
return;
}
var phoneReg=/(01[016789])-\d{3,4}-\d{4}/g;
if(!phoneReg.test(studentForm.phone.value)) {
alert("전화번호를 형식에 맞게 입력해주세요.");
studentForm.phone.focus();
return;
}
if(studentForm.address.value=="") {
alert("주소을 입력해 주세요.");
studentForm.address.focus();
return;
}
if(studentForm.birthday.value=="") {
alert("생년월일을 입력해 주세요.");
studentForm.birthday.focus();
return;
}
var birthdayReg=/(18|19|20)\d{2}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])/g;
if(!birthdayReg.test(studentForm.birthday.value)) {
alert("생년월일을 형식에 맞게 입력해주세요.");
studentForm.birthday.focus();
return;
}
studentForm.method="POST";
studentForm.action="insertStudent.jsp";
studentForm.submit();
}
</script>
</body>
</html>
3) 학생정보 삽입처리 (insertStudent.jsp) [POST]
<%@page import="xyz.itwill.dto.StudentDTO"%>
<%@page import="xyz.itwill.dao.StudentDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
//<%-- 입력페이지(insertFormStudent.jsp)에서 전달된 학생정보를 반환받아 STUDENT 테이블에 삽입하고
//학생목록 출력페이지(displayStudent.jsp)로 이동하기 위한 URL 주소를 전달하는 JSP 문서 --%>
<%
//1.
//비정상적인 요청에 대한 응답처리 - [GET]방식으로 요청한 경우
if(request.getMethod().equals("GET")) {
session.setAttribute("message", "비정상적인 방법으로 페이지를 요청 하였습니다.");
response.sendRedirect("insertFormStudent.jsp");//입력페이지의 URL 주소 전달
return;
}
//2.
//[POST] 방식으로 요청하여 전달된 값에 대한 캐릭터셋 변경
request.setCharacterEncoding("utf-8");
//3.
//전달값을 반환받아 저장
//=>insertFormStudent.jsp의 자바스크립트에서 유효값 검사하므로 SSS공격에 대한 방어 작성 안해도 됨
int no=Integer.parseInt(request.getParameter("no"));
String name=request.getParameter("name");
String phone=request.getParameter("phone");
String address=request.getParameter("address");
String birthday=request.getParameter("birthday");
//4.
//StudentDTO 객체를 생성하고 전달값으로 객체의 필드값 변경 - DAO 클래스의 메소드 호출에 사용
StudentDTO student=new StudentDTO();
student.setNo(no);
student.setName(name);
student.setPhone(phone);
student.setAddress(address);
student.setBirthday(birthday);
//5.
//사용자로부터 입력되어 전달된 학생번호가 STUDENT 테이블에 저장된 기존 학생정보의 학생번호와
//중복될 경우 입력페이지(insertFormStudent.jsp)로 이동하기 위한 URL 주소 전달
//학생번호를 전달받아 STUDENT 테이블에 저장된 해당 학생번호의 학생정보를 검색하여 반환하는 DAO 클래스의 메소드 호출
// => null 반환 : 학생정보 미검색 - 전달된 학생번호 미중복
// => StudentDTO 객체 반환 : 학생정보 검색 - 전달된 학생번호 중복
if(StudentDAO.getDAO().selectStudent(no)!=null) {//검색된 학생정보가 있는 경우
session.setAttribute("message", "이미 사용중인 학생번호를 입력 하였습니다. 다시 입력해 주세요.");
session.setAttribute("student", student);
response.sendRedirect("insertFormStudent.jsp");
return;
}
//6.
//학생정보를 전달받아 STUDENT 테이블에 삽입하는 DAO 클래스의 메소드 호출
StudentDAO.getDAO().insertStudent(student);
//7.
//학생목록 출력페이지의 URL 주소를 전달하여 응답 처리
response.sendRedirect("displayStudent.jsp");
%>
4) 학생정보 삭제처리 (deleteStudent.jsp) [GET]
<%@page import="xyz.itwill.dao.StudentDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
//<%-- 학생목록 출력페이지(displayStudent.jsp)에서 전달받은 학생번호를 반환받아 STUDENT 테이블에
//저장된 해당 학생번호의 학생정보를 삭제하고 학생목록 출력페이지(displayStudent.jsp)로 이동하는
//URL 주소를 전달하는 JSP 문서 --%>
<%
//1.
//비정상적인 요청에 대한 응답 처리 - 학생정보가 없는경우 ([POST]방식으로 요청한 경우)
//=>쿼리스트링을 이용한 [GET]방식의 요청임! [POST]방식 아님!
if(request.getParameter("no")==null) {//전달값(학생번호)이 없는 경우
response.sendError(HttpServletResponse.SC_BAD_REQUEST);
return;
}
//2.
//전달값을 반환받아 저장
int no=Integer.parseInt(request.getParameter("no"));
//3.
//학생번호를 전달받아 STUDENT 테이블에 저장된 해당 학생번호의 학생정보를 삭제하는 DAO 클래스의 메소드 호출
//=> 삭제행의 갯수를 통해 정상적인 요청인지 비정상적인 요청인지 판단 가능
int rows=StudentDAO.getDAO().deleteStudent(no);
if(rows>0) {//삭제된 학생정보가 있는 경우 - 정상적인 요청
//클라이언트에게 URL 주소 전달
response.sendRedirect("displayStudent.jsp");
} else {//삭제된 학생정보가 없는 경우 - 비정상적인 요청
response.sendError(HttpServletResponse.SC_BAD_REQUEST);
}
%>
5) 학생정보 변경페이지(updateFormStudent.jsp) [GET]
- jsp/student/updateFormStudent.jsp?no=1000
<%@page import="xyz.itwill.dto.StudentDTO"%>
<%@page import="xyz.itwill.dao.StudentDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
//<%-- 학생목록 출력페이지(displayStudent.jsp)에서 전달받은 학생번호를 반환받아 STUDENT 테이블에
//저장된 해당 학생번호의 학생정보를 검색하여 입력태그의 초기값으로 설정하고 사용자로부터 변경값을
//입력받기 위한 JSP 문서 --%>
//<%-- => [학생변경]를 클릭한 경우 학생정보 변경페이지(updateStudent.jsp)로 이동 - 입력값 전달 --%>
//<%-- => [학생목록]을 클릭한 경우 학생목록 출력페이지(displayStudent.jsp)로 이동 --%>
<%
//1.
//쿼리스트링을 이용한 [GET]방식의 요청임! [POST]방식 아님!
//비정상적인 요청에 대한 응답 처리 - 학생정보가 없는경우
if(request.getParameter("no")==null) {//전달값(학생번호)이 없는 경우
response.sendError(HttpServletResponse.SC_BAD_REQUEST);
return;
}
//2.
//전달값을 반환받아 저장
int no=Integer.parseInt(request.getParameter("no"));
//3.
//학생번호를 전달받아 STUDENT 테이블에 저장된 해당 학생번호의 학생정보를 검색하여 반환하는
//DAO 클래스의 메소드 호출
StudentDTO student=StudentDAO.getDAO().selectStudent(no);
if(student==null) {//검색된 학생정보가 없는 경우 - 비정상적인 요청
response.sendError(HttpServletResponse.SC_BAD_REQUEST);
return;
}
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP</title>
</head>
<body>
<h1 align="center">학생정보 변경</h1>
<hr>
// <%-- 학생정보 변경페이지(updateStudent.jsp) 요청시 학생번호(식별자)를 전달해야 되지만
// 학생번호는 변경하지 못하도록 설정 --%>
// <%-- => 입력태그의 readonly 속성을 사용하여 초기값을 변경하지 못하도록 설정 --%>
// <%-- => 입력태그의 타입을 [hidden]으로 설정하여 초기값을 전달하도록 설정 --%>
<form name="studentForm">
<input type="hidden" name="no" value="<%=student.getNo()%>">
<table align="center" border="1" cellpadding="1" cellspacing="0" width="300">
<tr height="40">
<th bgcolor="yellow" width="100">학생번호</th>
<td width="200" align="center">
<!-- <input type="text" name="name" value="<%=student.getNo() %>" readonly="readonly"> -->
<%=student.getNo()%>
</td>
</tr>
<tr height="40">
<th bgcolor="yellow" width="100">이름</th>
<td width="200" align="center">
<input type="text" name="name" value="<%=student.getName() %>">
</td>
</tr>
<tr height="40">
<th bgcolor="yellow" width="100">전화번호</th>
<td width="200" align="center">
<input type="text" name="phone" value="<%=student.getPhone() %>">
</td>
</tr>
<tr height="40">
<th bgcolor="yellow" width="100">주소</th>
<td width="200" align="center">
<input type="text" name="address" value="<%=student.getAddress() %>">
</td>
</tr>
<tr height="40">
<th bgcolor="yellow" width="100">생년월일</th>
<td width="200" align="center">
<input type="text" name="birthday" value="<%=student.getBirthday().substring(0, 10) %>">
</td>
</tr>
<tr height="40">
<td width="200" colspan="2" align="center">
<input type="button" value="학생변경" onclick="submitCheck();">
<input type="reset" value="초기화">
<input type="button" value="학생목록" onclick="location.href='displayStudent.jsp';">
</td>
</tr>
</table>
</form>
<script type="text/javascript">
studentForm.num.focus();
function submitCheck() {
if(studentForm.name.value=="") {
alert("이름을 입력해 주세요.");
studentForm.name.focus();
return;
}
if(studentForm.phone.value=="") {
alert("전화번호을 입력해 주세요.");
studentForm.phone.focus();
return;
}
if(studentForm.address.value=="") {
alert("주소을 입력해 주세요.");
studentForm.address.focus();
return;
}
if(studentForm.birthday.value=="") {
alert("생년월일을 입력해 주세요.");
studentForm.birthday.focus();
return;
}
studentForm.method="POST";
studentForm.action="updateStudent.jsp";
studentForm.submit();
}
</script>
</body>
</html>
6) 학생정보 변경처리 (updateStudent.jsp) [POST]
<%@page import="xyz.itwill.dto.StudentDTO"%>
<%@page import="xyz.itwill.dao.StudentDAO"%>
<%@page import="xyz.itwill.dto.StudentDTO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
//<%-- 입력페이지(updateFormStudent.jsp)에서 전달된 학생정보를 반환받아 STUDENT 테이블에 저장된 학생정보를
//변경하고 학생목록 출력페이지(displayStudent.jsp)로 이동하기 위한 URL 주소를 전달하는 JSP 문서 --%>
<%
//1.
//비정상적인 요청에 대한 응답처리
if(request.getMethod().equals("GET")) {
response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
return;
}
//2.
//POST 방식으로 요청하여 전달된 값에 대한 캐릭터셋 변경
request.setCharacterEncoding("utf-8");
//3.
//전달값을 반환받아 저장
int no=Integer.parseInt(request.getParameter("no"));
String name=request.getParameter("name");
String phone=request.getParameter("phone");
String address=request.getParameter("address");
String birthday=request.getParameter("birthday");
//4.
//StudentDTO 객체를 생성하고 전달값을 이용하여 필드값 변경
StudentDTO student=new StudentDTO();
student.setNo(no);
student.setName(name);
student.setPhone(phone);
student.setAddress(address);
student.setBirthday(birthday);
//5.
//학생정보를 전달받아 STUDENT 테이블에 저장된 해당 학생정보를 변경하는 DAO 클래스의 메소드 호출
StudentDAO.getDAO().updateStudent(student);
//6.
//클라이언트에게 URL 주소 전달
response.sendRedirect("displayStudent.jsp");
%>
반응형
'jsp' 카테고리의 다른 글
[jsp] 16. 웹사이트 제작법2_테이블,DTO제작 (feat. JSP) (0) | 2024.07.12 |
---|---|
[jsp] 15. 웹사이트 제작법1_뼈대제작 (feat. JSP) (0) | 2024.07.11 |
[jsp] 13. useBean 액션태그 미사용 VS useBean 액션태그 사용 예시 (1) | 2024.07.10 |
[jsp] 12. include 액션태그(템플릿페이지)를 통한 사이트 구축 (대형사이트에 최적) (0) | 2024.07.10 |
[jsp] 11. 포워드 액션태그를 이용한 프로그램 (스레드 자체가 이동) (0) | 2024.07.09 |