-----------------------------
직원관리 Servlet(MVC 패턴) 방식
- 서블릿 주소를 확장자 형태 사용.
- web.xml 파일에는 확장자 형태의 주소 한 개만 등록
- 주소 분석 및 액션 요청을 위한 전용 서블릿 클래스 작성.
- 액션 담당 전용 클래스 작성.

** 환경 설정 추가 -> WEB-INF/source 폴더 하위에 JSP 페이지 등록

10. 소스코드


//Employee.java -> grade 항목 추가
package com.test;

public class Employee {

 private String employeeId
 , name
 , ssn
 , birthday
 , lunarName
 , telephone
 , departmentId
 , departmentName
 , positionId
 , positionName
 , regionId
 , regionName;
 
 private int lunar; // 0(양력) 또는 1(음력)
 private int basicPay, extraPay, pay;
 
 private int grade; //등급 (0 또는 1)

 public int getGrade() {
  return grade;
 }
 public void setGrade(int grade) {
  this.grade = grade;
 }

 public String getSsn() {
  return ssn;
 }
 public void setSsn(String ssn) {
  this.ssn = ssn;
 }
 
 public String getEmployeeId() {
  return employeeId;
 }
 public void setEmployeeId(String employeeId) {
  this.employeeId = employeeId;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public String getBirthday() {
  return birthday;
 }
 public void setBirthday(String birthday) {
  this.birthday = birthday;
 }
 public String getLunarName() {
  return lunarName;
 }
 public void setLunarName(String lunarName) {
  this.lunarName = lunarName;
 }
 public String getTelephone() {
  return telephone;
 }
 public void setTelephone(String telephone) {
  this.telephone = telephone;
 }
 public String getDepartmentId() {
  return departmentId;
 }
 public void setDepartmentId(String departmentId) {
  this.departmentId = departmentId;
 }
 public String getDepartmentName() {
  return departmentName;
 }
 public void setDepartmentName(String departmentName) {
  this.departmentName = departmentName;
 }
 public String getPositionId() {
  return positionId;
 }
 public void setPositionId(String positionId) {
  this.positionId = positionId;
 }
 public String getPositionName() {
  return positionName;
 }
 public void setPositionName(String positionName) {
  this.positionName = positionName;
 }
 public String getRegionId() {
  return regionId;
 }
 public void setRegionId(String regionId) {
  this.regionId = regionId;
 }
 public String getRegionName() {
  return regionName;
 }
 public void setRegionName(String regionName) {
  this.regionName = regionName;
 }
 public int getLunar() {
  return lunar;
 }
 public void setLunar(int lunar) {
  this.lunar = lunar;
 }
 public int getBasicPay() {
  return basicPay;
 }
 public void setBasicPay(int basicPay) {
  this.basicPay = basicPay;
 }
 public int getExtraPay() {
  return extraPay;
 }
 public void setExtraPay(int extraPay) {
  this.extraPay = extraPay;
 }
 public int getPay() {
  return pay;
 }
 public void setPay(int pay) {
  this.pay = pay;
 }
 
}

 

 

//EmployeeDAO.java
package com.test;

import java.sql.*;
import java.util.*;

public class EmployeeDAO {
 
 //직원 명단 출력 메소드
 public ArrayList<Employee> list(){
  ArrayList<Employee> result = new ArrayList<Employee>();
  
  Connection conn = null;
  PreparedStatement pstmt = null;
  
  try{
   conn = DBConn.getConnection();
   String sql = String.format("SELECT employeeId, name, birthday, lunar, lunarName, telephone, departmentId, departmentName, positionId, positionName, regionId, regionName, basicPay, extraPay, pay, grade FROM employeeView ORDER BY employeeId");
   pstmt = conn.prepareStatement(sql);
   ResultSet rs = pstmt.executeQuery();
   while(rs.next()){
    Employee e = new Employee();
    e.setEmployeeId(rs.getString("employeeId"));
    e.setName(rs.getString("name"));
    e.setBirthday(rs.getString("birthday"));
    e.setLunar(rs.getInt("lunar"));
    e.setLunarName(rs.getString("lunarName"));
    e.setTelephone(rs.getString("telephone"));
    e.setDepartmentId(rs.getString("departmentId"));
    e.setDepartmentName(rs.getString("departmentName"));
    e.setPositionId(rs.getString("positionId"));
    e.setPositionName(rs.getString("positionName"));
    e.setRegionId(rs.getString("regionId"));
    e.setRegionName(rs.getString("regionName"));
    e.setBasicPay(rs.getInt("basicPay"));
    e.setExtraPay(rs.getInt("extraPay"));
    e.setPay(rs.getInt("pay"));
    e.setGrade(rs.getInt("grade"));
    result.add(e);
   }
   rs.close();
  }catch(Exception e){
   e.printStackTrace();
  }finally{
   try{
    if(pstmt != null){
     pstmt.close();
    }
   }catch(Exception e){
   }
   DBConn.close();
  }
  return result;
 }
 
