카테고리 없음

Struts 2 EMP CRUD example

Soul-Learner 2014. 3. 28. 19:35

Struts 2 EMP CRUD example


테스트환경

JDK 1.7, Oracle 11g XE, Tomcat 7, Struts 2.3, Eclipse(Kepler)



개요

한개의 액션 클래스(EmpAction)에 다수개의 액션을 설정한 예제이다

ActionSupport 를 상속하고 Preparable, ModelDriven<Emp> 인텨페이스를 구현한다

클라이언트에서 전달된 파라미터를 이용하여 서버측에서 모델 오브젝트가 생성될 수 있도록 ModelDriven 인터페이스의 getModel() 메소드와 Preparable 인터페이스의 prepare() 메소드를 사용하였다.

데이터베이스는 Oracle 11g XE 버전에서 제공하는 scott.sql을 실행하여 SCOTT 계정을 EMP 테이블을 생성하였고 EMP 테이블을 복사하여 EMP2라는 테이블을 대상으로 CRUD 기능을 구현하였다.



struts.xml

        <action name="empList" class="emp.EmpAction" method="empList">

        <result>emp/empList.jsp</result>

        </action>

        

        <action name="empInfo" class="emp.EmpAction" method="empInfo">

        <interceptor-ref name="params" />

        <result>emp/empInfo.jsp</result>

        </action>

        

         <action name="empModifyForm" class="emp.EmpAction" method="empModifyForm">

          <interceptor-ref name="params" />

          <result>emp/empModifyForm.jsp</result>

         </action>

        <action name="empModify" class="emp.EmpAction" method="empModify">

        <interceptor-ref name="prepare" />

<interceptor-ref name="modelDriven" />

<interceptor-ref name="params" />

        <result>emp/empModifyForm.jsp</result>

        </action>

        

        <action name="empDelete" class="emp.EmpAction" method="empDelete">

        <interceptor-ref name="params" />

        <result>emp/empInfo.jsp</result>

        </action>

        

        <action name="empAddForm">

        <result>emp/empAddForm.jsp</result>

        </action>

        

        <action name="empAdd"  class="emp.EmpAction" method="empAdd">

        <interceptor-ref name="prepare" />

<interceptor-ref name="modelDriven" />

<interceptor-ref name="params" />

        <result>emp/empAddForm.jsp</result>

        </action>



EmpAction.java

package emp;


import java.util.*;


import com.opensymphony.xwork2.ActionSupport;

import com.opensymphony.xwork2.ModelDriven;

import com.opensymphony.xwork2.Preparable;


public class EmpAction extends ActionSupport implements Preparable, ModelDriven<Emp> {


private List<Emp> list;

private int empno;

private Emp empInfo;

private String resultMsg;

/*

@Override

public String execute() throws Exception {

return SUCCESS;

}*/

/** ModelDriven 인터페이스 구현 */

@Override

public Emp getModel() {

return empInfo;

}

/** Preparable 인터페이스 구현 */

@Override

public void prepare() throws Exception {

empInfo = new Emp();

}

public String empList() {

EmpDAO dao = new EmpDAO();

this.list = dao.getEmpList();

return SUCCESS;

}

public String empAdd(){

EmpDAO dao = new EmpDAO();

if(dao.addEmp(empInfo)) resultMsg = "added";

return SUCCESS;

}


public String empInfo() {

EmpDAO dao = new EmpDAO();

this.empInfo = dao.getEmp(empno);

return SUCCESS;

}

public String empModifyForm() {

EmpDAO dao = new EmpDAO();

this.empInfo = dao.getEmp(empno);

return SUCCESS;

}

public String empModify(){

EmpDAO dao = new EmpDAO();

if(dao.update(empInfo)) resultMsg = "updated";

return SUCCESS;

}


public String empDelete() {

EmpDAO dao = new EmpDAO();

if(dao.delete(empno)) resultMsg = "deleted";

return SUCCESS;

}

public String getResultMsg() {

return resultMsg;

}


public void setEmpno(int empno) {

this.empno = empno;

}

public List<Emp> getEmpList() {

return this.list;

}

public Emp getEmpInfo() {

return this.empInfo;

}


}



EmpDAO.java

package emp;


import java.sql.*;

import java.util.*;


