JSP_3강_2를 그대로 활용하여 HTML에서 수정과 삭제, 데이터와 연동되어 조회할 수 있도록 코드를 작성해보자!!
=============================코드=============================
package com.emp.model;
public class DeptDTO {
private int deptno;
private String dname;
private String loc;
public int getDeptno() {
return deptno;
}
public void setDeptno(int deptno) {
this.deptno = deptno;
}
public String getDname() {
return dname;
}
public void setDname(String dname) {
this.dname = dname;
}
public String getLoc() {
return loc;
}
public void setLoc(String loc) {
this.loc = loc;
}
}
insert가 별칭인 InsertServlet 서블릿 생성!

=============================코드=============================
package com.emp.controller;
import java.io.IOException;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.emp.model.DeptDTO;
import com.emp.model.EmpDAO;
import com.emp.model.EmpDTO;
@WebServlet("/insert")
public class InsertServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public InsertServlet() {
super();
}
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 사원등록 폼 페이지로 넘어가기 전에 부서번호 리스트를
// DB에서 조회하여 사원 등록 폼 페이지로 해당 데이터를
// 넘겨 주는 비지니스 로직
EmpDAO dao = new EmpDAO();
EmpDAO에서 클래스에서
Dept 테이블의 전체 부서 리스트를 조회하는 메서드와
EMP 테이블에 관리자 사원 리스트를 조회하는 메서드
EMP 테이블에 담당업무 리스트를 조회하는 메서드
EMP 테이블에 사원을 등록하는 메서드를 만들자!
=============================코드=============================
package com.emp.model;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
// EMP 테이블에서 사원 전체 목록을 조회하는 메서드
public List<EmpDTO> selectEmpList() {
List<EmpDTO> list = new ArrayList<EmpDTO>();
try {
// 3단계 : 데이터베이스에 전송할 SQL문을 작성
sql = "select * from emp order by hiredate desc";
// 4단계 : SQL문을 데이터베이스 전송객체에 저장
pstmt = con.prepareStatement(sql);
// 5단계 : SQL문을 데이터베이스에 전송 및 실행
rs = pstmt.executeQuery(); // 쿼리문을 전송하고 DB에서 실행
while(rs.next()) {
EmpDTO dto = new EmpDTO();
dto.setEmpno(rs.getInt("empno"));
dto.setEname(rs.getString("ename"));
dto.setJob(rs.getString("job"));
dto.setMgr(rs.getInt("mgr"));
dto.setHiredate(rs.getString("hiredate"));
dto.setSal(rs.getInt("sal"));
dto.setComm(rs.getInt("comm"));
dto.setDeptno(rs.getInt("deptno"));
list.add(dto); // dto는 주소값
}
// 6단계 : DB와 연결되어 있던 자원 종료
rs.close(); pstmt.close(); con.close();
} catch (SQLException e) {
e.printStackTrace();
}
return list;
} // selectEmpList() 메서드 end
// ----------------여기서부터 작성----------------
// DEPT 테이블의 전체 부서 리스트를 조회하는 메서드
public List<DeptDTO> getDeptList() {
List<DeptDTO> list = new ArrayList<DeptDTO>();
try {
// 3단계 : 데이터베이스에 전송할 SQL문 작성
sql = "select * from dept order by deptno";
// 4단계 : SQL문을 데이터베이스 전송객체에 저장
pstmt = con.prepareStatement(sql);
// 5단계 : SQL문을 데이터베이스에 전송 및 실행
rs = pstmt.executeQuery(); // 쿼리문을 전송하고 DB에서 실행
while(rs.next()) {
DeptDTO dto = new DeptDTO();
dto.setDeptno(rs.getInt("deptno"));
dto.setDname(rs.getString("dname"));
dto.setLoc(rs.getString("loc"));
list.add(dto);
}
// 6단계 : DB와 연결되어 있던 자원 종료
rs.close(); pstmt.close(); // con.close();
} catch (Exception e) {
e.printStackTrace();
}
return list;
} // getDeptList() 메서드 end
// EMP 테이블에서 관리자 사원 리스트를 조회 하는 메서드
public List<EmpDTO> getMgrList() {
List<EmpDTO> list = new ArrayList<>();
try {
// 3단계 : 데이터베이스에 전송할 SQL문 작성
sql = "select * from emp where empno in(select distinct(mgr) from emp)";
// 4단계 : SQL문을 데이터베이스 전송객체에 저장
pstmt = con.prepareStatement(sql);
// 5단계 : SQL문을 데이터베이스에 전송 및 실행
rs = pstmt.executeQuery(); // 쿼리문을 전송하고 DB에서 실행
while(rs.next()) {
EmpDTO dto = new EmpDTO();
dto.setEmpno(rs.getInt("empno"));
dto.setEname(rs.getString("ename"));
list.add(dto);
}
// 6단계 : DB와 연결되어 있던 자원 종료
rs.close(); pstmt.close(); //con.close();
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
// EMP 테이블에서 담당업무 리스트를 조회하는 메서드
public List<String> getJobList() {
List<String> list = new ArrayList<>();
try {
sql = "select distinct(job) from emp";
pstmt = con.prepareStatement(sql);
rs = pstmt.executeQuery();
while(rs.next()) {
list.add(rs.getString("job"));
}
rs.close(); pstmt.close(); // con.close();
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
// EMP 테이블에 사원을 등록하는 메서드
public int insertEmp(EmpDTO dto) {
int result = 0; // 반환되는 값
try {
// 3단계 : 데이터베이스에 전송할 SQL문 작성
sql = "insert into emp values(?, ?, ?, ?, sysdate, ?, ?, ?)";
// 4단계 : SQL문을 데이터베이스 전송객체에 저장
pstmt = con.prepareStatement(sql);
// 4-1단계 : ?(플레이스 홀더)에 데이터를 저장
pstmt.setInt(1, dto.getEmpno());
pstmt.setString(2, dto.getEname());
pstmt.setString(3, dto.getJob());
pstmt.setInt(4, dto.getMgr());
pstmt.setInt(5, dto.getSal());
pstmt.setInt(6, dto.getComm());
pstmt.setInt(7, dto.getDeptno());
// 5단계 : SQL문을 DB에 전송 및 실행
result = pstmt.executeUpdate();
// 6단계 : DB와 연결되어 있던 자원 종료
pstmt.close(); con.close();
} catch (SQLException e) {
e.printStackTrace();
}
return result;
} // insertEmp() 메서드 end
다시 InsertServlet 으로 가보자!
=============================코드=============================
package com.emp.controller;
import java.io.IOException;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.emp.model.DeptDTO;
import com.emp.model.EmpDAO;
import com.emp.model.EmpDTO;
@WebServlet("/insert")
public class InsertServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public InsertServlet() {
super();
}
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 사원등록 폼 페이지로 넘어가기 전에 부서번호 리스트를
// DB에서 조회하여 사원 등록 폼 페이지로 해당 데이터를
// 넘겨 주는 비지니스 로직
EmpDAO dao = new EmpDAO();
// EMP 테이블에서 담당업무 리스트를 조회해 보자.
List<String> jobList = dao.getJobList();
// EMP 테이블에서 관리자 사원 리스트를 조회해 보자.
List<EmpDTO> mgrList = dao.getMgrList();
// DEPT 테이블에서 부서 전체 리스트를 조회해 보자.
List<DeptDTO> deptList = dao.getDeptList();
// 부서 전체 리스트를 부서등록 폼 페이지에 넘겨 주어야 한다.
request.setAttribute("DeptList", deptList);
request.setAttribute("JobList", jobList);
request.setAttribute("MgrList", mgrList);
// 페이지 이동 경로 설정
RequestDispatcher rd = request.getRequestDispatcher("view/emp_insert.jsp");
// 페이지 이동
rd.forward(request, response);
}
}
view 폴더 -> emp_insert.jsp 파일 생성
=============================코드=============================
<%@page import="com.emp.model.EmpDTO"%>
<%@page import="com.emp.model.DeptDTO"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
// 형변환이 필요함
List<DeptDTO> dList = (List<DeptDTO>)request.getAttribute("DeptList");
List<EmpDTO> mList = (List<EmpDTO>)request.getAttribute("MgrList");
List<String> jList = (List<String>)request.getAttribute("JobList");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<div align = "center">
<hr width = "30%" color = "gray">
<h3>EMP 테이블 사원 등록 폼 페이지</h3>
<hr width = "30%" color = "gray">
<br/> <br/>
<form method = "post" action = "<%=request.getContextPath() %>/insert_ok">
<table border = "1" width = "350">
<tr>
<th>사원 No.</th>
<td>
<input type = "text" name = "num">
</td>
</tr>
<tr>
<th>사원 이름</th>
<td>
<input type = "text" name = "name">
</td>
</tr>
<tr>
<th>담당업무</th>
<td>
<select name = "job">
<%
if(jList.size() == 0){
%>
<option value = "">:::직업:::</option>
<% } else {
for(int i = 0; i < jList.size(); i++){
String j = jList.get(i);
%>
<option value = "<%=j %>"><%=j %></option>
<% }
}
%>
</select>
</td>
</tr>
<tr>
<th>관리자 No.</th>
<td>
<select name = "mgrNo">
<%
if(mList.size() == 0){
%>
<option value = "">:::관리번호 없음:::</option>
<% } else{
for(int i =0; i < mList.size(); i++){
EmpDTO mgr = mList.get(i);
%>
<option value = "<%=mgr.getEmpno() %>"><%=mgr.getEname() %></option>
<% }
}
%>
</select>
</td>
</tr>
<tr>
<th>급 여</th>
<td>
<input type = "text" name = "sal">
</td>
</tr>
<tr>
<th>보너스</th>
<td>
<input type = "text" name = "comm">
</td>
</tr>
<tr>
<th>부서 No.</th>
<td>
<select name = "deptNo">
<%
if(dList.size() == 0){
// 데이터가 없는 경우
%>
<option value = ""> :::부서번호 없음::: </option>
<% } else {
// 데이터가 있는 경우
for(int i = 0; i <dList.size(); i++){
DeptDTO dto = dList.get(i);
%>
<option value = "<%=dto.getDeptno() %>">
<%=dto.getDname() %> [<%=dto.getDeptno() %>]</option>
<% }
}
%>
</select>
</td>
</tr>
<tr>
<td colspan = "2" align = "center">
<input type = "submit" value = "사원등록">
<input type = "reset" value = "다시 작성">
</td>
</tr>
</table>
</form>
</div>
</body>
</html>
사원등록 폼 페이지에서 넘어온 데이터들을 EMP 테이블에 저장시킬
=============================코드=============================
package com.emp.controller;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.emp.model.EmpDAO;
import com.emp.model.EmpDTO;
@WebServlet("/insert_ok")
public class InsertOkServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public InsertOkServlet() {
super();
}
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 사원등록 폼 페이지에서 넘어온 데이터들을
// EMP 테이블에 저장시키는 비지니스 로직
// 요청과 응답 시 한글이 깨짐을 방지하는 설정 작업
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset = UTF-8");
// 1단계 : 사원등록 폼 페이지에서 넘어온 데이터들을 받아주어야 함
int emp_no = Integer.parseInt(request.getParameter("num").trim());
String emp_name = request.getParameter("name").trim();
String emp_job = request.getParameter("job").trim();
int emp_mgr = Integer.parseInt(request.getParameter("mgrNo").trim()) ;
int emp_sal = Integer.parseInt(request.getParameter("sal").trim()) ;
int emp_comm = Integer.parseInt(request.getParameter("comm").trim()) ;
int emp_deptno = Integer.parseInt(request.getParameter("deptNo").trim()) ;
// 2단계 : 넘어온 데이터들을 DB에 전송해 주어야 함. 전송 시 DTO 객체를 이용함
EmpDTO dto = new EmpDTO();
dto.setEmpno(emp_no);
dto.setEname(emp_name);
dto.setJob(emp_job);
dto.setMgr(emp_mgr);
dto.setSal(emp_sal);
dto.setComm(emp_comm);
dto.setDeptno(emp_deptno);
// 3단계 : DTO 객체를 DB에 전송하면 됨
EmpDAO dao = new EmpDAO();
int check = dao.insertEmp(dto);
PrintWriter out = response.getWriter();
if(check > 0) {
out.println("<script>");
out.println("alert('사원 등록 성공!')");
out.println("location.href = 'select'"); // select 서블릿으로 다시 넘어감
out.println("</script>");
}else {
out.println("<script>");
out.println("alert('사원 등록 실패!')");
out.println("histroy.back()"); // 이전 페이지로 돌아감
out.println("</script>");
}
}
}
main.jsp로 가서 사원 추가가 되는지 다시 실행해보자!
=============================실행=============================

사원등록 클릭!

등록 클릭!

전체 사원 리스트 페이지에 바로 넘어가며 추가된 것을 확인할 수 있음!