 //직원 검색 출력 메소드(검색기준 : 사번,주민번호,이름,지역,부서,직위)
 public ArrayList<Employee> list(String searchKey, String searchValue){
  ArrayList<Employee> result = new ArrayList<Employee>();
  
  Connection conn = null;
  PreparedStatement pstmt = null;
  try{
   conn = DBConn.getConnection();
   String sql = String.format("SELECT employeeId, name, birthday, lunar, lunarName, telephone, departmentId, departmentName, positionId, positionName, regionId, regionName, basicPay, extraPay, pay, grade FROM employeeView e");
   switch(searchKey){
   case "0" : sql += " WHERE employeeId=?"; break;
   case "1" : sql += " WHERE ssn=encrypt(?, e.name)"; break;
   case "2" : sql += " WHERE name=?"; break;
   case "3" : sql += " WHERE regionName=?"; break;
   case "4" : sql += " WHERE departmentName=?"; break;
   case "5" : sql += " WHERE positionName=?"; break;
   case "9" : sql += ""; break; //전체 검색
   }
   sql += " ORDER BY employeeId";
   pstmt = conn.prepareStatement(sql);
   if (!searchKey.equals("9")) {
    pstmt.setString(1, searchValue);
   }
   ResultSet rs = pstmt.executeQuery();
   while(rs.next()){
    Employee e = new Employee();
    e.setEmployeeId(rs.getString("employeeId"));
    e.setName(rs.getString("name"));
    e.setBirthday(rs.getString("birthday"));
    e.setLunarName(rs.getString("lunarName"));
    e.setTelephone(rs.getString("telephone"));
    e.setDepartmentName(rs.getString("departmentName"));
    e.setPositionName(rs.getString("positionName"));
    e.setRegionName(rs.getString("regionName"));
    e.setBasicPay(rs.getInt("basicPay"));
    e.setExtraPay(rs.getInt("extraPay"));
    e.setPay(rs.getInt("pay"));
    e.setGrade(rs.getInt("grade"));
    result.add(e);
   }
   rs.close();
  }catch(Exception e){
   e.printStackTrace();
  }finally{
   try{
    if(pstmt != null){
     pstmt.close();
    }
   }catch(Exception e){
    
   }
   DBConn.close();
  }
  return result;
 }
 //직원 전체 출력
 public int count(){
  int result = 0;
  Connection conn = null;
  PreparedStatement pstmt = null;
  
  try{
   conn = DBConn.getConnection();
   String sql = String.format("select count(*) as \"count\" from employeeView");
   pstmt = conn.prepareStatement(sql);
   ResultSet rs = pstmt.executeQuery();
   while(rs.next()){
    result = rs.getInt("count");
   }
   rs.close();
  }catch(Exception e){
   e.printStackTrace();
  }finally{
   try{
    if(pstmt != null){
     pstmt.close();
    }
   }catch(Exception e){
    
   }
   DBConn.close();
  }
  return result;
 }
 //직원 검색 결과 인원수 출력 메소드
  public int count(String searchKey, String searchValue){
   int result = 0;
   Connection conn = null;
   PreparedStatement pstmt = null;
   
   try{
    conn = DBConn.getConnection();
    String sql = String.format("select count(*) as \"count\" from employeeView e");
    switch(searchKey){
    case "0" : sql += " WHERE employeeId=?"; break;
    case "1" : sql += " WHERE ssn=encrypt(?, e.name)"; break;
    case "2" : sql += " WHERE name=?"; break;
    case "3" : sql += " WHERE regionName=?"; break;
    case "4" : sql += " WHERE departmentName=?"; break;
    case "5" : sql += " WHERE positionName=?"; break;
    case "9" : sql += ""; break; //전체 검색
    }
    pstmt = conn.prepareStatement(sql);
    if (!searchKey.equals("9")) {
     pstmt.setString(1, searchValue);
    }
    ResultSet rs = pstmt.executeQuery();
    while(rs.next()){
     result = rs.getInt("count");
    }
    rs.close();
   }catch(Exception e){
    e.printStackTrace();
   }finally{
    try{
     if(pstmt != null){
      pstmt.close();
     }
    }catch(Exception e){
     
    }
    DBConn.close();
   }
   return result;
  }
  
  
  
  //직원 입력 메소드
  public int add(Employee e) {
   int result = 0;
   /*
   INSERT INTO employee (employeeId
   ,name
   ,ssn
   ,birthday
   ,lunar
   ,telephone
   ,departmentId
   ,positionId
   ,regionId
   ,basicPay
   ,extraPay)
   VALUES (employeeSeq.nextval
   , ?
   , encrypt(?, ?)
   , ? --'1980-12-12'
   , ? --양력 0, 음력 1
   , ? --'010-123-1234'
   , ? --departmentId FK
   , ? --positionId FK
   , ? --regionId FK
   , ?
   , ?)
   */
   
   //문제) 입력 관련 액션 추가
        Connection conn = null;
        PreparedStatement pstmt = null;

        try{
           conn = DBConn.getConnection();
           String sql = String.format("INSERT INTO employee (employeeId,name,ssn,birthday ,lunar,telephone,departmentId ,positionId,regionId ,basicPay,extraPay) VALUES (employeeSeq.nextval, ?, encrypt(?, ?) ,? , ? ,? ,? , ?,? , ?, ?)");
           pstmt = conn.prepareStatement(sql);

           pstmt.setString(1, e.getName());
           pstmt.setString(2, e.getSsn());
           pstmt.setString(3,e.getName());
           pstmt.setString(4, e.getBirthday());
           pstmt.setInt(5, e.getLunar());
           pstmt.setString(6, e.getTelephone());
           pstmt.setString(7, e.getDepartmentId());
           pstmt.setString(8, e.getPositionId());
           pstmt.setString(9, e.getRegionId());
           pstmt.setInt(10, e.getBasicPay());
           pstmt.setInt(11, e.getExtraPay());

           result = pstmt.executeUpdate();

        }catch(Exception ex){
           ex.printStackTrace();
        }finally{
           try{
              if(pstmt != null){
                 pstmt.close();
              }
           }catch(Exception ex){

           }
           DBConn.close();
        }   
   
   
   return result;
  }
  