public class EmpDAO {


Connection conn;

PreparedStatement pstmt;

ResultSet rs;

String jdbc_driver = "oracle.jdbc.OracleDriver";

String db_url = "jdbc:oracle:thin:@localhost:1521:XE";

   private Connection getConn() {

  try{

    Class.forName(jdbc_driver);

    conn = DriverManager.getConnection(db_url,"scott","tiger");

    return conn;

  }catch(Exception ex){

  ex.printStackTrace();

  }

  return null;

   }

   

   public List<Emp> getEmpList() {

  conn = getConn();

  String sql = "SELECT empno, ename, deptno, job FROM emp2";

  try {

pstmt = conn.prepareStatement(sql);

rs = pstmt.executeQuery();

ArrayList<Emp> list = new ArrayList<Emp>();

while(rs.next()){

Emp emp = new Emp();

emp.setEmpno(rs.getInt("EMPNO"));

emp.setEname(rs.getString("ENAME"));

emp.setDeptno(rs.getInt("DEPTNO"));

emp.setJob(rs.getString("JOB"));

list.add(emp);

}

return list;

  } catch (SQLException e) {

  e.printStackTrace();

  } finally {

  closeAll();

  }

  

  return null;

   }

   

   public Emp getEmp(int empno) {

  conn = getConn();

  String sql = "SELECT empno, ename, deptno, job FROM emp2 WHERE empno=?";

  try {

pstmt = conn.prepareStatement(sql);

pstmt.setInt(1, empno);

rs = pstmt.executeQuery();

if(rs.next()){

Emp emp = new Emp();

emp.setEmpno(rs.getInt("EMPNO"));

emp.setEname(rs.getString("ENAME"));

emp.setDeptno(rs.getInt("DEPTNO"));

emp.setJob(rs.getString("JOB"));

return emp;

}

  } catch (SQLException e) {

  e.printStackTrace();

  } finally {

  closeAll();

  }

  return null;

   }

   

   public boolean addEmp(Emp emp){

  conn = getConn();

  String sql = "INSERT INTO emp2 (empno, ename, deptno, job) "+

  "VALUES (?,?,?,?)";

  try {

pstmt = conn.prepareStatement(sql);

pstmt.setInt(1, emp.getEmpno());

pstmt.setString(2, emp.getEname());

pstmt.setInt(3, emp.getDeptno());

pstmt.setString(4, emp.getJob());

int row = pstmt.executeUpdate();

if(row>0) return true;

  } catch (SQLException e) {

  e.printStackTrace();

  } finally {

  closeAll();

  }

  return false;

   }

   

   public boolean update(Emp emp){

  conn = getConn();

  String sql = "UPDATE emp2 SET deptno=?, job=? WHERE empno=?";

  try {

pstmt = conn.prepareStatement(sql);

pstmt.setInt(1, emp.getDeptno());

pstmt.setString(2, emp.getJob());

pstmt.setInt(3, emp.getEmpno());


int row = pstmt.executeUpdate();

if(row>0) return true;

  } catch (SQLException e) {

  e.printStackTrace();

  } finally {

  closeAll();

  }

  return false;

   }

   

   public boolean delete(int empno){

  conn = getConn();

  String sql = "DELETE FROM emp2 WHERE empno=?";

  try {

pstmt = conn.prepareStatement(sql);

pstmt.setInt(1, empno);


int row = pstmt.executeUpdate();


if(row>0) return true;

  } catch (SQLException e) {

  e.printStackTrace();

  } finally {

  closeAll();

  }

  return false;

   }

   

   private void closeAll(){

  try{

  if(rs!=null) rs.close();

  if(pstmt!=null) pstmt.close();

  if(conn!=null) conn.close();

  }catch(Exception ex){

  ex.printStackTrace();

  }

   }

}



Emp.java
package emp;

