[JSP 5-2] 데이터베이스 연결

임승현·2022년 12월 12일
0

JSP

목록 보기
15/20

🐧PART 1 - 테이블 생성

🎨 SQL Develope 실행

desc student;


select * from student order by no;

🐧PART 2 - DTO 생성

🎨 DTO 클래스 생성

① xyz.itwill.dto 패키지 생성
② 패키지에 StudentDTO 클래스 생성

📢 STUDENT 테이블의 학생정보를 저장하여 전달하기 위한 클래스

📃StudentDTO.java

package xyz.itwill.dto;
//
//CREATE TABLE STUDENT(NO NUMBER(4) PRIMARY KEY,NAME VARCHAR2(50),PHONE VARCHAR2(50)
//	,ADDRESS VARCHAR2(100),BIRTHDAY DATE);
//
/*
이름       널?       유형            
-------- -------- ------------- 
NO       NOT NULL NUMBER(4)     
NAME              VARCHAR2(50)  
PHONE             VARCHAR2(20)  
ADDRESS           VARCHAR2(100) 
BIRTHDAY          DATE 
*/
//
//STUDENT 테이블의 학생정보를 저장하여 전달하기 위한 클래스
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;
	}
}

🐧PART 3 - DAO 생성

① META-INF 폴더에 context.xml 생성 및 작성

📃context.xml

<?xml version="1.0" encoding="UTF-8"?>
<Context>
	<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" maxIdel="10" maxTotal="15"/>
</Context>



─────────────────────────────────────
② WEB-INF → lib 폴더에 ojdbc11.jar 파일 붙여넣기

─────────────────────────────────────
③ xyz.itwill.dao 패키지 생성
─────────────────────────────────────
④ xyz.itwill.dao 패키지에 JdbcDAO 클래스 생성 및 작성
📢 JDBC 기능을 구현하기 위한 DAO 클래스가 상속받기 위한 부모클래스

📃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 클래스가 상속받기 위한 부모클래스
public abstract class JdbcDAO {
	private static DataSource dataSource;
	//
	static {
		try {
			dataSource=(DataSource)new InitialContext().lookup("java:comp/env/jdbc/oracle");
		} catch (NamingException e) {
			e.printStackTrace();
		}
	}
	public Connection getConnection() throws SQLException {
		return dataSource.getConnection();
	}
	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(pstmt!=null) pstmt.close();
			if(con!=null) con.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	public void close(Connection con, PreparedStatement pstmt, ResultSet rs) {
		try {
			if(rs!=null) rs.close();
			if(pstmt!=null) pstmt.close();
			if(con!=null) con.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}

─────────────────────────────────────
⑤ xyz.itwill.dao 패키지에 StudentDAO 클래스 생성 및 작성
📢 STUDENT 테이블의 학생정보에 대한 삽입,변경,삭제,검색 기능을 제공하기 위한 클래스 - JDBC

📃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;
	}
	//
	//학생정보를 전달받아 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;
	}
	//
	//학생정보를 전달받아 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;
	}
	//
	//학생번호를 전달받아 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;
	}
	//
	//학생정보를 전달받아 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(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;
	}
	//
	//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);
			}
		} catch (SQLException e) {
			System.out.println("[에러]selectStudentList() 메소드의 SQL 오류 = "+e.getMessage());
		} finally {
			close(con, pstmt, rs);
		}
		return studentList;
	}
}

🐧PART 4 - displayStudent.jsp 생성

📢 STUDENT 테이블에 저장된 모든 학생정보를 검색하여 클라이언트에게 전달하는 JSP 문서
→ [학생추가]를 클릭한 경우 학생정보 입력페이지(insertFormStudent.jsp)로 이동 --%>
→ 출력된 학생정보의 [삭제]를 클릭한 경우 학생정보 삭제페이지(deleteStudent.jsp)로 이동 - 학번 전달
→ 출력된 학생정보의 [변경]를 클릭한 경우 학생정보 입력페이지(updateFormStudent.jsp)로 이동 - 학번 전달

📃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>

🐧PART 5 - insertFormStudent.jsp 생성

📢 사용자로부터 학생정보를 입력받기 위한 JSP 문서
→ [학생추가]를 클릭한 경우 학생정보 삽입페이지(insertStudent.jsp)로 이동 - 입력값 전달
→ [학생목록]을 클릭한 경우 학생목록 출력페이지(displayStudent.jsp)로 이동

📃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)로 이동 --%>
<%
	String message=(String)session.getAttribute("message");
	if(message==null) {
		message="";
	} else {
		session.removeAttribute("message");
	}
	//
	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>

🐧PART 6 - insertStudent.jsp 생성

📢 입력페이지(insertFormStudent.jsp)에서 전달된 학생정보를 반환받아 STUDENT 테이블에 삽입하고 학생목록 출력페이지(displayStudent.jsp)로 이동하기 위한 URL 주소를 전달하는 JSP 문서

📃insertStudent.jsp