  //직위 종류 출력 메소드
  public ArrayList<Position> positionList() {
   ArrayList<Position> result = new ArrayList<Position>();
   
   //SELECT positionId, positionName, minBasicPay
      // FROM position
      // ORDER BY positionId
     Connection conn = null;
     PreparedStatement pstmt = null;
   
     try{
        conn = DBConn.getConnection();
   
     String sql = "SELECT positionId, positionName, minBasicPay FROM position ORDER BY positionId";
     pstmt = conn.prepareStatement(sql);
     ResultSet rs = pstmt.executeQuery();
     
     while(rs.next()){
      Position p = new Position();
      p.setPositionId(rs.getString("positionId"));
      p.setPositionName(rs.getString("positionName"));
      p.setMinBasicPay(rs.getInt("minBasicPay"));
      result.add(p);
      
     }
     
     rs.close();
       
     }catch(Exception ex){
            ex.printStackTrace();
         }finally{
            try{
               if(pstmt != null){
                  pstmt.close();
               }
            }catch(Exception ex){
   
            }
            DBConn.close();
     }           
   
   return result;
  }
  
  //최소 기본급 검색 메소드
  public int getMinBasicPay(String positionId) {
   int result = 0;
   
   //SELECT minBasicPay FROM position WHERE positionId=?
     Connection conn = null;
     PreparedStatement pstmt = null;
   
     try{
        conn = DBConn.getConnection();
      
     String sql = "SELECT minBasicPay FROM position WHERE positionId=?";
     pstmt = conn.prepareStatement(sql);
     pstmt.setString(1, positionId);
     
     ResultSet rs = pstmt.executeQuery();
     
     while(rs.next()){
      result = rs.getInt("minBasicPay");
     }
     
     rs.close();

     
     }catch(Exception ex){
            ex.printStackTrace();
         }finally{
            try{
               if(pstmt != null){
                  pstmt.close();
               }
            }catch(Exception ex){
   
            }
            DBConn.close();
     }    
   
   return result;
  }
  
  //지역 종류 출력 메소드
  public ArrayList<Region> regionList() {
   
   ArrayList<Region> result = new ArrayList<Region>();

   Connection conn = null;
   PreparedStatement pstmt = null;
   try {
    conn = DBConn.getConnection(); 
    
    //SELECT regionId, regionName, delCheck
    // FROM regionView
    // ORDER BY regionId;
    String sql = "SELECT regionId, regionName, delCheck FROM regionView ORDER BY regionId";
    pstmt = conn.prepareStatement(sql);
    ResultSet rs = pstmt.executeQuery();
    while(rs.next()) {
     Region r = new Region();
     r.setRegionId(rs.getString("regionId"));
     r.setRegionName(rs.getString("regionName"));
     r.setDelCheck(rs.getInt("delCheck"));
     result.add(r);
    }
    rs.close();
   
   }catch(Exception e){
    e.printStackTrace();
   }finally{
    try {
     if (pstmt != null) {
      pstmt.close();
     }
    }catch(Exception e){
    }
    
    DBConn.close();   
   }   
   
   return result;
  }  
  
  //부서 종류 출력 메소드
  public ArrayList<Department> departmentList() {
   
   ArrayList<Department> result = new ArrayList<Department>();
   
   Connection conn = null;
   PreparedStatement pstat = null;

   try{
    conn = DBConn.getConnection();
    String sql = "SELECT departmentId, departmentName, delCheck FROM departmentView ORDER BY departmentId";
    pstat = conn.prepareStatement(sql);
    ResultSet rs = pstat.executeQuery();
    while(rs.next()){
     Department d = new Department();
     d.setDepartmentId(rs.getString("departmentId"));
     d.setDepartmentName(rs.getString("departmentName"));
     d.setDelCheck(rs.getInt("delCheck"));
     result.add(d);
    }
    rs.close();
   }catch(Exception e){
    e.printStackTrace();
   }finally{
    try{
     if(pstat!=null){
      pstat.close();
     }
    }catch(Exception e){
    }
    DBConn.close();
   }
   return result;
  }  
  