public class Emp {
private int empno;
private String ename;
private int deptno;
private String job;
public int getEmpno() {
return empno;
}
public void setEmpno(int empno) {
this.empno = empno;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public int getDeptno() {
return deptno;
}
public void setDeptno(int deptno) {
this.deptno = deptno;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
}


empList.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="EUC-KR"%>

<%@ taglib prefix="s" uri="/struts-tags"%>

<!DOCTYPE html>

<html>

<head>

<title>empList.jsp</title>

<style type="text/css">

th {border-bottom: double; background-color:lightblue;}

td {border-bottom: dotted;}

a {text-decoration: none; }

</style>

</head>

<body>

<table>

<tr><th>사 번</th><th>이 름</th><th>부 서</th><th>직 무</th></tr>

<s:iterator value="empList">

<tr>

<td><s:property value="empno"/></td>

<s:url id="empInfoUrl" action="empInfo">

<s:param name="empno"><s:property value="empno"/></s:param>

</s:url>

<td><s:a href="%{empInfoUrl}"><s:property value="ename"/></s:a></td>

<td><s:property value="deptno"/></td>

<td><s:property value="job"/></td>

</tr>

</s:iterator>

</table>

<p>

[<s:a href="empAddForm">사원정보 추가</s:a>]

</body>

</html>



empInfo.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="EUC-KR"%>

<%@ taglib prefix="s" uri="/struts-tags"%>

<!DOCTYPE html>

<html>

<head>

<title>empInfo.jsp</title>

<style type="text/css">

th {border-bottom: double; background-color:lightblue;}

td {border-bottom: dotted;}

a {text-decoration: none; }

</style>

<script type="text/javascript">

function confirmDelete(deleteActionUrl){

var empno = ${empInfo.empno};

if(confirm('사번 '+empno+'의 사원정보를 정말로 삭제하시겠어요?')) {

location.href = deleteActionUrl;

}

}

</script>

<script type="text/javascript">

var resultMsg = '${resultMsg}';

if(resultMsg=='deleted'){

alert('사원정보 삭제 성공');

location.href='empList';

}

</script>

</head>

<body>


<table>

<tr><th>사 번</th><th>이 름</th><th>부 서</th><th>직 무</th></tr>

<tr>

<td><s:property value="empInfo.empno"/></td>

<td><s:property value="empInfo.ename"/></td>

<td><s:property value="empInfo.deptno"/></td>

<td><s:property value="empInfo.job"/></td>

</tr>

</table>

<p>

<s:url id="modifyFormUrl" action="empModifyForm">

<s:param name="empno" value="empInfo.empno"/>

</s:url>

[<s:a href="%{modifyFormUrl}">수 정</s:a>]


<s:url id="deleteUrl" action="empDelete">

<s:param name="empno" value="empInfo.empno"/>

</s:url>

[<s:a href="javascript:confirmDelete('%{deleteUrl}')">삭 제</s:a>]

[<s:a href="empList"> 리스트 페이지</s:a>]

</body>

</html>



empModifyForm.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="EUC-KR"%>

<%@ taglib prefix="s" uri="/struts-tags"%>

<!DOCTYPE html>

<html>

<head>

<title>사원정보 수정 폼</title>

<style type="text/css">

a {text-decoration: none; }

</style>

<script type="text/javascript">

var resultMsg = '${resultMsg}';

if(resultMsg=='updated'){

alert('사원정보수정 성공');

location.href="empList";

}

</script>

</head>

<body>

사원정보 수정 폼<p>

<s:form action="empModify" theme="simple">

<s:hidden name="empInfo.empno"/>

사 번:<s:property value="empInfo.empno"/><br>

이 름:<s:property value="empInfo.ename"/><br>

부서번호:<s:textfield name="empInfo.deptno"/><br>

직 무<s:textfield name="empInfo.job"/><br>

<s:submit value="적 용"/> <s:reset/>

</s:form>

<p>

[<s:a href="empList">리스트</s:a>]

</body>

</html>



empAddForm.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="EUC-KR"%>

<%@ taglib prefix="s" uri="/struts-tags"%>

<!DOCTYPE html>

<html>

<head>

<title>사원정보 입력폼</title>

<style type="text/css">

a {text-decoration: none; }

</style>

<script type="text/javascript">

var resultMsg = '${resultMsg}';

if(resultMsg=='added') {

alert('사원정보 저장 성공');

location.href="empList";

}


</script>

</head>

<body>

사원정보 입력폼<br>

<s:form action="empAdd" theme="simple"><br>

 사 번 <s:textfield name="empno"/><br>

 이 름 <s:textfield name="ename"/><br>

 부 서 <s:textfield name="deptno"/><br>

 직 무 <s:textfield name="job"/><br>

 <s:submit/> <s:reset/> [<s:a href="empList">리스트 페이지</s:a>]

</s:form>

</body>

</html>



테스트 : http://localhost:8080/프로젝트명/empList 으로 접속하면 모든 기능을 테스트할 수 있다