<%@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 문서 --%>
<%
	//비정상적인 요청에 대한 응답처리
	if(request.getMethod().equals("GET")) {
		session.setAttribute("message", "비정상적인 방법으로 페이지를 요청 하였습니다.");
		response.sendRedirect("insertFormStudent.jsp");//입력페이지의 URL 주소 전달
		return;
	}
	//POST 방식으로 요청하여 전달된 값에 대한 캐릭터셋 변경
	request.setCharacterEncoding("utf-8");
	//
	//전달값을 반환받아 저장
	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");
	//
	//StudentDTO 객체를 생성하고 전달값으로 객체의 필드값 변경 - DAO 클래스의 메소드 호출에 사용
	StudentDTO student=new StudentDTO();
	student.setNo(no);
	student.setName(name);
	student.setPhone(phone);
	student.setAddress(address);
	student.setBirthday(birthday);
	//
	//사용자로부터 입력되어 전달된 학생정보의 학생번호가 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;
	}
	//
	//학생정보를 전달받아 STUDENT 테이블에 삽입하는 DAO 클래스의 메소드 호출
	StudentDAO.getDAO().insertStudent(student);
	//
	//학생목록 출력페이지의 URL 주소를 전달하여 응답 처리
	response.sendRedirect("displayStudent.jsp");
%>

🐧PART 7 - deleteStudent.jsp 생성

📢 학생목록 출력페이지(displayStudent.jsp)에서 전달받은 학생번호를 반환받아 STUDENT 테이블에 저장된 해당 학생번호의 학생정보를 삭제하고 학생목록 출력페이지(displayStudent.jsp)로 이동하는URL 주소를 전달하는 JSP 문서

📃deleteStudent.jsp

<%@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 문서--%>
<%
	//비정상적인 요청에 대한 응답 처리
	if(request.getParameter("no")==null) {//전달값(학생번호)이 없는 경우
		response.sendError(HttpServletResponse.SC_BAD_REQUEST);
		return;
	}
	//
	//전달값을 반환받아 저장
	int no=Integer.parseInt(request.getParameter("no"));
	//
	//학생번호를 전달받아 STUDENT 테이블에 저장된 해당 학생번호의 학생정보를 삭제하는 DAO 클래스의 메소드 호출
	int rows=StudentDAO.getDAO().deleteStudent(no);
	//
	//
	if(rows>0) {//삭제된 학생정보가 있는 경우 - 정상적인 요청
	//클라이언트에게 URL 주소 전달
	response.sendRedirect("displayStudent.jsp");
	} else {//삭제된 학생정보가 없는 경우 - 비정상적인 요청
		response.sendError(HttpServletResponse.SC_BAD_REQUEST);
	}
%>

🐧PART 8 - updateFormStudent.jsp 생성

📢 학생목록 출력페이지(displayStudent.jsp)에서 전달받은 학생번호를 반환받아 STUDENT 테이블에 저장된 해당 학생번호의 학생정보를 검색하여 입력태그의 초기값으로 설정하고 사용자로부터 변경값을 입력받기 위한 JSP 문서
→ [학생변경]를 클릭한 경우 학생정보 변경페이지(updateStudent.jsp)로 이동 - 입력값 전달
→ [학생목록]을 클릭한 경우 학생목록 출력페이지(displayStudent.jsp)로 이동

📃updateFormStudent.jsp

<%@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)로 이동 --%>
<%
	//비정상적인 요청에 대한 응답 처리
	if(request.getParameter("no")==null) {
		response.sendError(HttpServletResponse.SC_BAD_REQUEST);
		return;
	}
	//전달값을 반환받아 저장
	int no=Integer.parseInt(request.getParameter("no"));
	//
	//학생번호를 전달받아 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>

🐧PART 9 - updateStudent.jsp 생성

📢 입력페이지(updateFormStudent.jsp)에서 전달된 학생정보를 반환받아 STUDENT 테이블에 저장된 학생정보를 변경하고 학생목록 출력페이지(displayStudent.jsp)로 이동하기 위한 URL 주소를 전달하는 JSP 문서

📃updateStudent.jsp

<%@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 문서 --%>
<%
	//비정상적인 요청에 대한 응답 처리
	if(request.getMethod().equals("GET")) {
		response.sendError(HttpServletResponse.SC_BAD_REQUEST);
		return;
	}
	//
	//POST 방식으로 요청하여 전달된 값에 대한 캐릭터셋 변경
	request.setCharacterEncoding("utf-8");
	//
	//전달값을 반환받아 저장
	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");
	//
	//StudentDTO 객체를 생성하고 전달값을 이용하여 필드값 변경
	StudentDTO student=new StudentDTO();
	student.setNo(no);
	student.setName(name);
	student.setPhone(phone);
	student.setAddress(address);
	student.setBirthday(birthday);
	//
	//학생정보를 전달받아 STUDENT 테이블에 저장된 해당 학생정보를 변경하는 DAO 클래스의 메소드 호출
	StudentDAO.getDAO().updateStudent(student);
	//클라이언트에게 URL 주소 전달
	response.sendRedirect("displayStudent.jsp");
%>

0개의 댓글