  //로그인 메소드
  //grade 변수에는 0 또는 1 전달될 예정
  //0->관리자 로그인 시도
  //1->일반직원 로그인 시도
  public int login(String id, String pw, String grade){
   int result = 0;
   
   Connection conn = null;
   PreparedStatement pstmt = null;
   
   try{
    conn = DBConn.getConnection();
    String sql = String.format("SELECT COUNT(*) AS count FROM employeeView WHERE name = ? AND ssn = encrypt(?,?)");
    if (grade.equals("0")) {
     sql += " AND grade=0";
    }

    pstmt = conn.prepareStatement(sql);
     pstmt.setString(1, id);
     pstmt.setString(2, pw);
     pstmt.setString(3, id);

    ResultSet rs = pstmt.executeQuery();
    while(rs.next()){
     result = rs.getInt("count");
    }
    rs.close();
    
   }catch(Exception e){
    e.printStackTrace();
   }finally{
    try{
     if(pstmt != null){
      pstmt.close();
     }
    }catch(Exception e){
    }
    DBConn.close();
   }
     
   return result;
    
  }
  
  
  //직원 삭제 메소드
  public int remove(String employeeId) {
   int result = 0;
   
   //DELETE FROM employee WHERE employeeId=?
   
   //문제) 삭제 액션 작성
   
   return result;
  }
  
  //직원 수정 메소드
  public int modify(Employee emp) {
   int result = 0;
   /*
   UPDATE employee SET birthday=?
     ,lunar=?
     ,telephone=?
     ,departmentId=?
     ,positionId=?
     ,regionId=?
     ,basicPay=?
     ,extraPay=?
     ,grade=?
    WHERE employeeId=? and ssn=encrypt(?, ?);
    */
   
   //문제) 수정 액션 작성
   
   return result;
  }
   
  
}

 


//Action.java
package com.test;

import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

//액션 전용 클래스 -> 메소드 단위로 액션 처리
public class Action {

 /*
 public String 메소드이름(HttpServletRequest request, HttpServletResponse response)
  throws ServletException, IOException {
  
  return "WEB-INF/source/요청주소";
  //return "redirect:요청주소";
 }
 */
 
 public String regionList(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  //액션 및 결과 출력
  RegionDAO dao = new RegionDAO();
  request.setAttribute("list", dao.regionList());
  
  return "WEB-INF/source/RegionList.jsp";
 }
 
 public String regionInsert(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  //액션 전용
  //데이터 수신(한글 인코딩 추가)
  request.setCharacterEncoding("UTF-8");
  String regionName = request.getParameter("regionName");

  //데이터베이스 액션 -> add() 메소드 호출로 대체
  RegionDAO dao = new RegionDAO();
  Region r = new Region();
  r.setRegionName(regionName);
  dao.add(r);
  return "redirect:RegionList.it";
 }
 
 public String regionDelete(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  //액션 전용
  //데이터 수신(한글 인코딩 추가)
  request.setCharacterEncoding("UTF-8");
  String regionId = request.getParameter("regionId");

  //데이터베이스 액션 -> add() 메소드 호출로 대체
  RegionDAO dao = new RegionDAO();
  dao.remove(regionId);
  
  return "redirect:RegionList.it";
 }
 
 public String regionUpdate(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  //액션 전용
  //데이터 수신(한글 인코딩 추가)
  request.setCharacterEncoding("UTF-8");
  String regionName = request.getParameter("regionName");
  String regionId = request.getParameter("regionId");
  
  //데이터베이스 액션 -> add() 메소드 호출로 대체
  RegionDAO dao = new RegionDAO();
  Region r = new Region();
  r.setRegionName(regionName);
  r.setRegionId(regionId);
  dao.modify(r);
  
  return "redirect:RegionList.it";
 }

 public String positionList(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  //액션 및 결과 출력
  PositionDAO dao = new PositionDAO();
  request.setAttribute("list", dao.positionList());
  
  return "WEB-INF/source/PositionList.jsp";
 }
 
 public String positionInsert(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  //액션 전용
  //데이터 수신(한글 인코딩 추가)
  request.setCharacterEncoding("UTF-8");
  String positionName = request.getParameter("positionName");
  String minBasicPay = request.getParameter("minBasicPay");
  //데이터베이스 액션 -> add() 메소드 호출로 대체
  PositionDAO dao = new PositionDAO();
  Position p = new Position();
  p.setPositionName(positionName);
  p.setMinBasicPay(Integer.parseInt(minBasicPay));
  dao.add(p);
  return "redirect:PositionList.it";
 }
 
 public String positionDelete(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  //액션 전용
  //데이터 수신(한글 인코딩 추가)
  request.setCharacterEncoding("UTF-8");
  String positionId = request.getParameter("positionId");

  //데이터베이스 액션 -> add() 메소드 호출로 대체
  PositionDAO dao = new PositionDAO();
  dao.remove(positionId);
  
  return "redirect:PositionList.it";
 }
 
 public String positionUpdate(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  //액션 전용
  //데이터 수신(한글 인코딩 추가)
  request.setCharacterEncoding("UTF-8");
  String positionName = request.getParameter("positionName");
  String positionId = request.getParameter("positionId");
  String minBasicPay = request.getParameter("minBasicPay");
  //데이터베이스 액션 -> add() 메소드 호출로 대체
  PositionDAO dao = new PositionDAO();
  Position p = new Position();
  p.setPositionName(positionName);
  p.setPositionId(positionId);
  p.setMinBasicPay(Integer.parseInt(minBasicPay));
  dao.modify(p);
  
  return "redirect:PositionList.it";
 }

 public String departmentList(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  //액션 및 결과 출력
  DepartmentDAO dao = new DepartmentDAO();
  request.setAttribute("list", dao.departmentList());
  
  return "WEB-INF/source/DepartmentList.jsp";
 }
 
 public String departmentInsert(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  //액션 전용
  //데이터 수신(한글 인코딩 추가)
  request.setCharacterEncoding("UTF-8");
  String departmentName = request.getParameter("departmentName");

  //데이터베이스 액션 -> add() 메소드 호출로 대체
  DepartmentDAO dao = new DepartmentDAO();
  Department d = new Department();
  d.setDepartmentName(departmentName);
  dao.add(d);
  return "redirect:DepartmentList.it";
 }
 
 public String departmentDelete(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  //액션 전용
  //데이터 수신(한글 인코딩 추가)
  request.setCharacterEncoding("UTF-8");
  String departmentId = request.getParameter("departmentId");

  //데이터베이스 액션 -> add() 메소드 호출로 대체
  DepartmentDAO dao = new DepartmentDAO();
  dao.remove(departmentId);
  
  return "redirect:DepartmentList.it";
 }
 
 public String departmentUpdate(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  //액션 전용
  //데이터 수신(한글 인코딩 추가)
  request.setCharacterEncoding("UTF-8");
  String departmentName = request.getParameter("departmentName");
  String departmentId = request.getParameter("departmentId");
  
  //데이터베이스 액션 -> add() 메소드 호출로 대체
  DepartmentDAO dao = new DepartmentDAO();
  Department d = new Department();
  d.setDepartmentName(departmentName);
  d.setDepartmentId(departmentId);
  dao.modify(d);
  
  return "redirect:DepartmentList.it";
 }
 
 
 
 public String employeeList(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
 
  //문제) 데이터베이스 액션 및 결과 데이터 전달
  EmployeeDAO dao = new EmployeeDAO();
  request.setAttribute("count", dao.count());
  request.setAttribute("list", dao.list());
  
  return "WEB-INF/source/EmployeeList.jsp";
 }
 
 public String employeeSearch(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
 
  //문제) 데이터 수신 및 데이터베이스 액션, 결과 데이터 전달
  request.setCharacterEncoding("UTF-8");
  String searchKey = request.getParameter("searchKey");
  String searchValue = request.getParameter("searchValue");
  if (searchKey != null) {
   EmployeeDAO dao = new EmployeeDAO();
   request.setAttribute("count", dao.count(searchKey, searchValue));
   request.setAttribute("list", dao.list(searchKey, searchValue));
  }
  
  request.setAttribute("searchKey", searchKey);
  request.setAttribute("searchValue", searchValue);
  
  return "WEB-INF/source/EmployeeSearch.jsp";
 }
 
 
 
 public String employeeInsertForm(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  
  EmployeeDAO dao = new EmployeeDAO();
  
  request.setAttribute("positionList", dao.positionList());
  request.setAttribute("regionList", dao.regionList());
  request.setAttribute("departmentList", dao.departmentList());
  
  return "WEB-INF/source/EmployeeInsertForm.jsp";
 }
 
 public String employeeInsert(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  
  //데이터 수신
  request.setCharacterEncoding("UTF-8");
  String name = request.getParameter("name");
  String ssn = request.getParameter("ssn");
  String birthday = request.getParameter("birthday");
  String lunar = request.getParameter("lunar");
  String telephone = request.getParameter("telephone");
  String regionId = request.getParameter("regionId");
  String departmentId = request.getParameter("departmentId");
  String positionId = request.getParameter("positionId");
  String basicPay = request.getParameter("basicPay");
  String extraPay = request.getParameter("extraPay");

  //데이터베이스 액션 -> add() 메소드 호출
  EmployeeDAO dao = new EmployeeDAO();
  Employee e = new Employee();
  e.setName(name);
  e.setSsn(ssn);
  e.setBirthday(birthday);
  e.setLunar(Integer.parseInt(lunar));
  e.setTelephone(telephone);
  e.setRegionId(regionId);
  e.setDepartmentId(departmentId);
  e.setPositionId(positionId);
  e.setBasicPay(Integer.parseInt(basicPay));
  e.setExtraPay(Integer.parseInt(extraPay));
  dao.add(e);
  
  return "redirect:EmployeeList.it";
 }
 
 public String positionReceive(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  
  //데이터 수신 (positionId)
  String positionId = request.getParameter("positionId");

  EmployeeDAO dao = new EmployeeDAO();
  request.setAttribute("result", String.valueOf(dao.getMinBasicPay(positionId)));
  
  return "WEB-INF/source/PositionReceive.jsp";
 }

 
 
}

 

 


//Controller.java
package com.test;

import java.io.IOException;

import javax.servlet.*;
import javax.servlet.http.*;
import com.sun.corba.se.spi.orbutil.fsm.*;

public class Controller extends HttpServlet {

 private static final long serialVersionUID = 1L;

 @Override
 protected void doGet(HttpServletRequest req, HttpServletResponse resp)
   throws ServletException, IOException {
  doGetPost(req, resp);
 }

 @Override
 protected void doPost(HttpServletRequest req, HttpServletResponse resp)
   throws ServletException, IOException {
  doGetPost(req, resp);
 }

 private void doGetPost(HttpServletRequest request,
   HttpServletResponse response) throws ServletException, IOException {

  // 요청 주소 분석 및 액션 메소드 호출
  String uri = request.getRequestURI();
  // -> "http://localhost:8090/프로젝트이름/Sample.it"

  Action action = new Action();
  String result = "Error.jsp";

  //요청 주소별로 작성할 것.
  if (uri.indexOf("RegionList.it") != -1) {
   // 액션 메소드 호출
   // 메소드 결과는 URI 주소 형태를 가지고 있다.
   result = action.regionList(request, response);
  }
  
  if (uri.indexOf("RegionInsert.it") != -1) {
   result = action.regionInsert(request, response);
  }
  
  if (uri.indexOf("RegionDelete.it") != -1) {
   result = action.regionDelete(request, response);
  }
  
  if (uri.indexOf("RegionUpdate.it") != -1) {
   result = action.regionUpdate(request, response);
  }
  
  if (uri.indexOf("PositionList.it") != -1) {
   // 액션 메소드 호출
   // 메소드 결과는 URI 주소 형태를 가지고 있다.
   result = action.positionList(request, response);
  }
  
  if (uri.indexOf("PositionInsert.it") != -1) {
   result = action.positionInsert(request, response);
  }
  
  if (uri.indexOf("PositionDelete.it") != -1) {
   result = action.positionDelete(request, response);
  }
  
  if (uri.indexOf("PositionUpdate.it") != -1) {
   result = action.positionUpdate(request, response);
  }
  
  if (uri.indexOf("DepartmentList.it") != -1) {
   // 액션 메소드 호출
   // 메소드 결과는 URI 주소 형태를 가지고 있다.
   result = action.departmentList(request, response);
  }
  
  if (uri.indexOf("DepartmentInsert.it") != -1) {
   result = action.departmentInsert(request, response);
  }
  
  if (uri.indexOf("DepartmentDelete.it") != -1) {
   result = action.departmentDelete(request, response);
  }
  
  if (uri.indexOf("DepartmentUpdate.it") != -1) {
   result = action.departmentUpdate(request, response);
  }
  
  
  //문제) 주소 등록
  if (uri.indexOf("EmployeeList.it") != -1) {
   result = action.employeeList(request, response);
  }
  if (uri.indexOf("EmployeeSearch.it") != -1) {
   result = action.employeeSearch(request, response);
  }
  if (uri.indexOf("EmployeeInsertForm.it") != -1) {
   result = action.employeeInsertForm(request, response);
  }
  if (uri.indexOf("EmployeeInsert.it") != -1) {
   result = action.employeeInsert(request, response);
  }
  if (uri.indexOf("PositionReceive.it") != -1) {
   result = action.positionReceive(request, response);
  }
  
  

  // 페이지 전환 -> forward(), sendRedirect() 메소드
  if (result.indexOf("redirect:") != -1) {
   // sendRedirect 요청
   // -> 또 다른 서블릿 주소 요청
   response.sendRedirect(result.substring(9));
  } else {
   // forward 요청
   // -> 연관된 JSP 페이지 요청
   RequestDispatcher dispatcher = request.getRequestDispatcher(result);
   dispatcher.forward(request, response);
  }
 }

}

 

 

 


//EmployeeList.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>직원관리(Servlet MVC 버전)</title>

<link rel="stylesheet" type="text/css" href="TableStyle.css">
<link rel="stylesheet" type="text/css" href="DivStyle.css">

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
 $("#btnSearch").click(function() {
   /* 요청주소 지정시 확장자 .it 사용 */
   $(location).attr("href", "EmployeeSearch.it");
  });
 $("#btnAdd").click(function() {
  $(location).attr("href", "EmployeeInsertForm.it");
 });
});
</script>

</head>
<body>
<div>
 <%--메뉴 영역--%>
 <div class = "title">
  <h1>직원관리</h1>
  <c:import url="EmployeeMenu.jsp"></c:import>
 </div>
 <%--콘텐츠 영역--%>
 <div class = "main">
  <h2>[직원명단]</h2>
  <form>
   <input type = "button" value = "직원추가" id = "btnAdd" name = "btnAdd">
   <input type = "button" value = "직원검색" id = "btnSearch" name = "btnSearch" onclick="location.href='EmployeeSearch.jsp'">
  </form>
  <!-- <p>직원수 : 1명</p> -->
  <p>직원수 : ${count} 명</p>
  <table id ="t01" style = "font-size:10pt;">
   <tr>
   <th>직원번호</th><th>이름</th><th>생년월일</th><th>양음력</th><th>전화번호</th>
   <th>부서명</th><th>직위명</th><th>지역명</th><th>기본급</th><th>수당</th><th>급여</th>
   <th>등급</th>
   <th>삭제</th><th>수정</th>
   </tr>
   <%--
   <tr>
   <td>1</td><td>홍길동</td><td>1991-03-01</td><td>양력</td><td>010-1234-1234</td>
   <td>개발부</td><td>사원</td><td>서울</td>
   <td style = "text-align: right;">1,000,000</td>
   <td style = "text-align: right;">500,000</td>
   <td style = "text-align: right;">1,500,000</td>
   <td>관리자</td>
   id ="" 식별자 사용 불가 ->반복문을 사용하기 떄문에
   중복이 가능한 식별자 class =""를 사용한다.
   <td><input type = "button" value = "삭제" class = "btnDelete"></td>
   <td><input type = "button" value = "수정" class = "btnUpdate"></td>
   </tr>
   --%>
   <c:forEach var="e" items="${list}">
   <tr>
   <td>${e.employeeId}</td>
   <td>${e.name}</td>
   <td>${e.birthday}</td>
   <td>${e.lunarName}</td>
   <td>${e.telephone}</td>
   <td>${e.departmentName}</td>
   <td>${e.positionName}</td>
   <td>${e.regionName}</td>
   <td style="text-align: right;"><fmt:formatNumber value="${e.basicPay}" groupingUsed="true"></fmt:formatNumber></td>
   <td style="text-align: right;"><fmt:formatNumber value="${e.extraPay}" groupingUsed="true"></fmt:formatNumber></td>
   <td style="text-align: right;"><fmt:formatNumber value="${e.pay}" groupingUsed="true"></fmt:formatNumber></td>
   <td>${e.grade==0?"관리자":"일반"}</td>
   <td><input type="button" value="삭제" class="btnDelete"  ${e.grade==0?"disabled=\"disabled\"":""} ></td>
   <td><input type="button" value="수정" class="btnUpdate"></td>
   </tr>   
   </c:forEach>
  </table>
 </div>
</div>


</body>
</html>

 


//EmployeeSearch.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
 pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>직원검색(Servlet MVC 버전)</title>

<link rel="stylesheet" type="text/css" href="TableStyle.css">
<link rel="stylesheet" type="text/css" href="DivStyle.css">

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

<script type="text/javascript">
$(document).ready(function() {
 
 for (var i=0; i<$(".searchKey").length; ++i) {
  var searchKey = $(".searchKey").eq(i);
  if ($(searchKey).val() == "${searchKey}") {
   $(searchKey).attr("checked", "checked");
  }
 }
 
 $("#btnList").click(function() {
   $(location).attr("href", "EmployeeList.it");
  });
 $("#btnAdd").click(function() {
  $(location).attr("href", "EmployeeInsertForm.it");
 });
});


</script>

</head>
<body>
 <div>
  <%--메뉴 영역--%>
  <div class="title">
   <h1>직원관리</h1>
   <c:import url="EmployeeMenu.jsp"></c:import>
  </div>
  <%--콘텐츠 영역--%>
  <div class="main">
   <h2>[직원검색]</h2>
   <form id="t01">
    <input type="button" value="직원명단" id="btnList">
    <input type="button" value="직원추가" id="btnAdd">
   </form>
   <form method="post" id="myForm">
    <p>
     [검색기준]
     <input type="radio" class="searchKey" name="searchKey" value="0" checked="checked">사번
     <input type="radio" class="searchKey" name="searchKey" value="1">주민번호
     <input type="radio" class="searchKey" name="searchKey" value="2">이름
     <input type="radio" class="searchKey" name="searchKey" value="3">지역
     <input type="radio" class="searchKey" name="searchKey" value="4">부서
     <input type="radio" class="searchKey" name="searchKey" value="5">직위
    </p>
    <p>
     검색단어 <input type="text" id="searchValue" name="searchValue" value="${searchValue}">
     <input type="submit" value="직원검색">
    </p>
   </form>
   <p>검색 직원수 : ${count}명</p>
   <table id="t01" style="font-size:10pt;">
    <tr>
     <th>직원번호</th>
     <th>이름</th>
     <th>생년월일</th>
     <th>양음력</th>
     <th>전화번호</th>
     <th>부서명</th>
     <th>직위명</th>
     <th>지역명</th>
     <th>기본급</th>
     <th>수당</th>
     <th>급여</th>
     <th>등급</th>
     <th>삭제</th>
     <th>수정</th>
    </tr>
  <%--   <tr>
     <td>1</td>
     <td>홍길동</td>
     <td>1991-03-01</td>
     <td>양력</td>
     <td>010-1234-1234</td>
     <td>개발부</td>
     <td>사원</td>
     <td>서울</td>
     <td style="text-align: right;">1,000,000</td>
     <td style="text-align: right;">500,000</td>
     <td style="text-align: right;">1,500,000</td>
     <td>관리자</td>
     id ="" 식별자 사용 불가 ->반복문을 사용하기 떄문에
     중복이 가능한 식별자 class =""를 사용한다.
     <td><input type="button" value="삭제" class="btnDelete"></td>
     <td><input type="button" value="수정" class="btnUpdate"></td>
    </tr> --%>
    <c:forEach var="e" items="${list}">
    <tr>
    <td>${e.employeeId}</td>
    <td>${e.name}</td>
    <td>${e.birthday}</td>
    <td>${e.lunarName}</td>
    <td>${e.telephone}</td>
    <td>${e.departmentName}</td>
    <td>${e.positionName}</td>
    <td>${e.regionName}</td>
    <td style="text-align: right;"><fmt:formatNumber value="${e.basicPay}" groupingUsed="true"></fmt:formatNumber></td>
    <td style="text-align: right;"><fmt:formatNumber value="${e.extraPay}" groupingUsed="true"></fmt:formatNumber></td>
    <td style="text-align: right;"><fmt:formatNumber value="${e.pay}" groupingUsed="true"></fmt:formatNumber></td>
    <td>${e.grade==0?"관리자":"일반"}</td>
    <td><input type="button" value="삭제" class="btnDelete"  ${e.grade==0?"disabled=\"disabled\"":""} ></td>
    <td><input type="button" value="수정" class="btnUpdate"></td>
    </tr>   
    </c:forEach>
   </table>
  </div>
 </div>
</body>
</html>

 

 

//EmployeeInsertForm.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>직원관리(Servlet MVC 버전)</title>

<link rel="stylesheet" type="text/css" href="TableStyle.css">
<link rel="stylesheet" type="text/css" href="DivStyle.css">

<link rel="stylesheet" href="http://code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css">
<script src="http://code.jquery.com/jquery-1.10.2.js"></script>
<script src="http://code.jquery.com/ui/1.11.4/jquery-ui.js"></script>

<script type="text/javascript">
$(document).ready(function() {

 $("#birthday").datepicker({
  changeYear:true
  , changeMonth: true
  , dateFormat:"yy-mm-dd"
 });
 

 $("#btnSearch").click(function() {
  $(location).attr("href", "EmployeeSearch.it");
 });
 $("#btnList").click(function() {
  $(location).attr("href", "EmployeeList.it");
 });

 //기본급
 minBasicPay($("#positionId").val());
 
 //선택 목록에 체인지 이벤트 등록
 $("#positionId").change(function(){
  minBasicPay($("#positionId").val());
 });
});

function minBasicPay(positionId) {
 
 $.get("PositionReceive.it?positionId="+$("#positionId").val(),function(result){
  $("#minBasicPay").html(result);
 });
}

</script>


</head>
<body>
<div>
 <%--메뉴 영역--%>
 <div class = "title">
 <%--
  동일한 메뉴 디자인을 여러 페이지에 적용한 경우
  수정 사항이 발생하면 모든 페이지를 동일하게 수정해야 한다.
  -> 동일한 메뉴 디자인을 별도의 페이지로 작성
  -> 필요하는 페이지에 동적 삽입
 --%>
  <h1>직원관리</h1>
  <c:import url="EmployeeMenu.jsp"></c:import>
 </div>
 <%--콘텐츠 영역--%>
 <div class = "main">
  <h2>[직원명단]</h2>
  
  <form>
   <%-- 직원명단 버튼은 식별자로 class 사용 --%>
   <input type="button" value="직원명단" id="btnList">
   <input type="button" value="직원검색" id="btnSearch">
  </form>
  
   <form action="EmployeeInsert.it" method="post" id="myForm">
    <table id="t02">
     <tr>
      <th>이름</th>
      <td><input type="text" id="name" name="name"></td>
     </tr>
     <tr>
      <th>주민번호</th>
      <td><input type="text" id="ssn" name="ssn"></td>
     </tr>
     <tr>
      <th>생년월일</th>
      <td><input type="text" id="birthday" name="birthday">달력</td>
     </tr>
     <tr>
      <th>양/음력</th>
      <td><input type="radio" class="lunar" name="lunar" value="0" checked="checked">양력
       <input type="radio" class="lunar" name="lunar" value="1">음력</td>
     </tr>
     <tr>
      <th>전화번호</th>
      <td><input type="text" id="telephone" name="telephone"></td>
     </tr>
     <tr>
      <th>지역명</th>
      <td><select id="regionId" name="regionId">
        <!-- <option value="1">서울</option> -->
        <c:forEach var="r" items="${regionList}">
        <option value="${r.regionId}">${r.regionName}</option>
        </c:forEach>
      </select></td>
     </tr>
     <tr>
      <th>부서명</th>
      <td><select id="departmentId" name="departmentId">
        <!-- <option value="1">개발부</option> -->
        <c:forEach var="d" items="${departmentList}">
        <option value="${d.departmentId}">${d.departmentName}</option>
        </c:forEach>
      </select></td>
     </tr>
     <tr>
      <th>직위명</th>
      <td><select id="positionId" name="positionId">
        <!-- <select><option>사원</option></select> -->

        <c:forEach var="p" items="${positionList}">
        <option value="${p.positionId}">${p.positionName}</option>
        </c:forEach>

      </select></td>
     </tr>
     <tr>
      <th>기본급</th>
      <td><input type="text" name="minBasicPay">(최소 <span id="minBasicPay">0</span>원
       이상)</td>
     </tr>
     <tr>
      <th>수당</th>
      <td><input type="text" name="extraPay"></td>
     </tr>
     <tr>
      <th></th>
      <td><input type="submit" value="직원추가"></td>
     </tr>
    </table>
   </form>
 
 </div>
</div>
</body>
</html>

 

 


//PositionReceive.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
${result}

 

 

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

'MVC' 카테고리의 다른 글

08일차_MVC패턴, 직원관리  (0) 2015.06.30
07일차_MVC패턴, 직원관리  (0) 2015.06.30
05일차_MVC패턴, 직원관리  (0) 2015.06.30
04일차_MVC패턴, 회원관리, 성적관리  (0) 2015.06.30
03일차(2)_모델2방식, 성적관리  (0) 2015.06.30
블로그 이미지

알 수 없는 사용자

,