날짜 계산 함수

JSP 2015. 6. 22. 23:11

function dday() {

var toDay = new Date();

var dDay = new Date("2015-07-03");

var count = Math.floor((dDay.getTime() - toDay.getTime())/86400000)+1;

document.getElementById("day").innerHTML = "(D-" + count +")";

}

'JSP' 카테고리의 다른 글

11일차_직원관리_로그인  (0) 2015.06.22
10일차_직원관리_Ajax, jQuery  (0) 2015.06.22
09일차_직원관리  (1) 2015.06.22
08일차_직원관리  (0) 2015.06.22
07일차_직원관리_JSTL라이브러리 사용 준비  (1) 2015.06.22
블로그 이미지

알 수 없는 사용자

,

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

직원 관리 JSP(JDBC) 프로그램


11. 소스코드




//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 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"));

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 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"));

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;

}

}








//LoginForm.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>직원관리(JSP버전)</title>

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



<script type="text/javascript">

/* jQuery 버전 */

/* 문제) ID, PW 빈 항목 검사 및 서브밋 액션 */

$(function(){

/* $("#msg").css("display", "none"); */

$("#myForm").submit(function(){

if ($("#id").val()=="" || $("#pw").val()=="") {

$("#msg").css("display", "inline");

return false;

}

return true;

});

});


</script>


</head>

<body>

<div >

<div style="margin:auto; padding-top: 100px; width:350px; text-align: center;">


<h1>직원관리</h1>

<form method="post" action="Login.jsp" id="myForm">


<table>

<tr>

<td valign="middle"><img src="img_login.gif"></td>

<td>

<table>

<tr>

<td></td>

<td>

<input type="radio" name="grade" value="0"> 관리자 

<input type="radio" name="grade" checked="checked" value="1"> 일반직원

</td>

</tr>

<tr>

<td>ID*</td>

<td>

<input type="text" style="width: 150px;" id="id" name="id">

</td>

</tr>

<tr>

<td>PW*</td>

<td>

<input type="password" style="width: 150px;" id="pw" name="pw">

</td>

</tr>

<tr>

<td colspan="2" align="center">

<input type="submit" value="로그인"> 

<br><span id="msg" style="color: red; display: none;">ID, PW 항목을 채워야 합니다.</span>

</td>

</tr>

</table>

</td>

</tr>

</table>

</form>

</div>

</div>

</body>

</html>






//Login.jsp

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

    pageEncoding="UTF-8"%>

<%-- 액션 전용 페이지 --%> 

<%@ page import="com.test.*" %>   

<%

//문제)

//데이터 수신 -> id, pw, grade

request.setCharacterEncoding("UTF-8");

String id = request.getParameter("id");

String pw = request.getParameter("pw");

String grade = request.getParameter("grade");


//데이터베이스 액션 -> login() 메소드 호출

int result = 0;

EmployeeDAO dao = new EmployeeDAO();

result = dao.login(id, pw, grade);


//반환값(0 또는 1)을 분석하는 과정 추가

if (result == 0) {

//로그인 실패

response.sendRedirect("LoginFail.jsp");

} else {

//로그인 성공 (관리자, 일반 직원)

if (grade.equals("0")) {

//관리자 전용 세션 객체(login, admin) 생성 과정 추가

session.setAttribute("login", id);

session.setAttribute("admin", pw);

response.sendRedirect("EmployeeList.jsp");

} else {

//일반 직원 전용 세션 객체(login) 생성 과정 추가

session.setAttribute("login", id);

response.sendRedirect("EmpSearch.jsp");

}

}


%>








//Logout.jsp

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

    pageEncoding="UTF-8"%>

<%-- 액션 전용 페이지 --%>    

<%


//로그아웃 액션

session.removeAttribute("login");

session.removeAttribute("admin");


//강제 페이지 전환

response.sendRedirect("LogoutForm.jsp");

%>










//LogoutForm.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>직원관리(JSP버전)</title>

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


</head>

<body>

<div >

<div style="margin:auto; padding-top: 100px; width:350px; text-align: center;">


<h1>직원관리</h1>

<form method="post" action="">

<h2>안전하게 로그아웃되었습니다</h2>

<p><input type="button" value="로그인 화면으로 이동"

onclick="location.href='LoginForm.jsp'"></p>

</form>

</div>

</div>

</body>

</html>






//LoginFail.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>직원관리(JSP버전)</title>

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


</head>

<body>

<div >

<div style="margin:auto; padding-top: 100px; width:350px; text-align: center;">


<h1>직원관리</h1>

<form method="post" action="">

<h2>로그인 과정을 실패했습니다.</h2>

<p><input type="button" value="로그인 화면으로 이동" 

onclick="location.href='LoginForm.jsp'"></p>

</form>

</div>

</div>

</body>

</html>






//EmployeeMenu.jsp

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

    pageEncoding="UTF-8"%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<p> 

[<a href="EmployeeList.jsp">직원관리</a>]

[<a href="RegionList.jsp">지역관리</a>]

[<a href="DepartmentList.jsp">부서관리</a>]

[<a href="PositionList.jsp">직위관리</a>]

<!-- 로그인, 로그아웃 관련 메뉴 추가 예정 -->

[<a href="Logout.jsp">로그아웃(홍길동)</a>]

</p>






//EmpMenu.jsp

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

    pageEncoding="UTF-8"%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<p> 

<!-- 로그인, 로그아웃 관련 메뉴 추가 예정 -->

[<a href="Logout.jsp">로그아웃(<%=session.getAttribute("login")%>)</a>]

</p>





//EmpSearch.jsp

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

pageEncoding="UTF-8"%>

<%@ page import="com.test.*"%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<%

//페이지 차단 액션 추가 (일반 직원용 페이지)

if (session.getAttribute("login") == null) {

response.sendRedirect("LoginForm.jsp");

}

%>

<%

request.setCharacterEncoding("UTF-8");

StringBuilder sb = new StringBuilder();

int count = 0;

//사용자가 선택한 키와 값을 전달 받아서 검색 과정을 진행

//-> 최초 실행시 키와 값이 전달되지 않습니다.

String searchKey = request.getParameter("searchKey");

String searchValue = request.getParameter("searchValue");


//기본값을 "전체"로 지정

if (searchValue == null) {

searchKey = "9";

searchValue = "";

}

//전달된 값이 있는 경우만 검색 과정 진행!

if (searchKey != null) {

EmployeeDAO dao = new EmployeeDAO();

count = dao.count(searchKey, searchValue);

for (Employee e : dao.list(searchKey, searchValue)) {

//번호, 이름, 생일,양음력,전번,부서명,직위명,지역명

sb.append(String.format("<tr>\r\n"));

sb.append(String.format("<td>%s</td>", e.getEmployeeId()  ));

sb.append(String.format("<td>%s</td>", e.getName()));

sb.append(String.format("<td>%s</td>", e.getBirthday()));

sb.append(String.format("<td>%s</td>", e.getLunarName()));

sb.append(String.format("<td>%s</td>", e.getTelephone()));

sb.append(String.format("<td>%s</td>", e.getDepartmentName()));

sb.append(String.format("<td>%s</td>", e.getPositionName()));

sb.append(String.format("<td>%s</td>", e.getRegionName()));

sb.append(String.format("</tr>\r\n"));

}

}


%>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>직원검색(JSP버전)</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() {



});

</script>



<script type="text/javascript">


window.onload=function() {

var searchKeys = document.getElementsByName("searchKey");

for (var i=0; i<searchKeys.length; ++i) {

var searchKey = searchKeys[i];

if (searchKey.value == "<%=searchKey%>") {

searchKey.checked = true;

}

}

};


</script>


</head>

<body>

<div>

<%--메뉴 영역--%>

<div class="title">

<h1>직원관리 (JSP버전)</h1>

<c:import url="EmpMenu.jsp"></c:import>

</div>

<%--콘텐츠 영역--%>

<div class="main">

<h2>[직원검색]</h2>


<form method="post" id="myForm">

<p>

[검색기준]

<input type="radio" name="searchKey" value="9" checked="checked">전체

<input type="radio" name="searchKey" value="0">사번

<input type="radio" name="searchKey" value="1">주민번호

<input type="radio" name="searchKey" value="2">이름

<input type="radio" name="searchKey" value="3">지역

<input type="radio" name="searchKey" value="4">부서 

<input type="radio" 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>

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

</tr> --%>

<%=sb.toString() %>

</table>

</div>

</div>

</body>

</html>







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








'JSP' 카테고리의 다른 글

날짜 계산 함수  (0) 2015.06.22
10일차_직원관리_Ajax, jQuery  (0) 2015.06.22
09일차_직원관리  (1) 2015.06.22
08일차_직원관리  (0) 2015.06.22
07일차_직원관리_JSTL라이브러리 사용 준비  (1) 2015.06.22
블로그 이미지

알 수 없는 사용자

,

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

직원 관리 JSP(JDBC) 프로그램


11. 소스코드


//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" %>

<%@ page import="com.test.*" %>

<%

StringBuilder positionList = new StringBuilder();


EmployeeDAO dao = new EmployeeDAO();


for (Position p : dao.positionList()) {

//<option> 태그 동적 생성 과정 추가

//<option value="직위번호">직위명</option>

positionList.append(String.format(""));

}

%>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>직원관리(JSP버전)</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"

});

});

</script>



<script type="text/javascript">

//Javascript 버전

window.onload=function() {

//선택 목록에 체인지 이벤트 등록

document.getElementById("position").onchange=function() {

var positionId = document.getElementById("position").value;

//주의) Ajax 호출 기능이 있는 함수 호출시 

//반환값 처리를 하지 않는다.

minBasicPay(positionId);

};

};


//선택된 jid(직위번호)에 대한 최소기본급(minBasicPay)검사

//-> JSP, Servlet, Ajax 기능 추가

function minBasicPay(positionId) {

var result = "";

//Ajax 요청 및 응답 메시지 처리


//1. XMLHttpRequest 객체 생성

var xmlhttp=new XMLHttpRequest();

//2. 콜백 함수 지정 (응답 처리 액션 함수)

xmlhttp.onreadystatechange=function() {

//5. 응답 메시지 처리 (문자열)

if (xmlhttp.readyState==4 && xmlhttp.status==200) {

result = xmlhttp.responseText;

alert("Ajax 응답 도착 완료!"+result);

//주의) 이 위치에 결과 출력 과정 추가

document.getElementById("minBasicPay").innerHTML = result;


}

};

//3. 요청 주소 지정

xmlhttp.open("GET","PositionReceive.jsp?positionId="+positionId,true);

//4. Ajax 요청

xmlhttp.send();

alert("Ajax 요청 완료!");


//주의) 사용 금지

//return result;

}


</script>


</head>

<body>

<div>

<%--메뉴 영역--%>

<div class = "title">

<%--

동일한 메뉴 디자인을 여러 페이지에 적용한 경우

수정 사항이 발생하면 모든 페이지를 동일하게 수정해야 한다.

-> 동일한 메뉴 디자인을 별도의 페이지로 작성

-> 필요하는 페이지에 동적 삽입

--%>

<h1>직원관리 (JSP버전)</h1>

<c:import url="EmployeeMenu.jsp"></c:import>

</div>

<%--콘텐츠 영역--%>

<div class = "main">

<h2>[직원명단]</h2>

<form>

<%-- 직원명단 버튼은 식별자로 class 사용 --%>

<input type="button" value="직원명단" class="employeeList">

<input type="button" value="직원검색" id="employeeSearch">

</form>

<form action="EmployeeInsert.jsp" method="post">

<table id="t02">

<tr>

<th>이름</th>

<td><input type="text" id="name" name="name"></td>

</tr>

<tr>

<th>생년월일</th>

<td><input type="text" id="birthday" name="birthday">달력</td>

</tr>

<tr>

<th>양/음력</th>

<td><input type="radio">양력 <input type="radio">음력</td>

</tr>

<tr>

<th>전화번호</th>

<td><input type="text"></td>

</tr>

<tr>

<th>지역명</th>

<td><select><option>서울</option></select></td>

</tr>

<tr>

<th>부서명</th>

<td><select><option>개발부</option></select></td>

</tr>

<tr>

<th>직위명</th>

<td>

<select id="position">

<!-- 

<option>사원</option>

-->

<%=positionList.toString()%>

</select>

</td>

</tr>

<tr>

<th>기본급</th>

<td><input type="text">(최소 <span id="minBasicPay">0</span>원 이상)</td>

</tr>

<tr>

<th>수당</th>

<td><input type="text"></td>

</tr>

<tr>

<th></th>

<td><input type="submit" value="직원추가"></td>

</tr>

</table>

</form>

</div>

</div>

</body>

</html>









//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 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"));

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

}

sql += " ORDER BY employeeId";

pstmt = conn.prepareStatement(sql);

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"));

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;

}

pstmt = conn.prepareStatement(sql);

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

, ?

, ?)

*/

//문제) 입력 관련 액션 추가

return result;

}


//직위 종류 출력 메소드

public ArrayList<Position> positionList() {

ArrayList<Position> result = new ArrayList<Position>();

//SELECT positionId, positionName, minBasicPay

   // FROM position 

   // ORDER BY positionId

return result;

}

//최소 기본급 검색 메소드

public int getMinBasicPay(String jid) {

int result = 0;

//SELECT minBasicPay FROM position WHERE positionId=?

return result;

}

}








//PositionReceive.jsp

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

    pageEncoding="UTF-8"%>

<%@ page import="com.test.*" %>

<%

//데이터 수신 (positionId)


//데이터베이스 액션 -> getMinBasicPay() 메소드 호출

String result = "0";




//Ajax 응답

out.write(result);

%>








//EmployeeInsert.jsp

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

    pageEncoding="UTF-8"%>

<%@ page import="com.test.*" %>    

<%

//데이터 수신



//데이터베이스 액션 -> add() 메소드 호출



//강제 페이지 전환

response.sendRedirect("EmployeeList.jsp");

%>








//EmployeeList.jsp

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

    pageEncoding="UTF-8"%>

<%@ page import = "com.test.*" %>

<%@ taglib prefix = "c" uri ="http://java.sun.com/jsp/jstl/core" %>

<%

StringBuilder sb = new StringBuilder();

int count = 0;

EmployeeDAO dao = new EmployeeDAO();

count = dao.count();

for(Employee e : dao.list()){

//번호, 이름, 생일,양음력,전번,부서명,직위명,지역명,기본급,수당,급여,삭제

sb.append(String.format("<tr>\r\n"));

sb.append(String.format("<td>%s</td>", e.getEmployeeId()  ));

sb.append(String.format("<td>%s</td>", e.getName() ));

sb.append(String.format("<td>%s</td>", e.getBirthday() ));

sb.append(String.format("<td>%s</td>", e.getLunarName() ));

sb.append(String.format("<td>%s</td>", e.getTelephone() ));

sb.append(String.format("<td>%s</td>", e.getDepartmentName() ));

sb.append(String.format("<td>%s</td>", e.getPositionName() ));

sb.append(String.format("<td>%s</td>", e.getRegionName() ));

sb.append(String.format("<td style = \"text-align : right;\">%,d</td>", e.getBasicPay() ));

sb.append(String.format("<td style = \"text-align : right;\">%,d</td>", e.getExtraPay() ));

sb.append(String.format("<td style = \"text-align : right;\">%,d</td>", e.getPay() ));

sb.append(String.format("<td><input type = \"button\" value = \"삭제\" class = \"btnDelete\"></td>"));

sb.append(String.format("</tr>\r\n"));

}

%>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>직원관리(JSP버전)</title>


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

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


<!-- 문제) jQuery를 이용해서 버튼에 대한 화면 전환 액션 추가 -->



</head>

<body>

<div>

<%--메뉴 영역--%>

<div class = "title">

<%--

동일한 메뉴 디자인을 여러 페이지에 적용한 경우

수정 사항이 발생하면 모든 페이지를 동일하게 수정해야 한다.

-> 동일한 메뉴 디자인을 별도의 페이지로 작성

-> 필요하는 페이지에 동적 삽입

--%>

<h1>직원관리 (JSP버전)</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>

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

id ="" 식별자 사용 불가 ->반복문을 사용하기 떄문에

중복이 가능한 식별자 class =""를 사용한다.

<td><input type = "button" value = "삭제" class = "btnDelete"></td>

</tr> --%>

<%= sb.toString()%>

</table>

</div>

</div>

</body>

</html>






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




'JSP' 카테고리의 다른 글

날짜 계산 함수  (0) 2015.06.22
11일차_직원관리_로그인  (0) 2015.06.22
09일차_직원관리  (1) 2015.06.22
08일차_직원관리  (0) 2015.06.22
07일차_직원관리_JSTL라이브러리 사용 준비  (1) 2015.06.22
블로그 이미지

알 수 없는 사용자

,

09일차_직원관리

JSP 2015. 6. 22. 23:09

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

직원 관리 JSP(JDBC) 프로그램


11. 소스코드



//Region.java

package com.test;


//자료형 클래스

public class Region {

//멤버변수

//regionId, regionName, delCheck

private String regionId, regionName;

private int delCheck; //0(삭제 가능) 또는 1 이상(삭제 불가능)의 숫자

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 getDelCheck() {

return delCheck;

}

public void setDelCheck(int delCheck) {

this.delCheck = delCheck;

}


}







//RegionDAO.java

package com.test;


import java.sql.*;

import java.util.*;


//데이터베이스 액션 클래스

public class RegionDAO {


//지역 명단 출력 메소드

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 int add(Region region) {

int result = 0;

Connection conn = null;

PreparedStatement pstmt = null;

try {

conn = DBConn.getConnection();

//INSERT INTO region (regionId, regionName)

// VALUES (regionSeq.nextval, ?)

String sql = "INSERT INTO region (regionId, regionName) VALUES (regionSeq.nextval, ?)";

pstmt = conn.prepareStatement(sql);

pstmt.setString(1, region.getRegionName());

result = pstmt.executeUpdate();

}catch(Exception e){

e.printStackTrace();

}finally{

try {

if (pstmt != null) {

pstmt.close();

}

}catch(Exception e){

}

DBConn.close();

}

return result;

}

//지역 명단 삭제 메소드 -> 외부에서 지역번호를 전달 받아야 한다.

public int remove(String regionId) {

int result = 0;

Connection conn = null;

PreparedStatement pstat = null;

try {

conn = DBConn.getConnection();

String sql = "DELETE FROM region WHERE regionId = ?";

pstat = conn.prepareStatement(sql);

pstat.setString(1, regionId);

result = pstat.executeUpdate();

}catch(Exception e){

e.printStackTrace();

}finally{

try{

if(pstat!=null){

pstat.close();

}

}catch(Exception e){

}

DBConn.close();

}

return result;

}

}







//RegionInsertTest.java

package com.test;


public class RegionInsertTest {


public static void main(String[] args) {


RegionDAO dao = new RegionDAO();

Region region = new Region();

region.setRegionName("수원");

int result = dao.add(region);

System.out.printf("%d개의 행이 삽입되었습니다.", result);

}


}







//RegionList.jsp

<%@page import="com.test.*"%>

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

pageEncoding="UTF-8"%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<%

StringBuilder sb = new StringBuilder();

RegionDAO dao = new RegionDAO();


for(Region r : dao.regionList()) {

sb.append("<tr>");

sb.append(String.format("<td>%s</td>", r.getRegionId()));

sb.append(String.format("<td>%s</td>", r.getRegionName()));

sb.append(String.format("<td><input type=\"button\" value=\"삭제\" class=\"btnDelete\" %s></td>"

, r.getDelCheck()==0 ? "" : "disabled=\"disabled\""));

sb.append("</tr>");

}

%>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>직원 관리(JSP버전)</title>


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

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


<script type="text/javascript">

window.onload=function(){

document.getElementById("myForm").onsubmit=function(){

//데이터 검증 및 서브밋 액션 과정 추가

var errorMsg = document.getElementById("errorMsg");

var regionName = document.getElementById("regionName");

if(regionName.value==""){

errorMsg.innerHTML = "지역명을 입력하세요.";

return false;

}

return true;

};

var btnDeletes = document.getElementsByClassName("btnDelete");

//alert(btnDeletes.length);

for(var i=0; i<btnDeletes.length; i++){

var btnDelete = btnDeletes[i];

btnDelete.onclick=function(){

//alert("버튼클릭!");

var node = this; //<input> 객체

var pNode = node.parentNode; //<td> 객체

var ppNode = pNode.parentNode; //<tr> 객체

//alert(ppNode.nodeName); //<tr>이 나와야 성공!

var cNode = ppNode.firstChild; //<td> 객체

var text = cNode.firstChild.nodeValue; //지역번호

//삭제 여부 확인 과정 추가

if(confirm(text+"번 지역을 삭제할까요?")) { 

//취소, 확인 버튼 나오는데 확인 눌러야 진행된다.

location.href="RegionDelete.jsp?regionId="+text;

}

};

}

};

</script>


</head>

<body>

<div>

<!-- 메뉴 영역 -->

<div class="title">

<h1>직원관리 (JSP버전)</h1>

<c:import url="EmployeeMenu.jsp"></c:import>

</div>


<!-- 콘텐츠 영역 -->

<div class="main">

<h2>지역 관리</h2>

<form action="RegionInsert.jsp" method="post" id="myForm">

<!-- name="", id="" 식별자는 테이블 컬럼명 사용 -->

지역명* <input type="text" name="regionName" id="regionName"> 

<input type="submit" value="지역추가">

<span id="errorMsg" style="color:red;"></span>

</form>

<table id="t01" style="font-size:10pt;">

<!-- <tr>은 제목 -->

<tr>

<th>지역 번호</th>

<th>지역명</th>

<th>삭제</th>

</tr>

<%= sb.toString() %>

</table>

</div>

</div>

</body>

</html>






//RegionInsert.jsp

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

    pageEncoding="UTF-8"%>

<%@ page import="com.test.*" %>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%

//데이터 수신(한글 인코딩 추가)

request.setCharacterEncoding("UTF-8");

String regionName = request.getParameter("regionName");


//데이터베이스 액션 -> add() 메소드 호출로 대체

RegionDAO dao = new RegionDAO();

Region r = new Region();

r.setRegionName(regionName);

dao.add(r);


response.sendRedirect("RegionList.jsp");

%>






//RegionDelete.jsp

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

    pageEncoding="UTF-8"%>

<%@ page import="com.test.*" %>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%

//데이터 수신(한글 인코딩 추가)

request.setCharacterEncoding("UTF-8");

String regionId = request.getParameter("regionId");


//데이터베이스 액션 -> add() 메소드 호출로 대체

RegionDAO dao = new RegionDAO();

dao.remove(regionId);


response.sendRedirect("RegionList.jsp");

%>



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

문제) 부서 관리, 직위 관리 프로그램 작성





















'JSP' 카테고리의 다른 글

11일차_직원관리_로그인  (0) 2015.06.22
10일차_직원관리_Ajax, jQuery  (0) 2015.06.22
08일차_직원관리  (0) 2015.06.22
07일차_직원관리_JSTL라이브러리 사용 준비  (1) 2015.06.22
06일차_회원관리2차, 성적관리2차  (1) 2015.06.22
블로그 이미지

알 수 없는 사용자

,

08일차_직원관리

JSP 2015. 6. 22. 23:09

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

직원 관리 JSP(JDBC) 프로그램


11. 소스코드


//Region.java

package com.test;


//자료형 클래스

public class Region {

//멤버변수

//regionId, regionName, delCheck

private String regionId, regionName;

private int delCheck; //0(삭제 가능) 또는 1 이상(삭제 불가능)의 숫자

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 getDelCheck() {

return delCheck;

}

public void setDelCheck(int delCheck) {

this.delCheck = delCheck;

}


}







//RegionDAO.java

package com.test;


import java.sql.*;

import java.util.*;


//데이터베이스 액션 클래스

public class RegionDAO {


//지역 명단 출력 메소드

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;

}

//지역 명단 입력 메소드

//지역 명단 삭제 메소드

}






//RegionListTest.java

package com.test;


public class RegionListTest {


public static void main(String[] args) {

// TODO Auto-generated method stub

RegionDAO dao = new RegionDAO();

for (Region r : dao.regionList()) {

System.out.printf("%s %s %s %n"

, r.getRegionId()

, r.getRegionName()

, r.getDelCheck());

}


}


}






//RegionList.jsp

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

    pageEncoding="UTF-8"%>

<%@ page import="com.test.*" %>

<%@ taglib prefix = "c" uri ="http://java.sun.com/jsp/jstl/core" %>

<%

StringBuilder sb = new StringBuilder();


RegionDAO dao = new RegionDAO();

for (Region r : dao.regionList()) {

sb.append(String.format("<tr>"));

sb.append(String.format("<td>%s</td>", r.getRegionId()));

sb.append(String.format("<td>%s</td>", r.getRegionName()));

sb.append(String.format("<td><input type=\"button\" value=\"삭제\" class=\"btnDelete\"  %s></td>", (r.getDelCheck()>0)?"disabled=\"disabled\"":""  ));

sb.append(String.format("</tr>"));

}


%>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>직원관리(JSP버전)</title>

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

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

</head>

<body>

<div>

<%--메뉴 영역--%>

<div class = "title">

<h1>직원관리 (JSP버전)</h1>

<c:import url="EmployeeMenu.jsp"></c:import>

</div>

<%--콘텐츠 영역--%>

<div class = "main">

<h2>[지역관리]</h2>

<form action="RegionInsert.jsp" method="post" id="myForm">

지역명* <input type = "text" id="regionName"  name="regionName"> 

<input type = "submit" value = "지역추가">

<span id="msg"></span>

</form>

<table id ="t01" style = "font-size:10pt;">

<tr>

<th>지역번호</th><th>지역명</th><th>삭제</th>

</tr>

<!-- 

<tr>

<td>1</td>

<td>서울</td>

<td><input type = "button" value = "삭제" class = "btnDelete" disabled="disabled"></td>

</tr>

<tr>

<td>2</td>

<td>경기</td>

<td><input type = "button" value = "삭제" class="btnDelete" ></td>

</tr>

-->

<%=sb.toString()%>

</table>

</div>

</div>

</body>

</html>




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

문제) 부서관리, 직위관리 프로그램 출력 액션 작성



//Position.java -> 직위 정보 자료형 클래스

//Department.java -> 부서 정보 자료형 클래스


//PositionDAO.java -> JDBC 액션 클래스. 직위 정보 입출력 액션.

//DepartmentDAO.java -> JDBC 액션 클래스. 부서 정보 입출력 액션.


//PositionList.jsp -> 직위 정보 출력 페이지. 입력 폼 페이지. 삭제 버튼.

//DepartmentList.jsp -> 부서 정보 출력 페이지. 입력 폼 페이지. 삭제 버튼.



//Position.java -> 직위 정보 자료형 클래스

package com.test;


//자료형 클래스

public class Position {


//SELECT positionId, positionName, minBasicPay, delCheck FROM positionView ORDER BY positionId;

private String positionId,positionName;

private int delCheck,minBasicPay;

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 int getMinBasicPay() {

return minBasicPay;

}

public void setMinBasicPay(int minBasicPay) {

this.minBasicPay = minBasicPay;

}

public int getDelCheck() {

return delCheck;

}

public void setDelCheck(int delCheck) {

this.delCheck = delCheck;

}

}






//Department.java -> 부서 정보 자료형 클래스

package com.test;


//자료형 클래스

public class Department {

//departmentId, departmentName, delCheck

private String departmentId, departmentName;

private int delCheck;

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 int getDelCheck() {

return delCheck;

}

public void setDelCheck(int delCheck) {

this.delCheck = delCheck;

}


}






//PositionDAO.java -> JDBC 액션 클래스. 직위 정보 입출력 액션.

package com.test;


import java.sql.*;

import java.util.*;


public class PositionDAO {

public ArrayList<Position> positionList(){

ArrayList<Position> result = new ArrayList<Position>();


Connection conn = null;

PreparedStatement pstmt =null;

try{

conn = DBConn.getConnection();


//SELECT positionId, positionName, minBasicPay, delCheck FROM positionView ORDER BY positionId;

String sql = String.format("SELECT positionId, positionName, minBasicPay, delCheck FROM positionView 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"));

p.setDelCheck(rs.getInt("delCheck"));

result.add(p); //컬렉션으로!

}

rs.close();

}catch(Exception e){

e.printStackTrace();

}finally{

try{

if(pstmt!=null){

pstmt.close();

}

}catch(Exception e){


}

DBConn.close();

}


return result;


}


}








//DepartmentDAO.java -> JDBC 액션 클래스. 부서 정보 입출력 액션.

package com.test;


import java.sql.*;

import java.util.*;


public class DepartmentDAO {


public ArrayList<Department> departmentList(){

ArrayList<Department> result = new ArrayList<Department>();


Connection conn = null;

PreparedStatement pstmt =null;

try{

conn = DBConn.getConnection();


//SELECT departmentId, departmentName, delCheck FROM departmentView ORDER BY departmentId;

String sql = String.format("SELECT departmentId, departmentName, delCheck FROM departmentView ORDER BY departmentId");

pstmt = conn.prepareStatement(sql);

ResultSet rs = pstmt.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(pstmt!=null){

pstmt.close();

}

}catch(Exception e){


}

DBConn.close();

}


return result;


}


}







//PositionList.jsp -> 직위 정보 출력 페이지. 입력 폼 페이지. 삭제 버튼.

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

    pageEncoding="UTF-8"%>

<%@ page import="com.test.*" %>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%

StringBuilder sb = new StringBuilder();


PositionDAO dao = new PositionDAO();

for(Position p: dao.positionList()){

sb.append(String.format("<tr>"));

    sb.append(String.format("<td>%s</td>",p.getPositionId()));

    sb.append(String.format("<td>%s</td>",p.getPositionName()));

    sb.append(String.format("<td >%,d</td>",p.getMinBasicPay()));

    sb.append(String.format("<td><input type=\"button\" value=\"삭제\" class=\"btnDelete\" %s></td>",(p.getDelCheck()>0)?"disabled=\"disabled\"":""));

    sb.append(String.format("</tr>"));

}

%>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>직원 관리(JSP버전)</title>



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

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


</head>

<body>

<div>

<!-- 메뉴 영역 --> 

<div class="title">

<%--

동일한 메뉴 디자인을 여러 페이지에 적용한 경우

수정 사항일 발생하면 모든 페이지를 동일하게 수정해야 한다.

->동일한 메뉴 디자인을 별도의 페이지로 작성

->필요하는 페이지에 동적 삽입

--%>

<h1>직원관리 (JSP버전)</h1>

<c:import url="EmployeeMenu.jsp"></c:import> <!-- 동적생성 -->


</div>


<!-- 콘텐츠 영역 -->

<div class="main">

<h2>-직위 관리-</h2>

<form action="PositionInsert.jsp" method="post" id="myForm">

직위명* <input type="text" name="positionName" id="positionName">

최소기본급* <input type="text" name="basicPay" id="basicPay">

<input type="submit" value="직위 추가">

</form>

<table id="t01" style="font-size : small;">

<!-- <tr>은 제목 -->

<tr>

<th>직위 번호</th>

<th>직위명</th>

<th>최소기본급</th>

<th>삭제</th>

</tr>

<!-- 샘플 디자인(가상으로 만든다) -->

<!-- 

<tr>

<td>1</td>

<td>사원</td>

<td>1000000</td>

id=""식별자 사용 불가, class=""식별자 사용:동일한 이름을 사용 하기 위해!

<td><input type="button" value="삭제" class="btnDelete" disabled="disabled"></td>

</tr>

<tr>

<td>2</td>

<td>대리</td>

<td>2000000</td>

id=""식별자 사용 불가, class=""식별자 사용:동일한 이름을 사용 하기 위해!

<td><input type="button" value="삭제" class="btnDelete" ></td>

</tr>

<tr>

<td>3</td>

<td>부장</td>

<td>2000000</td>

id=""식별자 사용 불가, class=""식별자 사용:동일한 이름을 사용 하기 위해!

<td><input type="button" value="삭제" class="btnDelete" ></td>

</tr>

-->

<%=sb.toString() %>

</table>

</div>

</div>


</body>

</html>






//DepartmentList.jsp -> 부서 정보 출력 페이지. 입력 폼 페이지. 삭제 버튼.

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

    pageEncoding="UTF-8"%>

<%@ page import="com.test.*" %>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%

StringBuilder sb = new StringBuilder();


DepartmentDAO dao = new DepartmentDAO();

for(Department d : dao.departmentList()){

sb.append(String.format("<tr>"));

sb.append(String.format("<td>%s</td>",d.getDepartmentId()));

sb.append(String.format("<td>%s</td>",d.getDepartmentName()));

sb.append(String.format("<td><input type=\"button\" value=\"삭제\" class=\"btnDelete\" %s></td>",(d.getDelCheck()>0)?"disabled=\"disabled\"":""));

sb.append(String.format("</tr>"));

}

%>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>직원 관리(JSP버전)</title>


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

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


</head>

<body>

<div>

<!-- 메뉴 영역 --> 

<div class="title">

<%--

동일한 메뉴 디자인을 여러 페이지에 적용한 경우

수정 사항일 발생하면 모든 페이지를 동일하게 수정해야 한다.

->동일한 메뉴 디자인을 별도의 페이지로 작성

->필요하는 페이지에 동적 삽입

--%>

 

<h1>직원관리 (JSP버전)</h1>

<c:import url="EmployeeMenu.jsp"></c:import> <!-- 동적생성 -->


</div>


<!-- 콘텐츠 영역 -->

<div class="main">

<h2>-부서 관리-</h2>

<form action="DepartmentInsert.jsp" method="post" id="myForm">

부서명* <input type="text" name="departmentName" id="departmentName">

<input type="submit" value="부서추가">

</form>

<table id="t01" style="font-size : small;">

<!-- <tr>은 제목 -->

<tr>

<th>부서 번호</th>

<th>부서명</th>

<th>삭제</th>

</tr>

<!-- 샘플 디자인(가상으로 만든다) -->

<!-- 

<tr>

<td>1</td>

<td>개발부</td>

id=""식별자 사용 불가, class=""식별자 사용:동일한 이름을 사용 하기 위해!

<td><input type="button" value="삭제" class="btnDelete" disabled="disabled"></td>

</tr>

<tr>

<td>2</td>

<td>마케팅부</td>

id=""식별자 사용 불가, class=""식별자 사용:동일한 이름을 사용 하기 위해!

<td><input type="button" value="삭제" class="btnDelete" ></td>

</tr>

<tr>

<td>3</td>

<td>영업부</td>

id=""식별자 사용 불가, class=""식별자 사용:동일한 이름을 사용 하기 위해!

<td><input type="button" value="삭제" class="btnDelete" ></td>

</tr>

-->

<%=sb.toString() %>

</table>

</div>

</div>


</body>

</html>





//Employee.java

package com.test;


public class Employee {


private String employeeId

, name

, birthday

, lunarName 

, telephone

, departmentId

, departmentName

, positionId

, positionName

, regionId

, regionName;

private int lunar; // 0(양력) 또는 1(음력)

private int basicPay, extraPay, pay;

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 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"));

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

}

sql += " ORDER BY employeeId";

pstmt = conn.prepareStatement(sql);

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"));

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;

}

pstmt = conn.prepareStatement(sql);

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;

}

}







//EmployeeList.jsp

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

    pageEncoding="UTF-8"%>

<%@ page import = "com.test.*" %>

<%@ taglib prefix = "c" uri ="http://java.sun.com/jsp/jstl/core" %>

<%

StringBuilder sb = new StringBuilder();

int count = 0;

EmployeeDAO dao = new EmployeeDAO();

count = dao.count();

for(Employee e : dao.list()){

//번호, 이름, 생일,양음력,전번,부서명,직위명,지역명,기본급,수당,급여,삭제

sb.append(String.format("<tr>\r\n"));

sb.append(String.format("<td>%s</td>", e.getEmployeeId()  ));

sb.append(String.format("<td>%s</td>", e.getName() ));

sb.append(String.format("<td>%s</td>", e.getBirthday() ));

sb.append(String.format("<td>%s</td>", e.getLunarName() ));

sb.append(String.format("<td>%s</td>", e.getTelephone() ));

sb.append(String.format("<td>%s</td>", e.getDepartmentName() ));

sb.append(String.format("<td>%s</td>", e.getPositionName() ));

sb.append(String.format("<td>%s</td>", e.getRegionName() ));

sb.append(String.format("<td style = \"text-align : right;\">%,d</td>", e.getBasicPay() ));

sb.append(String.format("<td style = \"text-align : right;\">%,d</td>", e.getExtraPay() ));

sb.append(String.format("<td style = \"text-align : right;\">%,d</td>", e.getPay() ));

sb.append(String.format("<td><input type = \"button\" value = \"삭제\" class = \"btnDelete\"></td>"));

sb.append(String.format("</tr>\r\n"));

}

%>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>직원관리(JSP버전)</title>


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

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


</head>

<body>

<div>

<%--메뉴 영역--%>

<div class = "title">

<%--

동일한 메뉴 디자인을 여러 페이지에 적용한 경우

수정 사항이 발생하면 모든 페이지를 동일하게 수정해야 한다.

-> 동일한 메뉴 디자인을 별도의 페이지로 작성

-> 필요하는 페이지에 동적 삽입

--%>

<h1>직원관리 (JSP버전)</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>

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

id ="" 식별자 사용 불가 ->반복문을 사용하기 떄문에

중복이 가능한 식별자 class =""를 사용한다.

<td><input type = "button" value = "삭제" class = "btnDelete"></td>

</tr> --%>

<%= sb.toString()%>

</table>

</div>

</div>

</body>

</html>







//EmployeeSearch.java

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

pageEncoding="UTF-8"%>

<%@ page import="com.test.*"%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<%

request.setCharacterEncoding("UTF-8");

StringBuilder sb = new StringBuilder();

int count = 0;

//사용자가 선택한 키와 값을 전달 받아서 검색 과정을 진행

//-> 최초 실행시 키와 값이 전달되지 않습니다.

String searchKey = request.getParameter("searchKey");

String searchValue = request.getParameter("searchValue");

//전달된 값이 있는 경우만 검색 과정 진행!

if (searchKey != null) {

EmployeeDAO dao = new EmployeeDAO();

count = dao.count(searchKey, searchValue);

for (Employee e : dao.list(searchKey, searchValue)) {

//번호, 이름, 생일,양음력,전번,부서명,직위명,지역명,기본급,수당,급여,삭제

sb.append(String.format("<tr>\r\n"));

sb.append(String.format("<td>%s</td>", e.getEmployeeId()  ));

sb.append(String.format("<td>%s</td>", e.getName()));

sb.append(String.format("<td>%s</td>", e.getBirthday()));

sb.append(String.format("<td>%s</td>", e.getLunarName()));

sb.append(String.format("<td>%s</td>", e.getTelephone()));

sb.append(String.format("<td>%s</td>", e.getDepartmentName()));

sb.append(String.format("<td>%s</td>", e.getPositionName()));

sb.append(String.format("<td>%s</td>", e.getRegionName()));

sb.append(String.format("<td style = \"text-align : right;\">%,d</td>", e.getBasicPay() ));

sb.append(String.format("<td style = \"text-align : right;\">%,d</td>", e.getExtraPay() ));

sb.append(String.format("<td style = \"text-align : right;\">%,d</td>", e.getPay() ));

sb.append(String.format("<td><input type = \"button\" value = \"삭제\" class = \"btnDelete\"></td>"));

sb.append(String.format("</tr>\r\n"));

}

}

if (searchValue == null) {

searchValue = "";

}

%>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>직원검색(JSP버전)</title>

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

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


<script type="text/javascript">


window.onload=function() {

var searchKeys = document.getElementsByName("searchKey");

for (var i=0; i<searchKeys.length; ++i) {

var searchKey = searchKeys[i];

if (searchKey.value == "<%=searchKey%>") {

searchKey.checked = true;

}

}

};


</script>


</head>

<body>

<div>

<%--메뉴 영역--%>

<div class="title">

<h1>직원관리 (JSP버전)</h1>

<c:import url="EmployeeMenu.jsp"></c:import>

</div>

<%--콘텐츠 영역--%>

<div class="main">

<h2>[직원검색]</h2>

<form id="t01">

<input type="button" value="직원명단" id="btnList" name="btnList" onclick = "location.href = 'EmployeeList.jsp'">

<input type="button" value="직원추가" id="btnAdd" name="btnAdd">

</form>

<form method="post" id="myForm">

<p>

[검색기준]

<input type="radio" name="searchKey" value="0" checked="checked">사번

<input type="radio" name="searchKey" value="1">주민번호

<input type="radio" name="searchKey" value="2">이름

<input type="radio" name="searchKey" value="3">지역

<input type="radio" name="searchKey" value="4">부서 

<input type="radio" 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>

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

id ="" 식별자 사용 불가 ->반복문을 사용하기 떄문에

중복이 가능한 식별자 class =""를 사용한다.

<td><input type="button" value="삭제" class="btnDelete"></td>

</tr> --%>

<%=sb.toString() %>

</table>

</div>

</div>

</body>

</html>



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










'JSP' 카테고리의 다른 글

10일차_직원관리_Ajax, jQuery  (0) 2015.06.22
09일차_직원관리  (1) 2015.06.22
07일차_직원관리_JSTL라이브러리 사용 준비  (1) 2015.06.22
06일차_회원관리2차, 성적관리2차  (1) 2015.06.22
05일차_성적관리1차  (1) 2015.06.22
블로그 이미지

알 수 없는 사용자

,

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

직원 관리 JSP(JDBC) 프로그램


1. 직원 정보 출력, 입력, 삭제 기능 구현

- 직원 정보에 대한 입력, 출력, 검색, 삭제 기능 구현

- 직원 정보는 employee 테이블에 저장된다.

- 지역 정보는 region 테이블에 저장된다.

- 부서 정보는 department 테이블에 저장된다.

- 직위 정보는 position 테이블에 저장된다.

- 직원 정보 입력 항목은 직원 번호, 이름, 주민번호(암호화 기능), 생년월일(jQuery 달력 기능), 양음력, 전화번호, 부서아이디, 직위아이디, 지역아이디, 기본급, 수당으로 구성

- 직원 정보 입력시 기본급은 직위별 최소 기본급 이상 입력되도록 한다(Ajax 기능 이용).

- 직원 정보 출력 항목은 직원 번호, 이름, 생년월일, 양음력, 전화번호, 부서명, 직위명, 지역명, 기본급, 수당, 급여로 구성

- 직원 정보 출력시 항목별 정렬 기능 구현

- 직원 정보 검색은 사번, 주민번호, 이름, 부서, 지역, 직위 등의 항목을 기준으로 검색 결과를 출력하도록 구현

- 직원 삭제는 사번(PK)을 기준으로 삭제할 수 있도록 구현



2. 직원 정보

- 직원 번호, 이름, 주민번호, 생년월일, 양음력, 전화번호, 부서, 직위, 지역, 기본급, 수당, 급여(기본급+수당)

- 부서 : 개발부, 마케팅부, 영업부

- 직위 : 사원, 대리, 과장, 부장

- 지역 : 서울, 경기, 인천, ...

- 기본급 : 직위별 최소 기본급 이상


3. 부서 정보 출력, 입력, 삭제 기능 구현

- 부서번호, 부서이름, 삭제가능여부


4. 직위 정보 출력, 입력, 삭제 기능 구현

- 직위번호, 직위이름, 최소기본급, 삭제가능여부


5. 지역 정보 출력, 입력, 삭제 기능 구현

- 지역번호, 지역이름, 삭제가능여부


6. 관리자, 일반 직원 로그인 과정 추가

- 관리자 로그인한 경우는 모든 기능 사용 가능.

- 일반 직원 로그인한 경우는 일부 기능 사용 가능. 직원 정보 일부 출력 기능으로 한정. 직원 정보 일부 출력 항목은 직원 번호, 이름, 생년월일, 양음력, 전화번호, 부서명, 직위명, 지역명로 구성. 검색 기능 추가. 사번, 이름, 부서, 지역, 직위 등의 항목을 기준으로 검색 결과를 출력하도록 구현



7. 데이터베이스 구성 (employee, region, position, department)


--지역 정보 테이블

CREATE TABLE region (

regionId NUMBER --PK

, regionName NVARCHAR2(30)

);


ALTER TABLE region

ADD CONSTRAINT region_id_pk 

PRIMARY KEY(regionId);


CREATE SEQUENCE regionSeq;


INSERT INTO region (regionId, regionName)

VALUES (regionSeq.nextval, '서울');

INSERT INTO region (regionId, regionName)

VALUES (regionSeq.nextval, '경기');

INSERT INTO region (regionId, regionName)

VALUES (regionSeq.nextval, '인천');

COMMIT;



--직위 정보 테이블

CREATE TABLE position (

positionId NUMBER --PK

, positionName NVARCHAR2(30)

, minBasicPay NUMBER

);


ALTER TABLE position

ADD CONSTRAINT position_id_pk 

PRIMARY KEY(positionId);


CREATE SEQUENCE positionSeq;


INSERT INTO position (positionId, positionName, minBasicPay)

VALUES (positionSeq.nextval, '사원', 1000000);

INSERT INTO position (positionId, positionName, minBasicPay)

VALUES (positionSeq.nextval, '대리', 2000000);

INSERT INTO position (positionId, positionName, minBasicPay)

VALUES (positionSeq.nextval, '부장', 3000000);

COMMIT;



--부서 정보 테이블

CREATE TABLE department (

departmentId NUMBER --PK

, departmentName NVARCHAR2(30)

);


ALTER TABLE department

ADD CONSTRAINT department_id_pk 

PRIMARY KEY(departmentId);


CREATE SEQUENCE departmentSeq;


INSERT INTO department (departmentId, departmentName)

VALUES (departmentSeq.nextval, '개발부');

INSERT INTO department (departmentId, departmentName)

VALUES (departmentSeq.nextval, '마케팅부');

INSERT INTO department (departmentId, departmentName)

VALUES (departmentSeq.nextval, '영업부');

COMMIT;



--직원 정보 테이블

--직원 번호, 이름, 주민번호, 생년월일, 양음력, 전화번호, 부서, 직위, 지역, 기본급, 수당

CREATE TABLE employee (

employeeId NUMBER --PK

,name NVARCHAR2(10)

,ssn VARCHAR2(30) --오라클 암호화 기능 추가

,birthday DATE

,lunar NUMBER(1)  --양력 0, 음력 1 

,telephone VARCHAR2(30)

,departmentId NUMBER --FK

,positionId NUMBER --FK

,regionId NUMBER --FK

,basicPay NUMBER

,extraPay NUMBER

);


ALTER TABLE employee

ADD CONSTRAINT EMPLOYEE_ID_PK

PRIMARY KEY(employeeId);

ALTER TABLE employee

ADD CONSTRAINT employee_departmentId_fk

FOREIGN KEY (departmentId)

REFERENCES department(departmentId);

ALTER TABLE employee

ADD CONSTRAINT employee_positionId_fk

FOREIGN KEY (positionId)

REFERENCES position(positionId);

ALTER TABLE employee

ADD CONSTRAINT employee_regionId_fk

FOREIGN KEY (regionId)

REFERENCES region(regionId);

ALTER TABLE employee

ADD CONSTRAINT employee_lunar_ck

CHECK (lunar=0 OR lunar=1);



CREATE SEQUENCE employeeSeq;


INSERT INTO employee (employeeId

,name

,ssn

,birthday

,lunar

,telephone

,departmentId

,positionId

,regionId

,basicPay

,extraPay)

VALUES (employeeSeq.nextval

, '홍길동'

, encrypt('8012121122345', '홍길동')

, '1980-12-12'

, 0   --양력 0, 음력 1 

, '010-123-1234'

, 1  --departmentId FK

, 1  --positionId FK

, 1  --regionId FK

, 1500000

, 1000000);

COMMIT;



--직원 정보 출력 쿼리 (JOIN, SubQuery)

직원 번호, 이름, 생년월일, 양음력, 전화번호, 부서명, 직위명, 지역명, 기본급, 수당, 급여(기본급+수당)


SELECT employeeId

, name

, ssn

, TO_CHAR(birthday, 'yyyy-mm-dd') AS birthday

, lunar 

, DECODE(lunar, 0, '양력', '음력') AS lunarName 

, telephone

, departmentId

, (SELECT departmentName FROM department

WHERE departmentId=e.departmentId ) 

AS departmentName

, positionId

, (SELECT positionName FROM position

WHERE positionId=e.positionId ) 

AS positionName

, regionId

, (SELECT regionName FROM region

WHERE regionId=e.regionId ) 

AS regionName

, basicPay

, extraPay

, (basicPay + extraPay) AS pay

FROM employee e

ORDER BY employeeId;




--문제) 직원 정보 출력 쿼리 (JOIN, Join)

직원 번호, 이름, 생년월일, 양음력, 전화번호, 부서번호, 부서명, 직위번호, 직위명, 지역번호, 지역명, 기본급, 수당, 급여(기본급+수당)










--> 뷰 생성

CREATE OR REPLACE VIEW employeeView

AS

SELECT employeeId

, name

, ssn

, TO_CHAR(birthday, 'yyyy-mm-dd') AS birthday

, lunar 

, DECODE(lunar, 0, '양력', '음력') AS lunarName 

, telephone

, departmentId

, (SELECT departmentName FROM department

WHERE departmentId=e.departmentId ) 

AS departmentName

, positionId

, (SELECT positionName FROM position

WHERE positionId=e.positionId ) 

AS positionName

, regionId

, (SELECT regionName FROM region

WHERE regionId=e.regionId ) 

AS regionName

, basicPay

, extraPay

, (basicPay + extraPay) AS pay

FROM employee e;

-->뷰를 이용해서 SELECT 쿼리 실행

SELECT employeeId

, name

, birthday

, lunar 

, lunarName 

, telephone

, departmentId

, departmentName

, positionId

, positionName

, regionId

, regionName

, basicPay

, extraPay

, pay

FROM employeeView

ORDER BY employeeId;



--직원 정보 검색 쿼리

SELECT employeeId

, name

, birthday

, lunar 

, lunarName 

, telephone

, departmentId

, departmentName

, positionId

, positionName

, regionId

, regionName

, basicPay

, extraPay

, pay

FROM employeeView e

  --WHERE ssn=encrypt('8012121122345',e.name)

--WHERE employeeId=1

--WHERE name='홍길동'

--WHERE regionName='서울'

--WHERE departmentName='개발부'

WHERE positionName='사원'

ORDER BY employeeId;





--지역 정보 출력

SELECT regionId, regionName 

  , (SELECT COUNT(*) FROM employee

      WHERE regionId=r.regionId) AS delCheck

FROM region r

ORDER BY regionId;

-->뷰 생성

CREATE OR REPLACE VIEW regionView

AS

SELECT regionId, regionName 

  , (SELECT COUNT(*) FROM employee

      WHERE regionId=r.regionId) AS delCheck

FROM region r;

-->뷰를 이용한 SELECT 쿼리

SELECT regionId, regionName, delCheck 

FROM regionView

ORDER BY regionId;






--부서 정보 출력

SELECT departmentId, departmentName 

  , (SELECT COUNT(*) FROM employee

      WHERE departmentId=r.departmentId) AS delCheck

FROM department r

ORDER BY departmentId;

-->뷰 생성

CREATE OR REPLACE VIEW departmentView

AS

SELECT departmentId, departmentName 

  , (SELECT COUNT(*) FROM employee

      WHERE departmentId=r.departmentId) AS delCheck

FROM department r;

-->뷰를 이용한 SELECT 쿼리

SELECT departmentId, departmentName, delCheck 

FROM departmentView

ORDER BY departmentId;





--직위 정보 출력

SELECT positionId, positionName, minBasicPay

  , (SELECT COUNT(*) FROM employee

      WHERE positionId=r.positionId) AS delCheck

FROM position r

ORDER BY positionId;

-->뷰 생성

CREATE OR REPLACE VIEW positionView

AS

SELECT positionId, positionName, minBasicPay 

  , (SELECT COUNT(*) FROM employee

      WHERE positionId=r.positionId) AS delCheck

FROM position r;

-->뷰를 이용한 SELECT 쿼리

SELECT positionId, positionName, minBasicPay, delCheck 

FROM positionView

ORDER BY positionId;



--최소기본급 검색 쿼리

SELECT minBasicPay

FROM positionView

WHERE positionId=1;




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

--관리자 기능 부여를 위해서 grade 컬럼 추가

--관리자 0, 일반 1


INSERT INTO employee (employeeId

,name

,ssn

,birthday

,lunar

,telephone

,departmentId

,positionId

,regionId

,basicPay

,extraPay)

VALUES (employeeSeq.nextval

, '박길동'

, encrypt('80121211432134', '박길동')

, '1985-01-12'

, 0   --양력 0, 음력 1 

, '010-456-4567'

, 1  --departmentId FK

, 2  --positionId FK

, 2  --regionId FK

, 2500000

, 2000000);

COMMIT;



--관리자 -> '8012121122345', '홍길동'

--일반직원 -> '80121211432134', '박길동'




ALTER TABLE employee

ADD (grade NUMBER(1) DEFAULT 1);


UPDATE employee SET grade=0

WHERE employeeId=1;

COMMIT;



CREATE OR REPLACE VIEW employeeView

AS

SELECT employeeId

, name

, ssn

, TO_CHAR(birthday, 'yyyy-mm-dd') AS birthday

, lunar 

, DECODE(lunar, 0, '양력', '음력') AS lunarName 

, telephone

, departmentId

, (SELECT departmentName FROM department

WHERE departmentId=e.departmentId ) 

AS departmentName

, positionId

, (SELECT positionName FROM position

WHERE positionId=e.positionId ) 

AS positionName

, regionId

, (SELECT regionName FROM region

WHERE regionId=e.regionId ) 

AS regionName

, basicPay

, extraPay

, (basicPay + extraPay) AS pay

, grade

FROM employee e;

-->뷰를 이용해서 SELECT 쿼리 실행

SELECT employeeId

, name

, birthday

, lunar 

, lunarName 

, telephone

, departmentId

, departmentName

, positionId

, positionName

, regionId

, regionName

, basicPay

, extraPay

, pay

, grade

FROM employeeView

ORDER BY employeeId;



--관리자 아이디(이름), 패스워드(주민번호) 검사 쿼리

SELECT COUNT(*) AS count

FROM employeeView

WHERE name='아이디' 

AND ssn=encrypt('패스워드', '아이디') 

AND grade=0;



--일반직원 아이디(이름), 패스워드(주민번호) 검사 쿼리

SELECT COUNT(*) AS count

FROM employeeView

WHERE name='아이디' 

AND ssn=encrypt('패스워드', '아이디');




8. 화면 구성

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

[직원관리] [지역관리] [부서관리] [직위관리]

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

-직원관리-


[직원추가] [직원검색]


직원수 : 1 명


직원 번호, 이름, 생년월일, 양음력, 전화번호, 부서명, 직위명, 지역명, 기본급, 수당, 급여, 삭제

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

1, 홍길동, 1980-12-12, 양력, 010-123-1234, 개발부, 사원, 서울, 1,500,000, 1,000,000, 2,500,000, [삭제]






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

[직원관리] [지역관리] [부서관리] [직위관리]

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

-직원관리-


[직원명단][직원검색]


이름* [박길동]

주민등록번호(YYMMDD-NNNNNNN)* [800110-1234567]

생년월일* [2010-10-10] <-달력 호출

양음력* o 양력 o 음력

전화번호(010-XXXX-XXXX)* [010-345-6789]

지역* [서울] <-선택 목록

부서* [개발부] <-선택 목록

직위* [사원] <- 선택 목록

기본급(최소 2000000원 이상)* [2000000] <-Ajax

수당* [100000]


[직원추가]





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

[직원관리] [지역관리] [부서관리] [직위관리]

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

-직원관리-


[직원명단][직원추가]


검색기준  o사번 o주민번호 o이름 o지역 o부서 o직위

검색단어 [       ] [직원검색]


검색 직원수 : 1 명


직원 번호, 이름, 생년월일, 양음력, 전화번호, 부서명, 직위명, 지역명, 기본급, 수당, 급여, 삭제

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

1, 홍길동, 1980-12-12, 양력, 010-123-1234, 개발부, 사원, 서울, 1,500,000, 1,000,000, 2,500,000, [삭제]






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

[직원관리] [지역관리] [부서관리] [직위관리]

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

-지역관리-


지역명 [       ] [지역추가]


지역번호, 지역명, 삭제

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

1, 서울, [삭제] <-비활성

2, 경기, [삭제]

3, 인천, [삭제]





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

[직원관리] [지역관리] [부서관리] [직위관리]

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

-부서관리-


부서명 [       ] [부서추가]


부서번호, 부서명, 삭제

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

1, 개발부, [삭제] <-비활성

2, 마케팅부, [삭제]

3, 영업부, [삭제]






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

[직원관리] [지역관리] [부서관리] [직위관리]

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

-직위관리-


직위명 [       ] 최소기본급 [        ] [직위추가]


직위번호, 직위명, 최소기본급, 삭제

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

1, 사원, 1,000,000, [삭제] <-비활성

2, 대리, 2,000,000, [삭제]

3, 부장, 3,000,000, [삭제]




로그인 화면 추가

아이디 [     ]

패스워드 [      ]

[로그인]







9. 프로그램 구성

//DBConn.java


//Employee.java -> 직원 정보 자료형 클래스

//Region.java -> 지역 정보 자료형 클래스

//Position.java -> 직위 정보 자료형 클래스

//Department.java -> 부서 정보 자료형 클래스


//EmployeeDAO.java -> JDBC 액션 클래스. 직원 정보 입출력 액션.

//RegionDAO.java -> JDBC 액션 클래스. 지역 정보 입출력 액션.

//PositionDAO.java -> JDBC 액션 클래스. 직위 정보 입출력 액션.

//DepartmentDAO.java -> JDBC 액션 클래스. 부서 정보 입출력 액션.


//EmployeeMenu.jsp -> 메인 메뉴 페이지. 로그아웃 버튼.


//EmployeeList.jsp -> 직원 정보 출력 페이지. 삭제 버튼.

//EmployeeSearch.jsp -> 직원 정보 검색 페이지

//EmployeeInsertForm.jsp -> 직원 정보 입력 폼 페이지. Ajax(XML), jQuery 기능 포함.

//EmployeeInsert.jsp -> 직원 정보 입력 액션 페이지. sendRedirect().

//EmployeeDelete.jsp -> 직원 정보 삭제 액션 페이지. sendRedirect().


//RegionList.jsp -> 지역 정보 출력 페이지. 입력 폼 페이지. 삭제 버튼.

//RegionInsert.jsp -> 지역 정보 입력 액션 페이지. sendRedirect().

//RegionDelete.jsp -> 지역 정보 삭제 액션 페이지. sendRedirect().


//PositionList.jsp -> 직위 정보 출력 페이지. 입력 폼 페이지. 삭제 버튼.

//PositionInsert.jsp -> 직위 정보 입력 액션 페이지. sendRedirect().

//PositionDelete.jsp -> 직위 정보 삭제 액션 페이지. sendRedirect().


//DepartmentList.jsp -> 부서 정보 출력 페이지. 입력 폼 페이지. 삭제 버튼.

//DepartmentInsert.jsp -> 부서 정보 입력 액션 페이지. sendRedirect().

//DepartmentDelete.jsp -> 부서 정보 삭제 액션 페이지. sendRedirect().


//Ajax.jsp -> Ajax 응답 액션 페이지.


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


//LoginForm.jsp -> 관리자, 일반 직원 로그인 폼 페이지. 아이디(name), 패스워드(ssn) 입력.

//Login.jsp -> 로그인 액션 페이지. 아이디, 패스워드 검사 진행. sendRedirect().

//Logout.jsp -> 로그아웃 액션 페이지. sendRedirect().

//LogoutForm.jsp -> 로그아웃 메시지 출력 페이지.

//LoginFail.jsp



//EmpList.jsp -> 일반 직원 전용 출력 페이지. 로그아웃 버튼. 입력, 삭제 기능 없음.


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


10. JSTL 라이브러리 사용 준비

https://jstl.java.net 사이트에서 아래 파일 다운로드 및 lib 폴더에 복사할 것.

- javax.servlet.jsp.jstl-1.2.1.jar

- javax.servlet.jsp.jstl-api-1.2.1.jar


-> JSTL 라이브러리가 포함된 샘플 프로젝트를 새로 만들 것.

-> 아래 템플릿을 HTML5 기준 JSP 테플릿에 추가 등록할 것.

<%@ page language="java" contentType="text/html; charset=${encoding}"

    pageEncoding="${encoding}"%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>    

<!DOCTYPE html>

<html>

<head>

<meta charset="${encoding}">

<title>Insert title here</title>

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


</head>

<body>

<div>


</div>

</body>

</html>




11. 소스코드 (화면 구성)


//EmployeeMenu.jsp

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

    pageEncoding="UTF-8"%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<p> 

[<a href="EmployeeList.jsp">직원관리</a>]

[<a href="RegionList.jsp">지역관리</a>]

[<a href="DepartmentList.jsp">부서관리</a>]

[<a href="PositionList.jsp">직위관리</a>]

<!-- 로그인, 로그아웃 관련 메뉴 추가 예정 -->

</p>






//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" %>    

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>직원관리(JSP버전)</title>


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

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


</head>

<body>

<div>

<!-- 메뉴 영역 -->

<div class="title">

<%-- 

동일한 메뉴 디자인을 여러 페이지에 적용한 경우

수정 사항일 발생하면 모든 페이지를 동일하게 수정해야 한다.

-> 동일한 메뉴 디자인을 별도의 페이지로 작성

- 필요하는 페이지에 동적 삽입

- JSTL import 구문 사용

--%>

<h1>직원관리 (JSP버전)</h1>

<c:import url="EmployeeMenu.jsp"></c:import>

</div>

<!-- 콘텐츠 영역 -->

<div class="main">

<h2>직원관리</h2>

<form>

<input type="button" value="직원추가" id="btnAdd">

<input type="button" value="직원검색" id="btnSearch">

</form> 

<p>직원수 : 1 명 </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>

</tr>

<tr>

<!-- 

1, 홍길동, 1980-12-12

, 양력, 010-123-1234

, 개발부, 사원, 서울

, 1,500,000, 1,000,000, 2,500,000

-->

<td>1</td><td>홍길동</td><td>1980-12-12</td>

<td>양력</td><td> 010-123-1234</td><td>개발부</td>

<td>사원</td><td>서울</td>

<td style="text-align: right;">1,500,000</td>

<td style="text-align: right;">1,000,000</td>

<td style="text-align: right;">2,500,000</td>

<td>

<!-- id="" 식별자 X, class="" 식별자 O -->

<input type="button" value="삭제" class="btnDelete">

</td>

</tr>

</table>

</div>

</div>

</body>

</html>












//RegionList.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>Insert title here</title>

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


</head>

<body>

<div>

<div id="menu">

<c:import url="EmployeeMenu.jsp"></c:import>

</div>

<div id="content">

<h1>지역관리</h1>

</div>

</div>

</body>

</html>






//DepartmentList.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>Insert title here</title>

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


</head>

<body>

<div>

<div id="menu">

<c:import url="EmployeeMenu.jsp"></c:import>

</div>

<div id="content">

<h1>부서관리</h1>

</div>

</div>

</body>

</html>







//PositionList.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>Insert title here</title>

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


</head>

<body>

<div>

<div id="menu">

<c:import url="EmployeeMenu.jsp"></c:import>

</div>

<div id="content">

<h1>직위관리</h1>

</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>Insert title here</title>


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


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


<script type="text/javascript">

$(document).ready(function() {

<%-- 직원명단 버튼에 대한 이벤트는 EmployeeMenu.jsp 페이지에서 처리함 --%>

$("#employeeSearch").click(function() {

$(location).attr("href", "EmployeeSearch.jsp");

});

});

</script>



</head>

<body>

<div>

<div id="menu">

<c:import url="EmployeeMenu.jsp"></c:import>

</div>

<div id="content">

<h1>직원관리</h1>

<form>

<%-- 직원명단 버튼은 식별자로 class 사용 --%>

<input type="button" value="직원명단" class="employeeList">

<input type="button" value="직원검색" id="employeeSearch">

</form>

<form>

<table>

<tr>

<th>이름</th>

<td><input type="text"></td>

</tr>

<tr>

<th>생년월일</th>

<td><input type="text">달력</td>

</tr>

<tr>

<th>양/음력</th>

<td><input type="radio">양력 <input type="radio">음력</td>

</tr>

<tr>

<th>전화번호</th>

<td><input type="text"></td>

</tr>

<tr>

<th>지역명</th>

<td><select><option>서울</option></select></td>

</tr>

<tr>

<th>부서명</th>

<td><select><option>개발부</option></select></td>

</tr>

<tr>

<th>직위명</th>

<td><select><option>사원</option></select></td>

</tr>

<tr>

<th>기본급</th>

<td><input type="text">(최소 0원 이상)</td>

</tr>

<tr>

<th>수당</th>

<td><input type="text"></td>

</tr>

<tr>

<th></th>

<td><input type="submit" value="직원추가"></td>

</tr>

</table>

</form>

</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" %>    

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>


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


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


<script type="text/javascript">

$(document).ready(function() {

$("#employeeInsertForm").click(function() {

$(location).attr("href", "EmployeeInsertForm.jsp");

});

});

</script>


</head>

<body>

<div>

<div id="menu">

<%-- 외부 JSP 페이지에 대한 동적 삽입 --%>

<c:import url="EmployeeMenu.jsp"></c:import>

</div>

<div id="content">

<h1>직원관리</h1>

<form>

<input type="button" value="직원명단" class="employeeList">

<input type="button" value="직원추가" id="employeeInsertForm">

</form>

<form>

<%-- 라디오버튼은 name="" 속성이 동일한 경우만 단일선택 기능이 작동된다. --%>

<%-- 라디오버튼에 checked="checked" 속성을 추가하면 기본 선택된 상태가 된다.  --%>

검색 

<input type="radio" name="searchKey" checked="checked"> 직원번호

<input type="radio" name="searchKey"> 주민번호

<input type="radio" name="searchKey"> 이름

<input type="radio" name="searchKey"> 지역

<input type="radio" name="searchKey"> 부서

<input type="radio" name="searchKey"> 직위

<input type="text">

<input type="submit" value="직원검색">

</form>

<h2>검색 직원수 : 0 명</h2>

<table id="customers">

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

</tr>

</table>

</div>

</div>

</body>

</html>






//RegionList.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>Insert title here</title>


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


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


</head>

<body>

<div>

<div id="menu">

<c:import url="EmployeeMenu.jsp"></c:import>

</div>

<div id="content">

<h1>지역관리</h1>

<form>

지역명 <input type="text">

<input type="submit" value="지역추가">

</form>

<h2>지역수 : 0 개</h2>

<table id="customers">

<tr>

<th>지역번호</th><th>지역명</th><th>삭제</th>

</tr>

</table>

</div>

</div>

</body>

</html>






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






'JSP' 카테고리의 다른 글

09일차_직원관리  (1) 2015.06.22
08일차_직원관리  (0) 2015.06.22
06일차_회원관리2차, 성적관리2차  (1) 2015.06.22
05일차_성적관리1차  (1) 2015.06.22
04일차_회원관리1차  (0) 2015.06.22
블로그 이미지

알 수 없는 사용자

,

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

회원관리 JSP(JDBC) 프로그램(2)

-> 데이터베이스 액션 처리 과정을 별도의 클래스로 작성. JSP 페이지는 화면 출력 액션만 작성.



1. 기능 구현

- 이름, 전화번호 입력 받아서 데이터베이스 저장

- 이름, 전화번호를 데이터베이스에서 읽어내서 화면에 출력


2. 데이터베이스 준비

--테이블 생성

CREATE TABLE memberList (

mid NUMBER  --PK

,name VARCHAR2(30)

,telephone VARCHAR2(30)

);


--제약 조건 추가

ALTER TABLE 테이블이름

ADD CONSTRAINT 제약이름 제약종류(제약대상);

ALTER TABLE 테이블이름

DROP CONSTRAINT 제약이름;


ALTER TABLE memberList

ADD CONSTRAINT memberList_mid_pk PRIMARY KEY(mid);


CREATE SEQUENCE memberListSeq;


--입력 샘플 쿼리 (프로그램에서 사용 예정)

INSERT INTO memberList (mid, name, telephone) VALUES (memberListSeq.nextval, 'kim', '010-123-1234');

COMMIT;


--권장하지 않는 표현. 컬럼 리스트에서 * 사용하지 않는다.

SELECT * FROM memberList; 


--전체 명단 출력 쿼리 (프로그램에서 사용 예정)

--권장하는 표현

SELECT mid, name, telephone FROM memberList ORDER BY mid; 


--인원수 출력 쿼리 (프로그램에서 사용 예정)

--함수 사용시 반드시 별칭 사용.

SELECT COUNT(mid) AS count FROM memberList; 




3. 화면 구성

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

[회원 관리]



이름 : hong             -> <input type="text">

전화 : 010-123-1234     -> <input type="text">

회원추가버튼                -> <input type="submit">



전체 인원수 : 2명              -> <p> ... </p>

----------------------------   -> <table>...</table>

번호 이름 전화

1   hong   010-123-1234

2   kim    010-222-2222

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



4. 프로그램 구성

//DBConn.java


//Member.java -> 자료형 클래스

//MemberDAO.java -> 데이터베이스 액션 클래스


//MemberMain.jsp -> JSP 페이지. 입력 폼, 출력 폼 페이지. 실행 페이지.

//MemberInsert.jsp -> JSP 페이지. 액션 전용 페이지.



//요청주소

http://localhost:8090/프로젝트이름/MemberMain.jsp



5. 프로그램 소스 코드


//Member.java

package com.test;


//자료형 클래스

public class Member {


//멤버변수, getter, setter 등록

private String mid, name, telephone;


public String getMid() {

return mid;

}


public void setMid(String mid) {

this.mid = mid;

}


public String getName() {

return name;

}


public void setName(String name) {

this.name = name;

}


public String getTelephone() {

return telephone;

}


public void setTelephone(String telephone) {

this.telephone = telephone;

}




}





//MemberDAO.java

package com.test;


import java.sql.*;

import java.util.*;


//데이터베이스 액션 클래스

public class MemberDAO {


public int count() {

int result = 0;

Connection conn = null;

Statement stmt = null;

try {

conn = DBConn.getConnection();

stmt = conn.createStatement();

String sql = String.format("SELECT COUNT(*) AS \"count\" FROM memberList");

ResultSet rs = stmt.executeQuery(sql);

while(rs.next()) {

result = rs.getInt("count");

}

rs.close();

}catch(Exception e){

e.printStackTrace();

}finally{

try {

if (stmt != null) {

stmt.close();

}

}catch(Exception e){

}

DBConn.close();

}

return result;

}

public ArrayList<Member> list() {

ArrayList<Member> result = new ArrayList<Member>();

Connection conn = null;

Statement stmt = null;

try {


conn = DBConn.getConnection();

stmt = conn.createStatement();

String sql = "SELECT mid, name, telephone FROM memberList ORDER BY mid";

ResultSet rs = stmt.executeQuery(sql);

while(rs.next()) {

String mid = rs.getString("mid");

String name = rs.getString("name");

String telephone = rs.getString("telephone");

Member member = new Member();

member.setMid(mid);

member.setName(name);

member.setTelephone(telephone);

result.add(member);

}

rs.close();

}catch(Exception e){

e.printStackTrace();

}finally{

try {

if (stmt != null) {

stmt.close();

}

}catch(Exception e){

}

DBConn.close();

}

return result;

}

public int add(Member member) {

int result = 0;


Connection conn = null;

Statement stmt = null;

try {


conn = DBConn.getConnection();

stmt = conn.createStatement();

String sql = String.format("INSERT INTO memberList (mid, name, telephone) VALUES (memberListSeq.nextval, '%s', '%s')"

, member.getName(), member.getTelephone());

result = stmt.executeUpdate(sql);

}catch(Exception e){

e.printStackTrace();

}finally{

try {

if (stmt != null) {

stmt.close();

}

}catch(Exception e){

}

DBConn.close();

}

return result;

}

}







//MemberMain.jsp

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

    pageEncoding="UTF-8"%>

<%@ page import="com.test.*" %>

<%

StringBuilder sb = new StringBuilder(); //명단 출력용 임시 변수

int count = 0; //인원수 출력용 임시 변수


MemberDAO dao = new MemberDAO();

count = dao.count();

for (Member m : dao.list()) {

sb.append(String.format("<tr>\r\n"));

sb.append(String.format("<td>%s</td>", m.getMid()));

sb.append(String.format("<td>%s</td>", m.getName()));

sb.append(String.format("<td>%s</td>", (m.getTelephone()==null)?"전화번호 없음":m.getTelephone() ));

sb.append(String.format("</tr>\r\n"));

}


%>    

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>


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

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


<script type="text/javascript">

window.onload=function() {


var myForm = document.getElementById("myForm");

var name = document.getElementById("name");

var telephone = document.getElementById("telephone");

var errorMsg = document.getElementById("errorMsg");

document.getElementById("myForm").onsubmit=function(){

//서브밋 액션을 계속 하거나(return true;), 중단(return false;)하는 것을 선택할 수 있다.

if(name.value == ""){

errorMsg.innerHTML = "이름을 입력하시오.";

return false;

}

if(name.value.length > 30){

errorMsg.innerHTML = "이름을 30자 이내로 입력하시오.";

return false;

}

if(telephone.value.length > 30){

errorMsg.innerHTML = "전화번호를 30자 이내로 입력하시오.";

return false;   

}

return true;

};

};

</script>


</head>

<body>

<div>

<h1>회원 관리</h1>

<h2>[입력]</h2>

<form action="MemberInsert.jsp"  method="post" id="myForm">

이름(30자 이내)* <input type="text" name="name" id="name">

전화번호(30자 이내) <input type="text" name="telephone" id="telephone">

<input type="submit" value="회원 추가">

<span id="errorMsg" style="color:red;"></span>

</form>

<h2>[출력]</h2>

<!-- <p>인원수 :  1 명</p> -->

<p>인원수 :  <%=count%> 명</p>

<table id="t01">

<tr>

<th>번호</th><th>이름</th><th>전화번호</th>

</tr>

<!-- 

<tr>

<td>1</td><td>hong</td><td>010-123-1234</td>

</tr>

-->

<%=sb.toString()%> 

</table>

</div>

</body>

</html>







//MemberInsert.jsp

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

    pageEncoding="UTF-8"%>

<%-- 액션 전용 페이지 - HTML 코드 삭제, 강제 페이지 전환, 직접 실행 X --%>    

<%@ page import="com.test.*"%>

<%

//데이터 수신(한글 인코딩 추가)

request.setCharacterEncoding("UTF-8");

String name = request.getParameter("name");

String telephone = request.getParameter("telephone");


//데이터베이스 액션-> MemberDAO 클래스 담당

MemberDAO dao = new MemberDAO();

Member m = new Member();

m.setName(name);

m.setTelephone(telephone);

dao.add(m);


//강제 페이지 전환

response.sendRedirect("MemberMain.jsp");


%>




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

성적관리 JSP(JDBC) 프로그램(2)

-> 데이터베이스 액션 처리 과정을 별도의 클래스로 작성. JSP 페이지는 화면 출력 액션만 작성.


1. 기능 구현

- 학생 테이블에는 학생의 개인 정보(번호, 학생 이름, 전화번호)가 저장된다.

- 성적 테이블에는 학생의 성적 정보(번호, 과목1, 과목2, 과목3)가 저장된다.

- 번호 항목은 학생 테이블의 PK, 성적 테이블의 PK&FK로 지정한다.

- 학생 출력시 번호, 학생 이름, 전화번호, 성적 입력 여부가 출력된다.

- 학생 입력은 학생 이름, 전화번호를 입력한다.

- 성적 출력시 번호, 학생이름, 과목1, 과목2, 과목3, 총점, 평균, 판정 점수가 출력한다.

- 판정 기준은 합격, 과락, 불합격으로 구분한다.

- 성적 입력이 안된 학생인 경우는 번호, 학생 이름만 출력하고 점수는 null 문자 또는 X 문자로 출력한다.

- 성적 입력은 학생 개개인별로 과목1, 과목2, 과목3 점수를 입력한다.



2. 화면 구성

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

학생명단버튼  성적출력버튼


--- 학생 명단 ---


학생추가버튼


전체 학생 수 : 2명

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

번호, 학생 이름, 전화번호, 성적 입력 여부

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

1, kim, 010-111-1111, O

2, park, 010-222-2222, X



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

학생명단버튼  성적출력버튼


--- 학생 추가 ---


이름  [            ]

전화번호 [            ]


학생추가버튼 




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

학생명단버튼  성적출력버튼


--- 성적 출력 ---


전체 학생 수 : 2명

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

번호, 학생이름, 과목1, 과목2, 과목3, 총점, 평균, 판정

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

1, kim, 100, 100, 100, 300, 100.0, 합격  성적추가버튼(비활성)

2, choi, X, X, X, X, X, 불합격   성적추가버튼(활성)


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

학생명단버튼  성적출력버튼


--성적 추가--


번호* [3         ] readonly

학생이름* [choi      ] readonly

과목1(0~100) [           ]

과목2(0~100) [           ]

과목3(0~100) [           ]


성적추가버튼 



3. 데이터베이스 준비


-- 학생 테이블 생성

CREATE TABLE student (

sid NUMBER --PK

,name VARCHAR2(30) -->NVARCHAR2(30)

,tel VARCHAR2(30)

);


--PK 제약 추가

ALTER TABLE student

ADD CONSTRAINT student_sid_pk PRIMARY KEY(sid);


--방법1

--일련번호 생성을 위한 시퀀스 객체 생성

CREATE SEQUENCE studentSeq;

--INSERT 쿼리 샘플 (프로그램 사용 예정)

INSERT INTO student (sid, name, tel)

VALUES (studentSeq.nextval, 'kim', '010-111-1111');

INSERT INTO student (sid, name, tel)

VALUES (studentSeq.nextval, 'park', '010-222-2222');


--방법2

INSERT INTO student (sid, name, tel)

VALUES ((SELECT NVL(MAX(sid),0)+1 FROM student), '김길동', '010-111-1111');

INSERT INTO student (sid, name, tel)

VALUES ((SELECT NVL(MAX(sid),0)+1 FROM student), '박길동', '010-222-2222');

COMMIT;


--학생 명단 출력

SELECT sid, name, tel 

  FROM student 

  ORDER BY sid;



--성적 테이블 생성

CREATE TABLE grade (

sid NUMBER --PK and FK

,sub1 NUMBER(3) --CHECK 제약 추가

,sub2 NUMBER(3) --CHECK 제약 추가

,sub3 NUMBER(3) --CHECK 제약 추가

);


--제약 추가

ALTER TABLE grade

  ADD (CONSTRAINT grade_sid_pk PRIMARY KEY(sid)

        , CONSTRAINT grade_sub1_ck CHECK (sub1 BETWEEN 0 AND 100)

        , CONSTRAINT grade_sub2_ck CHECK (sub2 BETWEEN 0 AND 100)    

        , CONSTRAINT grade_sub3_ck CHECK (sub3 BETWEEN 0 AND 100));


ALTER TABLE grade

  ADD CONSTRAINT grade_sid_fk FOREIGN KEY (sid)

              REFERENCES student(sid);


SELECT * 

  FROM constraint_check

  WHERE table_name='GRADE';



--INSERT 쿼리 샘플 (프로그램에서 사용 예정)

INSERT INTO grade (sid, sub1, sub2, sub3)

VALUES (1, 100, 100, 100); --O

COMMIT;



--학생 테이블의 자료 2명으로 만들 것.

SELECT * FROM student;


--성적 테이블의 자료 1명으로 만들 것.

SELECT * FROM grade;



--학생수 출력 쿼리

SELECT COUNT(*) AS count FROM student;



--학생 전체 명단 출력 쿼리 (프로그램에서 사용 예정)

--번호, 학생 이름, 전화번호, 성적 입력 여부(0 또는 1)

--학생 테이블 + 성적 테이블 -> JOIN, SUB QUERY


--방법1

--OUTER JOIN의 경우

SELECT s.sid AS sid, name, tel

  , DECODE(sub1, NULL, 0, 1) AS gradeCheck  --성적 입력 여부 (1 또는 0)

  FROM student s, grade g

  WHERE s.sid = g.sid(+);


--방법2

SELECT sid, name, tel

, (SELECT COUNT(*) FROM grade WHERE sid=s.sid) AS gradeCheck  --성적 입력 여부 (1 또는 0)

FROM student s

ORDER BY sid;



-->뷰(View)로 등록하는 것을 권장

CREATE OR REPLACE VIEW studentView

AS

SELECT sid, name, tel

, (SELECT COUNT(*) FROM grade WHERE sid=s.sid) AS gradeCheck

FROM student s

ORDER BY sid;


-->뷰를 이용한 학생 전체 명단  출력 쿼리

SELECT sid, name, tel, gradeCheck

FROM studentView;



--학생 검색 쿼리(성적 입력 전에 학생 정보 검색 과정에서 사용. 프로그램에서 사용 예정)

SELECT sid, name, tel, gradeCheck

FROM studentView

WHERE sid=1;



--성적 출력 쿼리 (프로그램에서 사용 예정)

--번호, 학생이름, 과목1, 과목2, 과목3, 총점, 평균, 판정(0 합격, 1 과락, 2 불합격)

--학생 테이블->번호, 학생이름

--성적 테이블->과목1, 과목2, 과목3

--총점, 평균, 판정 -> 계산 결과

--학생 테이블 + 성적 테이블 -> JOIN, SUB QUERY


주의) 오라클에서 NULL 데이터는 자바에서는 String 자료형인 경우에만 처리 가능.

NUMBER -> int -> 숫자 서식 지정 가능

VARCHAR2 -> String -> 문자열 서식 지정 가능

NUMBER + NULL -> String -> NULL이 아닌 경우에만 Integer.parseInt(String) 가능

VARCHAR2 + NULL -> String


--OUTER JOIN의 경우

SELECT sid, name, sub1, sub2, sub3, tot, ave  

    , ( CASE

          WHEN ave>=60 AND sub1>=40 AND sub2>=40 AND sub3>=40 THEN 0 --합격

          WHEN ave>=60 THEN 1 --과락

          ELSE 2 --불합격

      END ) AS ch

FROM (SELECT s.sid AS sid, name, sub1, sub2, sub3

    , (sub1 + sub2 + sub3) AS tot

    , ( (sub1 + sub2 + sub3) / 3 ) AS ave

  FROM student s, grade g

  WHERE s.sid = g.sid(+));



--> 뷰(View) 등록

CREATE OR REPLACE VIEW gradeView

AS

SELECT sid, name, sub1, sub2, sub3, tot, ave  

    , ( CASE

          WHEN ave>=60 AND sub1>=40 AND sub2>=40 AND sub3>=40 THEN 0 --합격

          WHEN ave>=60 THEN 1 --과락

          ELSE 2 --불합격

      END ) AS ch

FROM (SELECT s.sid AS sid, name, sub1, sub2, sub3

    , (sub1 + sub2 + sub3) AS tot

    , ( (sub1 + sub2 + sub3) / 3 ) AS ave

  FROM student s, grade g

  WHERE s.sid = g.sid(+));


--> 뷰를 이용한 성적 출력

SELECT sid, name, sub1, sub2, sub3, tot, ave

, ch --판정(0, 1, 2)

FROM gradeView

ORDER BY sid;



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

학생 테이블에서 이름 저장용 컬럼의 자료형을 수정. 한글 자료 저장.

VARCHAR2(30) -> NVARCHAR2(30)

ALTER TABLE student

MODIFY (name NVARCHAR2(30));


DESC student;



4. 프로그램 구성

//DBConn.java


//Student.java -> 자료형 클래스

//Grade.java -> 자료형 클래스

//StudentDAO.java -> 데이터베이스 액션 클래스

//GradeDAO.java -> 데이터베이스 액션 클래스


//StudentMain.jsp -> 학생 명단 출력 페이지. 실행 페이지.

//StudentInsertForm.jsp -> 학생 입력 폼 페이지.

//StudentInsert.jsp -> 학생 입력 액션 페이지. 액션 전용 페이지.

//GradeMain.jsp -> 성적 출력 페이지. 실행 페이지

//GradeInsertForm.jsp -> 성적 입력 폼 페이지.

//GradeInsert.jsp -> 성적 입력 액션 페이지. 액션 전용 페이지.


//TableStyle.css -> 스타일 페이지.

//DivStyle.css -> 스타일 페이지.



//요청주소

http://localhost:8090/프로젝트이름/StudentMain.jsp


5. 프로그램 소스 코드


//StudentMain.jsp

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

    pageEncoding="UTF-8"%>

<%@ page import="com.test.*" %>    

<%

//학생 명단 결과 저장용 임시 변수

StringBuilder sb = new StringBuilder();

//인원수 저장용 임시 변수

int count = 0;


StudentDAO dao = new StudentDAO();

count = dao.count();

for (Student s : dao.list()) {

sb.append(String.format("<tr>\r\n"));

sb.append(String.format("<td>%s</td>", s.getSid()));

sb.append(String.format("<td>%s</td>", s.getName()));

sb.append(String.format("<td>%s</td>", s.getTel()));

sb.append(String.format("<td>%s</td>"

, (s.getGradeCheck()==0)?"X":"O" ));

sb.append(String.format("</tr>\r\n"));

}


%>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>성적관리</title>


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

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


</head>

<body>

<div>

<!-- 메인 메뉴 영역 -->

<div class="title">

<h1>성적관리 (JSP버전)</h1>

<p> 

[<a href="StudentMain.jsp">학생관리</a>]

[<a href="GradeMain.jsp">성적관리</a>]

</p>

</div>

<!-- 콘텐츠 영역 -->

<div class="main">

<h2>학생 출력</h2>

<form><input type="button" value="학생 추가" onclick="location.href='StudentInsertForm.jsp'"></form>

<!-- <p>전체 학생수 : 1 명 </p> -->

<p>전체 학생수 : <%=count%> 명 </p>

<table id="t01">

<tr>

<th>번호</th><th>이름</th>

<th>전화번호</th><th>성적입력여부</th>

</tr>

<!-- 

<tr>

<td>1</td><td>홍길동</td>

<td>010-123-1234</td><td>X</td>

</tr>

-->

<%=sb.toString()%> 

</table>

</div>

</div>

</body>

</html>






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







'JSP' 카테고리의 다른 글

08일차_직원관리  (0) 2015.06.22
07일차_직원관리_JSTL라이브러리 사용 준비  (1) 2015.06.22
05일차_성적관리1차  (1) 2015.06.22
04일차_회원관리1차  (0) 2015.06.22
03일차_오라클 연결, SELECT 쿼리 실행 테스트  (2) 2015.06.22
블로그 이미지

알 수 없는 사용자

,

05일차_성적관리1차

JSP 2015. 6. 22. 23:08

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

성적관리 JSP(JDBC) 프로그램(1)

- JSP&JDBC 프로그램 작성은 아래 순서를 따른다.

기능 구현 분석 > 화면 구성(웹 환경) > 데이터베이스(샘플 쿼리) 준비 > 클래스 (JSP 포함) 구성 분석 > 액션 코드 작성(출력->입력->삭제->수정) > 테스트(콘솔 환경) > 최종 결과(웹 환경)



1. 기능 구현

- 학생 테이블에는 학생의 개인 정보(번호, 학생 이름, 전화번호)가 저장된다.

- 성적 테이블에는 학생의 성적 정보(번호, 과목1, 과목2, 과목3)가 저장된다.

- 번호 항목은 학생 테이블의 PK, 성적 테이블의 PK&FK로 지정한다.

- 학생 출력시 번호, 학생 이름, 전화번호, 성적 입력 여부가 출력된다.

- 학생 입력은 학생 이름, 전화번호를 입력한다.

- 성적 출력시 번호, 학생이름, 과목1, 과목2, 과목3, 총점, 평균, 판정 점수가 출력한다.

- 판정 기준은 합격, 과락, 불합격으로 구분한다.

- 성적 입력이 안된 학생인 경우는 번호, 학생 이름만 출력하고 점수는 null 문자 또는 X 문자로 출력한다.

- 성적 입력은 학생 개개인별로 과목1, 과목2, 과목3 점수를 입력한다.



2. 화면 구성

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

학생명단버튼  성적출력버튼


--- 학생 명단 ---


학생추가버튼


전체 학생 수 : 2명

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

번호, 학생 이름, 전화번호, 성적 입력 여부

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

1, kim, 010-111-1111, O

2, park, 010-222-2222, X



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

학생명단버튼  성적출력버튼


--- 학생 추가 ---


이름  [            ]

전화번호 [            ]


학생추가버튼 




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

학생명단버튼  성적출력버튼


--- 성적 출력 ---


전체 학생 수 : 2명

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

번호, 학생이름, 과목1, 과목2, 과목3, 총점, 평균, 판정

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

1, kim, 100, 100, 100, 300, 100.0, 합격  성적추가버튼(비활성)

2, choi, X, X, X, X, X, 불합격   성적추가버튼(활성)


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

학생명단버튼  성적출력버튼


--성적 추가--


번호* [3         ] readonly

학생이름* [choi      ] readonly

과목1(0~100) [           ]

과목2(0~100) [           ]

과목3(0~100) [           ]


성적추가버튼 



3. 데이터베이스 준비


-- 학생 테이블 생성

CREATE TABLE student (

sid NUMBER --PK

,name VARCHAR2(30) -->NVARCHAR2(30)

,tel VARCHAR2(30)

);


--PK 제약 추가

ALTER TABLE student

ADD CONSTRAINT student_sid_pk PRIMARY KEY(sid);


--방법1

--일련번호 생성을 위한 시퀀스 객체 생성

CREATE SEQUENCE studentSeq;

--INSERT 쿼리 샘플 (프로그램 사용 예정)

INSERT INTO student (sid, name, tel)

VALUES (studentSeq.nextval, 'kim', '010-111-1111');

INSERT INTO student (sid, name, tel)

VALUES (studentSeq.nextval, 'park', '010-222-2222');


--방법2

INSERT INTO student (sid, name, tel)

VALUES ((SELECT NVL(MAX(sid),0)+1 FROM student), '김길동', '010-111-1111');

INSERT INTO student (sid, name, tel)

VALUES ((SELECT NVL(MAX(sid),0)+1 FROM student), '박길동', '010-222-2222');

COMMIT;


--학생 명단 출력

SELECT sid, name, tel 

  FROM student 

  ORDER BY sid;



--성적 테이블 생성

CREATE TABLE grade (

sid NUMBER --PK and FK

,sub1 NUMBER(3) --CHECK 제약 추가

,sub2 NUMBER(3) --CHECK 제약 추가

,sub3 NUMBER(3) --CHECK 제약 추가

);


--제약 추가

ALTER TABLE grade

  ADD (CONSTRAINT grade_sid_pk PRIMARY KEY(sid)

        , CONSTRAINT grade_sub1_ck CHECK (sub1 BETWEEN 0 AND 100)

        , CONSTRAINT grade_sub2_ck CHECK (sub2 BETWEEN 0 AND 100)    

        , CONSTRAINT grade_sub3_ck CHECK (sub3 BETWEEN 0 AND 100));


ALTER TABLE grade

  ADD CONSTRAINT grade_sid_fk FOREIGN KEY (sid)

              REFERENCES student(sid);


SELECT * 

  FROM constraint_check

  WHERE table_name='GRADE';



--INSERT 쿼리 샘플 (프로그램에서 사용 예정)

INSERT INTO grade (sid, sub1, sub2, sub3)

VALUES (1, 100, 100, 100); --O

COMMIT;



--학생 테이블의 자료 2명으로 만들 것.

SELECT * FROM student;


--성적 테이블의 자료 1명으로 만들 것.

SELECT * FROM grade;



--학생수 출력 쿼리

SELECT COUNT(*) AS count FROM student;



--학생 전체 명단 출력 쿼리 (프로그램에서 사용 예정)

--번호, 학생 이름, 전화번호, 성적 입력 여부(0 또는 1)

--학생 테이블 + 성적 테이블 -> JOIN, SUB QUERY


--방법1

--OUTER JOIN의 경우

SELECT s.sid AS sid, name, tel

  , DECODE(sub1, NULL, 0, 1) AS sub  --성적 입력 여부 (1 또는 0)

  FROM student s, grade g

  WHERE s.sid = g.sid(+);


--방법2

SELECT sid, name, tel

, (SELECT COUNT(*) FROM grade WHERE sid=s.sid) AS sub  --성적 입력 여부 (1 또는 0)

FROM student s

ORDER BY sid;



-->뷰(View)로 등록하는 것을 권장

CREATE OR REPLACE VIEW studentView

AS

SELECT sid, name, tel

, (SELECT COUNT(*) FROM grade WHERE sid=s.sid) AS sub

FROM student s

ORDER BY sid;


-->뷰를 이용한 학생 전체 명단  출력 쿼리

SELECT sid, name, tel, sub

FROM studentView;



--학생 검색 쿼리(성적 입력 전에 학생 정보 검색 과정에서 사용. 프로그램에서 사용 예정)

SELECT sid, name, tel, sub

FROM studentView

WHERE sid=1;



--성적 출력 쿼리 (프로그램에서 사용 예정)

--번호, 학생이름, 과목1, 과목2, 과목3, 총점, 평균, 판정(0 합격, 1 과락, 2 불합격)

--학생 테이블->번호, 학생이름

--성적 테이블->과목1, 과목2, 과목3

--총점, 평균, 판정 -> 계산 결과

--학생 테이블 + 성적 테이블 -> JOIN, SUB QUERY


주의) 오라클에서 NULL 데이터는 자바에서는 String 자료형인 경우에만 처리 가능.

NUMBER -> int -> 숫자 서식 지정 가능

VARCHAR2 -> String -> 문자열 서식 지정 가능

NUMBER + NULL -> String -> NULL이 아닌 경우에만 Integer.parseInt(String) 가능

VARCHAR2 + NULL -> String


--OUTER JOIN의 경우

SELECT sid, name, sub1, sub2, sub3, tot, ave  

    , ( CASE

          WHEN ave>=60 AND sub1>=40 AND sub2>=40 AND sub3>=40 THEN 0 --합격

          WHEN ave>=60 THEN 1 --과락

          ELSE 2 --불합격

      END ) AS ch

FROM (SELECT s.sid AS sid, name, sub1, sub2, sub3

    , (sub1 + sub2 + sub3) AS tot

    , ( (sub1 + sub2 + sub3) / 3 ) AS ave

  FROM student s, grade g

  WHERE s.sid = g.sid(+));



--> 뷰(View) 등록

CREATE OR REPLACE VIEW gradeView

AS

SELECT sid, name, sub1, sub2, sub3, tot, ave  

    , ( CASE

          WHEN ave>=60 AND sub1>=40 AND sub2>=40 AND sub3>=40 THEN 0 --합격

          WHEN ave>=60 THEN 1 --과락

          ELSE 2 --불합격

      END ) AS ch

FROM (SELECT s.sid AS sid, name, sub1, sub2, sub3

    , (sub1 + sub2 + sub3) AS tot

    , ( (sub1 + sub2 + sub3) / 3 ) AS ave

  FROM student s, grade g

  WHERE s.sid = g.sid(+));


--> 뷰를 이용한 성적 출력

SELECT sid, name, sub1, sub2, sub3, tot, ave

, ch --판정(0, 1, 2)

FROM gradeView

ORDER BY sid;



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

학생 테이블에서 이름 저장용 컬럼의 자료형을 수정. 한글 자료 저장.

VARCHAR2(30) -> NVARCHAR2(30)

ALTER TABLE student

MODIFY (name NVARCHAR2(30));


DESC student;



4. 프로그램 구성

//DBConn.java

//StudentMain.jsp -> 학생 명단 출력 페이지. 메인 페이지.

//StudentInsertForm.jsp -> 학생 입력 폼 페이지.

//StudentInsert.jsp -> 학생 입력 액션 페이지. 액션 전용 페이지.

//GradeMain.jsp -> 성적 출력 페이지.

//GradeInsertForm.jsp -> 성적 입력 폼 페이지.

//GradeInsert.jsp -> 성적 입력 액션 페이지. 액션 전용 페이지.

//TableStyle.css

//DivStyle.css


//요청주소

http://localhost:8090/프로젝트이름/StudentMain.jsp


5. 프로그램 소스 코드


//TableStyle.css

@CHARSET "UTF-8";


table#t01 {

    width: 100%; 

    background-color: #E5E5E5;

}

table#t01 tr:nth-child(odd) {

    background-color: #eee;

}

table#t01 tr:nth-child(even) {

    background-color: #fff;

}

table#t01 th {

    color: white;

    background-color: #595959;

}

table#t01 td {

text-align: center;

}


table#t02 {

    width: 100%; 

    background-color: #E5E5E5;

}

table#t02 tr {

    background-color: #fff;

}

table#t02 th {

    color: white;

    background-color: #595959;

}







//DivStyle.css

@CHARSET "UTF-8";


/* element Selector */

/* color 속성은 글자색 지정 속성 */

div {  color:#404040;  }


/* class Selector - class 속성이 있는 태그만 찾는다. */

/* height 고정된 높이 지정 */

/* background-color 배경색 지정 */

div.title {padding:10px; background-color: #E5E5E5;}


/* 하위 요소 선택자 - 조상 선택자와 자손 선택자 표기 */

/* font-size 글꼴 크기 지정 */

/* margin 바깥쪽 여백 지정 */

/* margin-left 바깥쪽 여백 중에서 왼쪽 여백 지정 */

div.title   h1 {font-size:18pt; margin:0px; margin-left:10px;}

/* letter-spacing 자간 지정 */

div.title h2 {font-size:10pt; margin:0px; margin-left:50px; letter-spacing: 5px;}

div.title p {font-size:14pt; margin:0px; margin-left:10px; margin-top:5px;}


/* min-height 최소 높이 지정 */

/* padding 내부 여백 지정 */

div.main {padding-top:3px; paddig-bottom:3px; min-height: 300px;}



h1 {font-size:18pt;}

h2 {font-size:14pt;}


a { font-size:12pt; text-decoration: none; color:#404040; }

a:hover { text-decoration: underline; color:#2D2D2D; }







//StudentMain.jsp

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

    pageEncoding="UTF-8"%>

<%@ page import="java.sql.*" %>    

<%@ page import="com.test.*" %>    

<%

//학생 명단 결과 저장용 임시 변수

StringBuilder sb = new StringBuilder();

//인원수 저장용 임시 변수

int count = 0;


Connection conn = null;

PreparedStatement pstmt1 = null;

PreparedStatement pstmt2 = null;

try {

conn = DBConn.getConnection();


//인원수 출력 쿼리

String sql1 = "SELECT COUNT(*) AS \"count\" FROM studentView";

//학생 명단 출력 쿼리

String sql2 = "SELECT sid, name, tel, sub FROM studentView";

//문제) 데이터베이스 액션 처리 과정 추가

//-> 성적 입력 여부는 1, 0으로 반환되는데 O, X로 출력되도록 수정할 것.

pstmt1 = conn.prepareStatement(sql1);

ResultSet rs1 = pstmt1.executeQuery();

while (rs1.next()) {

count = rs1.getInt("count");

}

rs1.close();

pstmt2 = conn.prepareStatement(sql2);

ResultSet rs2 = pstmt2.executeQuery();

while (rs2.next()) {

//웹페이지 동적 생성 과정 추가. -> Table 태그

sb.append(String.format("<tr>\r\n"));

sb.append(String.format("<td>%s</td>", rs2.getString("sid")));

sb.append(String.format("<td>%s</td>", rs2.getString("name")));

sb.append(String.format("<td>%s</td>", (rs2.getString("tel")==null)?"전화번호 없음":rs2.getString("tel")));

sb.append(String.format("<td>%s</td>", (rs2.getInt("sub")==0)?"X":"O"));

sb.append(String.format("</tr>\r\n"));

}

rs2.close();

}catch(Exception e){

e.printStackTrace();

}finally{

try {

if (pstmt1 != null) {

pstmt1.close();

}

if (pstmt2 != null) {

pstmt2.close();

}

}catch(Exception e){

}

DBConn.close();

}

%>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>성적관리</title>


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

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


</head>

<body>

<div>

<!-- 메인 메뉴 영역 -->

<div class="title">

<h1>성적관리 (JSP버전)</h1>

<p> 

[<a href="StudentMain.jsp">학생관리</a>]

[<a href="GradeMain.jsp">성적관리</a>]

</p>

</div>

<!-- 콘텐츠 영역 -->

<div class="main">

<h2>학생 출력</h2>

<form><input type="button" value="학생 추가" onclick="location.href='StudentInsertForm.jsp'"></form>

<!-- <p>전체 학생수 : 1 명 </p> -->

<p>전체 학생수 : <%=count%> 명 </p>

<table id="t01">

<tr>

<th>번호</th><th>이름</th>

<th>전화번호</th><th>성적입력여부</th>

</tr>

<!-- 

<tr>

<td>1</td><td>홍길동</td>

<td>010-123-1234</td><td>X</td>

</tr>

-->

<%=sb.toString()%> 

</table>

</div>

</div>

</body>

</html>






//StudentInsertForm.jsp

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

    pageEncoding="UTF-8"%>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>성적관리</title>


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

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


<script type="text/javascript">

window.onload=function() {

/* 문제)

1. 필수 항목에 대한 데이터 검증 과정 추가

2. 서브밋 액션 

*/


};

</script>


</head>

<body>

<div>

<!-- 메인 메뉴 영역 -->

<div class="title">

<h1>성적관리 (JSP버전)</h1>

<p> 

[<a href="StudentMain.jsp">학생관리</a>]

[<a href="GradeMain.jsp">성적관리</a>]

</p>

</div>

<!-- 콘텐츠 영역 -->

<div class="main">

<h2>학생 추가</h2>

<form><input type="button" value="학생 출력" onclick="location.href='StudentMain.jsp'"></form>

<form action="StudentInsert.jsp" method="post" id="myForm">

<table id="t02" >

<tr>

<th>이름*</th>

<td><input type="text" name="name" id="name">(30자 이내)</td>

</tr>

<tr>

<th>전화번호</th>

<td><input type="text" name="tel" id="tel">(30자 이내)</td>

</tr>

<tr>

<th></th>

<td>

<input type="submit">

<span id="errorMsg" style="color:red;"></span>

</td>

</tr>

</table>

</form>

</div>

</div>

</body>

</html>









//StudentInsert.jsp

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

    pageEncoding="UTF-8"%>

<%-- 액션 전용 페이지 - HTML 코드 삭제, 강제 페이지 전환 --%>    

<%@ page import="java.sql.*" %>    

<%@ page import="com.test.*" %>    

<%

//문제)

//데이터 수신(한글 인코딩 추가)

//데이터베이스 액션 

//-> INSERT INTO student (sid, name, tel) VALUES ((SELECT NVL(MAX(sid),0)+1 FROM student), ?, ?)

request.setCharacterEncoding("UTF-8");

String name = request.getParameter("name");

String tel = request.getParameter("tel");


Connection conn = null;

PreparedStatement pstmt = null;

try {

conn = DBConn.getConnection();

String sql = "INSERT INTO student (sid, name, tel) VALUES ((SELECT NVL(MAX(sid),0)+1 FROM student), ?, ?)";

pstmt = conn.prepareStatement(sql);

pstmt.setString(1, name);

pstmt.setString(2, tel);

pstmt.executeUpdate();

}catch(Exception e){

e.printStackTrace();

}finally{

try {

if (pstmt != null) {

pstmt.close();

}

}catch(Exception e){

}

DBConn.close();

}


response.sendRedirect("StudentMain.jsp");

%>









//GradeMain.jsp

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

    pageEncoding="UTF-8"%>

<%@ page import="java.sql.*" %>

<%@ page import="com.test.*" %>

<%

//성적 결과 저장용 임시 변수

StringBuilder sb = new StringBuilder();

//인원수 저장용 임시 변수

int count = 0;


Connection conn = null;

PreparedStatement pstmt1 = null;

PreparedStatement pstmt2 = null;

try {

conn = DBConn.getConnection();


String sql1 = "SELECT COUNT(*) AS \"count\" FROM studentView";

String sql2 = "SELECT sid, name, sub1, sub2, sub3, tot, ave, ch FROM gradeView ORDER BY sid";

pstmt1 = conn.prepareStatement(sql1);

ResultSet rs1 = pstmt1.executeQuery();

while(rs1.next()) {

count = rs1.getInt("count");

}

rs1.close();

pstmt2 = conn.prepareStatement(sql2);

ResultSet rs2 = pstmt2.executeQuery();

//판정 출력을 위한 메시지 배열 준비

String[] array = {"합격", "과락", "불합격"};

while(rs2.next()) {

//웹페이지 동적 생성 과정 추가. -> Table 태그

sb.append(String.format("<tr>\r\n"));

sb.append(String.format("<td>%s</td>", rs2.getString("sid")));

sb.append(String.format("<td>%s</td>", rs2.getString("name")));

//과목1, 과목2, 과목3, 총점 출력시 null이면 X로 출력하고

//null이 아니면 점수 자체를 출력

sb.append(String.format("<td>%s</td>", (rs2.getString("sub1")==null)?"X":rs2.getString("sub1") ));

sb.append(String.format("<td>%s</td>", (rs2.getString("sub2")==null)?"X":rs2.getString("sub2")));

sb.append(String.format("<td>%s</td>", (rs2.getString("sub3")==null)?"X":rs2.getString("sub3")));

sb.append(String.format("<td>%s</td>", (rs2.getString("tot")==null)?"X":rs2.getString("tot")) );

//평균 출력시 null이면 X로 출력하고 

//null이 아니면 소수 이하 한 자리 서식 지정 출력

sb.append(String.format("<td>%s</td>", (rs2.getString("ave")==null)?"X":String.format("%.1f",rs2.getDouble("ave"))));

//판정 출력시 0-합격, 1-과락, 2-불합격 출력

sb.append(String.format("<td>%s</td>", array[rs2.getInt("ch")] ));

//성적 추가 버튼은 성적별로 별도 추가

//성적이 이미 입력된 경우는 버튼에 대해서 비활성 처리

//->과목1이 null인지 확인

//버튼 클릭시 GradeInsertForm.jsp 페이지로 연결되도록 지정

//페이지 연결시 sid 값을 넘기는 과정 필요(GET방식 전송)

sb.append(String.format("<td><input type=\"button\" value=\"성적 추가\" %s  onclick=\"location.href='GradeInsertForm.jsp?sid=%s'\"></td>", (rs2.getString("sub1")==null)?"":"disabled=\"disabled\"" , rs2.getString("sid")  ));

sb.append(String.format("<tr>\r\n"));

}

rs2.close();

}catch(Exception e){

e.printStackTrace();

}finally{

try {

if (pstmt1 != null) {

pstmt1.close();

}

if (pstmt2 != null) {

pstmt2.close();

}

}catch(Exception e){

}

DBConn.close();

}


%>    

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>성적관리</title>


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

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


</head>

<body>

<div>

<!-- 메인 메뉴 영역 -->

<div class="title">

<h1>성적관리 (JSP버전)</h1>

<p> 

[<a href="StudentMain.jsp">학생관리</a>]

[<a href="GradeMain.jsp">성적관리</a>]

</p>

</div>

<!-- 콘텐츠 영역 -->

<div class="main">

<!-- 문제) 성적 출력 페이지 작성 -->

<h2>성적 출력</h2>

<!-- <p>전체 학생수 : 2 명 </p> -->

<p>전체 학생수 : <%=count%> 명 </p>

<form>

<table id="t01">

<tr>

<th>번호</th><th>학생이름</th><th>과목1</th><th>과목2</th><th>과목3</th>

<th>총점</th><th>평균</th><th>판정</th><th>성적추가</th>

</tr>

<!-- 

<tr>

<td>1</td><td>kim</td>

<td>100</td><td>100</td><td>100</td><td>300</td><td>100.0</td><td>합격</td>

<td><input type="button" value="성적 추가" onclick="" disabled="disabled"></td>

</tr>

<tr>

<td>2</td><td>choi</td>

<td>x</td><td>x</td><td>x</td><td>x</td><td>x</td><td>불합격</td>

<td><input type="button" value="성적 추가" onclick="location.href='GradeInsertForm.jsp'"></td>

</tr>

-->

<%=sb.toString()%>

</table>

</form>

</div>

</div>

</body>

</html>






//GradeInsertForm.jsp

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

    pageEncoding="UTF-8"%>

<%@ page import="java.sql.*" %>

<%@ page import="com.test.*" %>

<%

String sid = "";

String name = "";


//데이터 수신

sid = request.getParameter("sid");


//데이터베이스 액션 처리

//SELECT name FROM studentView WHERE sid=번호;

Connection conn = null;

PreparedStatement pstmt = null;

try {

conn = DBConn.getConnection();

String sql = "SELECT name FROM studentView WHERE sid=?";

pstmt = conn.prepareStatement(sql);

pstmt.setString(1, sid);

ResultSet rs = pstmt.executeQuery();

while(rs.next()){

name = rs.getString("name");

}

rs.close();


}catch(Exception e){

e.printStackTrace();

}finally{

try {

if (pstmt != null) {

pstmt.close();

}

}catch(Exception e){

}

DBConn.close();

}

%>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>성적관리</title>


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

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


<script type="text/javascript">

window.onlaod=function() {

//문제)

//번호, 이름 -> 자동 입력 -> 검증 과정 X

//과목1, 과목2, 과목3에 대한 데이터 검증 과정

//서브밋 액션

};


</script>


</head>

<body>

<div>

<!-- 메인 메뉴 영역 -->

<div class="title">

<h1>성적관리 (JSP버전)</h1>

<p> 

[<a href="StudentMain.jsp">학생관리</a>]

[<a href="GradeMain.jsp">성적관리</a>]

</p>

</div>

<!-- 콘텐츠 영역 -->

<div class="main">

<!-- 문제) 성적 입력 폼 페이지 작성 -->

<h2>성적 추가</h2>

<form>

<input type="button" value="성적 출력" onclick="location.href='GradeMain.jsp'">

</form>

<form action="GradeInsert.jsp" method="post" id="myForm">

<table id="t02" >

<tr>

<th>번호*</th>

<td><input type="text" id="sid" name="sid" value="<%=sid%>" readonly="readonly"> readonly</td>

</tr>

<tr>

<th>학생이름*</th>

<td><input type="text" id="name" name="name" value="<%=name%>" readonly="readonly"> readonly</td>

</tr>

<tr>

<th>과목1*</th>

<td><input type="text" id="sub1" name="sub1"> (0~100)</td>

</tr>

<tr>

<th>과목2*</th>

<td><input type="text" id="sub2" name="sub2"> (0~100)</td>

</tr>

<tr>

<th>과목3*</th>

<td><input type="text" id="sub3" name="sub3"> (0~100)</td>

</tr>

<tr>

<th></th>

<td style="text-align:left;">

<input type="submit">

<span id="errorMsg" style="color:red;"></span>

</td>

</tr>

</table>

</form>

</div>

</div>

</body>

</html>




//GradeInsert.jsp

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

    pageEncoding="UTF-8"%>

<%-- 액션 전용 페이지 - HTML 코드 삭제, 강제 페이지 전환 --%>    

<%@ page import="java.sql.*"%>

<%@ page import="com.test.*"%>

<%

//문제)

//데이터 수신(한글 인코딩 추가)

//데이터베이스 액션 

//INSERT INTO grade (sid, sub1, sub2, sub3) VALUES (?, ?, ?, ?)





response.sendRedirect("GradeMain.jsp");

%>






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
























블로그 이미지

알 수 없는 사용자

,

04일차_회원관리1차

JSP 2015. 6. 22. 23:08

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

백업용 샘플 프로젝트 생성



ojdbc6.jar, DBConn.java, TableStyle.css 파일을 아래 경로에 복사한다.

-> Dynamic Web Project 생성 후에 ojdbc6.jar 파일을  WebContent>WEB-INF>lib 폴더에 복사

-> DBConn.java 파일을 Java Resources>src 폴더 하위에 com.test 패키지 생성하고 그 안에 복사

-> TableStyle.css 파일을 WebContent 폴더 하위에 복사

-> 샘플 프로젝트에서 src, WebContent 폴더만 백업할 것.

-> 연습용 프로젝트 생성할 때마다 백업된 샘플 프로젝트의 src, WebContent 폴더를 복사해서 새로 생성한 프로젝트에 덮어쓰기 한다.


주의) 환경설정 파일이 계속 변동될 예정이므로 백업용 샘플 프로젝트는 버전별로 관리할 것.




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

회원정보 입.출력 프로그램




1. 데이터베이스 준비

CREATE TABLE employees (

 id NUMBER NOT NULL, --PK, 필수 항목

 first VARCHAR2(255) NOT NULL, --필수 항목

 last VARCHAR2(255),

 age NUMBER

);


ALTER TABLE employees

ADD CONSTRAINT employees_id_pk PRIMARY KEY(id);

 

INSERT INTO employees (id,age,first,last) VALUES (100, 18, 'Zara', 'Ali');

INSERT INTO employees (id,age,first,last) VALUES (101, 25, 'Mahnaz', 'Fatma');

INSERT INTO employees (id,age,first,last) VALUES (102, 30, 'Zaid', 'Khan');

INSERT INTO employees (id,age,first,last) VALUES (103, 28, 'Sumit', 'Mittal');

COMMIT;



--테이블 존재 확인

SELECT * FROM user_tables;


--데이터 확인

SELECT ID, AGE, FIRST, LAST FROM employees;


--테이블 구조 확인

SELECT * FROM user_tab_columns

  WHERE table_name='EMPLOYEES';


--테이블 제약조건 확인 (테이블명은 대문자로 표기)

SELECT * FROM constraint_check

  WHERE table_name='EMPLOYEES';



2. 프로그램 구성

//DBConn.java

//Sample15Main.jsp -> 출력 페이지. 실행 페이지.

//Sample15InsertForm.jsp -> 입력 폼 페이지

//Sample15Insert.jsp -> 입력 액션 페이지


3. 프로그램 소스 코드


//Sample15Main.jsp

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

    pageEncoding="UTF-8"%>

<%@ page import="java.sql.*" %>

<%@ page import="com.test.*" %>

<%

StringBuilder sb = new StringBuilder();

Connection conn = null;

PreparedStatement pstmt = null;

try {

conn = DBConn.getConnection();


//SELECT 쿼리 실행 및 결과 출력(웹페이지) 테스트

//SELECT ID, AGE, FIRST, LAST FROM employees ORDER BY id;

String sql = String.format("SELECT ID, AGE, FIRST, LAST FROM employees ORDER BY id");

pstmt = conn.prepareStatement(sql);

//데이터 바인딩 과정 추가

ResultSet rs = pstmt.executeQuery();

while(rs.next()) {

//웹페이지 동적 생성 과정 추가 -> Table 태그

sb.append(String.format("<tr>\r\n"));

sb.append(String.format("<td>%s</td>", rs.getString("id")));

sb.append(String.format("<td>%s</td>", rs.getString("age")));

sb.append(String.format("<td>%s</td>", rs.getString("first")));

sb.append(String.format("<td>%s</td>\r\n", rs.getString("last")));

sb.append(String.format("</tr>\r\n"));

}

rs.close();

}catch(Exception e){

e.printStackTrace();

}finally{

try {

if (pstmt != null) {

pstmt.close();

}

}catch(Exception e){

}

DBConn.close();

}

%>    

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>


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


</head>

<body>

<div>

<h1>회원 정보</h1>

<p><a href="Sample15InsertForm.jsp">회원 추가</a></p>

<table id="t01">

<tr>

<th>ID</th><th>AGE</th><th>FIRST</th><th>LAST</th>

</tr>

<!-- 

<tr>

<td>200</td><td>20</td><td>hong</td><td>gildong</td>

</tr>

-->

<%=sb.toString()%> 

</table>


</div>

</body>

</html>







//Sample15InsertForm.jsp

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

    pageEncoding="UTF-8"%>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>


<script type="text/javascript">

window.onload=function() {

var myForm = document.getElementById("myForm");

var id = document.getElementById("id");

var age = document.getElementById("age");

var first = document.getElementById("first");

var last = document.getElementById("last");

var errorMsg = document.getElementById("errorMsg");

document.getElementById("myForm").onsubmit=function() {

//문제)

//데이터 검사 과정 추가 -> 메시지 출력 -> return false;

if(id.value ==""){

errorMsg.innerHTML = "ID를 채워야 합니다.";

return false;

}

if (id.value.match(/[^0-9]/)) {

errorMsg.innerHTML="ID는 숫자만 사용해야 합니다.";

return false;

}

if(first.value ==""){

errorMsg.innerHTML = "FIRST를 채워야 합니다.";

return false;

}

if(age.value.match(/[^0-9]/)){

errorMsg.innerHTML="AGE는 숫자만 사용해야 합니다.";

return false;

}

//서브밋 액션 처리

return true;

};

};


</script>


</head>

<body>

<div>

<%-- 회원 정보(id, age, first, last) 입력 폼 페이지 --%>

<h1>회원 정보</h1>

<p><a href="Sample15Main.jsp">회원 명단</a></p>

<form action="Sample15Insert.jsp" method="post" id="myForm">

<table>

<tr>

<th>ID*</th>

<td>

<!-- 

name="" 식별자는 JSP 프로그램과 연동

id="" 식별자는 자바스크립트와 연동

-->

<input type="text" name="id" id="id"> (숫자 전용)

</td>

</tr>

<tr>

<th>FIRST*</th>

<td>

<input type="text" name="first" id="first">

</td>

</tr>

<tr>

<th>LAST</th>

<td>

<input type="text" name="last" id="last">

</td>

</tr>

<tr>

<th>AGE</th>

<td>

<input type="text" name="age" id="age"> (숫자 전용)

</td>

</tr>

<tr>

<th></th>

<td>

<input type="submit" value="회원추가">

<span id="errorMsg" style="color:red;"></span>

</td>

</tr>

</table>

</form>

</div>

</body>

</html>










//Sample15Insert.jsp

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

    pageEncoding="UTF-8"%>

<%-- 액션 전용 페이지 (강제 페이지 전환 코드 추가, HTML 코드 삭제) --%>    

<%@ page import="java.sql.*" %>

<%@ page import='com.test.*' %>    

<%

//데이터 수신 과정 추가 (한글 데이터->인코딩 추가)

request.setCharacterEncoding("UTF-8");

String id = request.getParameter("id");

String first = request.getParameter("first");

String last = request.getParameter("last");

String age = request.getParameter("age");


Connection conn = null;

PreparedStatement pstmt = null;

int result = 0;

try {

conn = DBConn.getConnection();

String sql = String.format("INSERT INTO employees (id,first,last,age) VALUES (?, ?, ?, ?)");

pstmt = conn.prepareStatement(sql);

//데이터 바인딩 과정 추가

pstmt.setInt(1, Integer.parseInt(id));

pstmt.setString(2, first);

pstmt.setString(3, last);

pstmt.setString(4, age); //NULL 값 대비 setString() 메소드 사용

pstmt.executeUpdate();


}catch(Exception e){

e.printStackTrace();

}finally{

try {

if (pstmt != null) {

pstmt.close();

}

}catch(Exception e){

}

DBConn.close();

}


//강제 페이지 전환 코드 추가

response.sendRedirect("Sample15Main.jsp");



%>





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

회원관리 JSP(JDBC) 프로그램(1)


1. 기능 구현

- 이름, 전화번호 입력 받아서 데이터베이스 저장

- 이름, 전화번호를 데이터베이스에서 읽어내서 화면에 출력


2. 데이터베이스 준비

--테이블 생성

CREATE TABLE memberList (

mid NUMBER  --PK

,name VARCHAR2(30)

,telephone VARCHAR2(30)

);


--제약 조건 추가

ALTER TABLE 테이블이름

ADD CONSTRAINT 제약이름 제약종류(제약대상);

ALTER TABLE 테이블이름

DROP CONSTRAINT 제약이름;


ALTER TABLE memberList

ADD CONSTRAINT memberList_mid_pk PRIMARY KEY(mid);


CREATE SEQUENCE memberListSeq;


--입력 샘플 쿼리 (프로그램에서 사용 예정)

INSERT INTO memberList (mid, name, telephone) VALUES (memberListSeq.nextval, 'kim', '010-123-1234');

COMMIT;


--권장하지 않는 표현. 컬럼 리스트에서 * 사용하지 않는다.

SELECT * FROM memberList; 


--전체 명단 출력 쿼리 (프로그램에서 사용 예정)

--권장하는 표현

SELECT mid, name, telephone FROM memberList ORDER BY mid; 


--인원수 출력 쿼리 (프로그램에서 사용 예정)

--함수 사용시 반드시 별칭 사용.

SELECT COUNT(mid) AS count FROM memberList; 




3. 화면 구성

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

[회원 관리]


회원추가버튼


전체 인원수 : 2명              -> <p> ... </p>

----------------------------   -> <table>...</table>

번호 이름 전화

1   hong   010-123-1234

2   kim    010-222-2222

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


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

[회원 관리]


회원명단버튼


이름 : hong             -> <input type="text">

전화 : 010-123-1234     -> <input type="text">

회원추가버튼                -> <input type="submit">



4. 프로그램 구성

//DBConn.java

//Sample05Main.jsp -> 회원 명단 출력.  출력 액션. 메인 페이지.

//Sample05InsertForm.jsp -> 회원 추가 폼 화면.

//Sample05Insert.jsp -> 회원 추가 액션. sendRedirect() 메소드.


//요청주소

http://localhost:8090/프로젝트이름/Sample05Main.jsp



5. 프로그램 소스 코드


//Sample05Main.jsp -> 회원 명단 출력.  출력 액션. 메인 페이지.

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

    pageEncoding="UTF-8"%>

<%-- 출력 페이지 (SELECT 쿼리 액션. 메인 페이지) --%>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>


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


</head>

<body>

<div>

<h1>[회원 관리]</h1>

<!-- 

<p>

<a href="Sample05InsertForm.jsp">회원추가</a>

</p>

-->

<form>

<input type="button" value="회원추가" id="btn">

</form>


<h2>

전체 인원수 : 0 명

</h2>

<table id="customers">

<tr>

<th>번호</th><th>이름</th><th>전화</th>

</tr>

<tr>

<td>샘플</td><td>샘플</td><td>샘플</td>

</tr>

</table>


</div>

</body>

</html>








//Sample05InsertForm.jsp -> 회원 추가 폼 화면.

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

    pageEncoding="UTF-8"%>

<%-- 입력 폼 페이지 --%>    

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>


<style type="text/css">

#error { display: none; color: red; }

</style>



</head>

<body>

<div>

<h1>[회원 관리]</h1>

<!-- 

<p>

<a href="Sample05Insert.jsp">회원명단</a>

</p>

-->

<form>

<input type="button" value="회원명단" id="btn">

</form>


<form action="Sample05Insert.jsp" method="post" id="myForm">

<table>

<tr>

<th>이름</th>

<td>

<%-- 

주의) id="", name="" 식별자는

데이터베이스 테이블의 컬럼명을 사용한다.

동일 자료, 동일 식별자(변수명, 컬럼명,...)  

--%>

<%--

required="required" 속성은 HTML5 전용.

필수 입력 지정.

--%>

<input type="text" id="name" name="name" 

required="required">

</td>

</tr>

<tr>

<th>전화</th>

<td>

<input type="text" id="telephone" name="telephone" 

required="required">

</td>

</tr>

<tr>

<th></th>

<td>

<%-- 

submit 액션을 반드시 추가해야 한다. 

HTML의 submit 버튼이나,

Javascript의 submit() 메소드를 이용한다.

--%>

<input type="submit">

<span id="error">모든 항목을 채워야 합니다.</span>

</td>

</tr>

</table>

</form>

</div>

</body>

</html>





//Sample05Insert.jsp -> 회원 추가 액션. sendRedirect() 메소드.





//요청주소

http://localhost:8090/프로젝트이름/Sample05Main.jsp








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

회원관리 JSP(JDBC) 프로그램(2)


1. 기능 구현

- 이름, 전화번호 입력 받아서 데이터베이스 저장

- 이름, 전화번호를 데이터베이스에서 읽어내서 화면에 출력


2. 데이터베이스 준비

--테이블 생성

CREATE TABLE memberList (

mid NUMBER  --PK

,name VARCHAR2(30) -->  NVARCHAR2(30)

,telephone VARCHAR2(30)

);


--제약 조건 추가

ALTER TABLE 테이블이름

ADD CONSTRAINT 제약이름 제약종류(제약대상);

ALTER TABLE 테이블이름

DROP CONSTRAINT 제약이름;


ALTER TABLE memberList

ADD CONSTRAINT memberList_mid_pk PRIMARY KEY(mid);


--방법1

CREATE SEQUENCE memberListSeq;

--입력 샘플 쿼리 (프로그램에서 사용 예정)

INSERT INTO memberList (mid, name, telephone) VALUES (memberListSeq.nextval, 'kim', '010-123-1234');

COMMIT;


--방법2

--입력 샘플 쿼리 (프로그램에서 사용 예정)

INSERT INTO memberList (mid, name, telephone) VALUES ((SELECT NVL(MAX(mid), 

0)+1 FROM memberList), 'kim', '010-123-1234');

INSERT INTO memberList (mid, name, telephone) VALUES ((SELECT NVL(MAX(mid), 

0)+1 FROM memberList), 'choi', '010-234-2345');

COMMIT;  



--권장하지 않는 표현. 컬럼 리스트에서 * 사용하지 않는다.

SELECT * FROM memberList; 


--전체 명단 출력 쿼리 (프로그램에서 사용 예정)

--권장하는 표현

SELECT mid, name, telephone FROM memberList ORDER BY mid; 


--인원수 출력 쿼리 (프로그램에서 사용 예정)

--함수 사용시 반드시 별칭 사용.

SELECT COUNT(mid) AS "count" FROM memberList; 




3. 화면 구성

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

[회원 관리]


이름 : hong             -> <input type="text">

전화 : 010-123-1234     -> <input type="text">

회원추가버튼                -> <input type="submit">


전체 인원수 : 2명              -> <p> ... </p>

----------------------------   -> <table>...</table>

번호 이름 전화

1   hong   010-123-1234

2   kim    010-222-2222

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



4. 프로그램 구성

//DBConn.java

//Sample16Main.jsp -> 회원 명단 출력. 회원 추가 폼 화면. 출력 액션. 메인 페이지.

//Sample16Insert.jsp -> 회원 추가 액션. sendRedirect() 메소드.


//요청주소

http://localhost:8090/프로젝트이름/Sample16Main.jsp



5. 프로그램 소스 코드

//Sample16Main.jsp -> 회원 명단 출력. 회원 추가 폼 화면. 출력 액션. 메인 페이지.

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

    pageEncoding="UTF-8"%>

<%@ page import="java.sql.*" %>

<%@ page import="com.test.*" %>

<%

StringBuilder sb = new StringBuilder(); //명단 출력용 임시 변수

int count = 0; //인원수 출력용 임시 변수


Connection conn = null;

PreparedStatement pstmt1 = null;

PreparedStatement pstmt2 = null;

try {

conn = DBConn.getConnection();

//문제)

//데이터베이스 액션 처리 과정 추가

//SELECT COUNT(mid) AS "count" FROM memberList; 

//SELECT mid, name, telephone FROM memberList ORDER BY mid;

String sql1 = String

.format("SELECT COUNT(mid) AS \"count\"  FROM memberList");

pstmt1 = conn.prepareStatement(sql1);

ResultSet rs1 = pstmt1.executeQuery();

while (rs1.next()) {

count = rs1.getInt("count");

}

rs1.close();


String sql2 = String.format("SELECT mid, name AS \"name\", telephone FROM memberList ORDER BY mid");

pstmt2 = conn.prepareStatement(sql2);

ResultSet rs2 = pstmt2.executeQuery();

while (rs2.next()) {

//웹페이지 동적 생성 과정 추가. -> Table 태그

sb.append(String.format("<tr>\r\n"));

sb.append(String.format("<td>%s</td>", rs2.getString("mid")));

sb.append(String.format("<td>%s</td>", rs2.getString("name")));

sb.append(String.format("<td>%s</td>", (rs2.getString("telephone")==null)?"전화번호 없음":rs2.getString("telephone") ));  //null값 인 경우 "전화번호 없음"으로 출력

sb.append(String.format("</tr>\r\n"));

}

rs2.close();


}catch(Exception e){

e.printStackTrace();

}finally{

try {

if (pstmt1 != null) {

pstmt1.close();

}

if (pstmt2 != null) {

pstmt2.close();

}

}catch(Exception e){

}

DBConn.close();

}


%>    

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>회원 관리</title>


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


<script type="text/javascript">

window.onload=function() {

//문제)

//이벤트 등록 -> onsubmit

//빈 항목 검사 -> 이름

//글자수 검사 -> 30자 이내

//서브밋 액션 -> return true;

var myForm = document.getElementById("myForm");

var name = document.getElementById("name");

var telephone = document.getElementById("telephone");

var errorMsg = document.getElementById("errorMsg");

document.getElementById("myForm").onsubmit=function(){

//서브밋 액션을 계속 하거나(return true;), 중단(return false;)하는 것을 선택할 수 있다.

if(name.value == ""){

errorMsg.innerHTML = "이름을 입력하시오.";

return false;

}

if(name.value.length > 30){

errorMsg.innerHTML = "이름을 30자 이내로 입력하시오.";

return false;

}

if(telephone.value.length > 30){

errorMsg.innerHTML = "전화번호를 30자 이내로 입력하시오.";

return false;   

}

return true;

};

};

</script>


</head>

<body>

<div>

<h1>회원 관리</h1>

<h2>[입력]</h2>

<%-- 

action="" 속성을 생략하면 서브밋 액션 주소가 자기 자신이 된다.

- 자기 자신이 입력 액션인 경우 새로고침 문제 발생

- 입력 액션만은 별도 진행하는 것을 권장

--%>

<form action="Sample16Insert.jsp"  method="post" id="myForm">

<%-- name="", id="" 식별자는 데이터베이스 테이블의 컬럼명 지정 --%>

<%-- name="" 식별자는 JSP 프로그램 연동

id="" 식별자는 자바스크립트 연동 --%>

<%-- 필수 입력 항목은 자바스크립트 검사 과정 추가 --%>

이름(30자 이내)* <input type="text" name="name" id="name">

전화번호(30자 이내) <input type="text" name="telephone" id="telephone">

<input type="submit" value="회원 추가">

<span id="errorMsg" style="color:red;"></span>

</form>

<h2>[출력]</h2>

<!-- <p>인원수 :  1 명</p> -->

<p>인원수 :  <%=count%> 명</p>

<table id="t01">

<tr>

<th>번호</th><th>이름</th><th>전화번호</th>

</tr>

<!-- 

<tr>

<td>1</td><td>hong</td><td>010-123-1234</td>

</tr>

-->

<%=sb.toString()%> 

</table>

</div>

</body>

</html>








//Sample16Insert.jsp -> 브라우저에서 직접 실행하면 안됨.

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

    pageEncoding="UTF-8"%>

<%-- 액션 전용 페이지 (강제 페이지 전환 코드 추가, HTML 코드 삭제) --%>

<%@ page import="java.sql.*" %>    

<%@ page import="com.test.*" %>    

<%

//데이터 수신(한글 데이터->인코딩 추가)

//동일 자료, 동일 식별자

request.setCharacterEncoding("UTF-8");

String name = request.getParameter("name");

String telephone = request.getParameter("telephone"); //빈 항목(NULL X)이 전달될 수 있다.


//데이터베이스 액션

//INSERT INTO memberList (mid, name, telephone) VALUES ((SELECT NVL(MAX(mid),0)+1 FROM memberList), ?, ?)

Connection conn = null;

PreparedStatement pstmt = null;

try {

conn = DBConn.getConnection();

String sql = String.format("INSERT INTO memberList (mid, name, telephone) VALUES ((SELECT NVL(MAX(mid),0)+1 FROM memberList), ?, ?)");

pstmt = conn.prepareStatement(sql);

//데이터 바인딩 추가

pstmt.setString(1, name);

pstmt.setString(2, telephone); //빈 항목(NULL X) 

pstmt.executeUpdate();

}catch(Exception e){

e.printStackTrace();

}finally{

try {

if (pstmt != null) {

pstmt.close();

}

}catch(Exception e){

}

DBConn.close();

}

response.sendRedirect("Sample16Main.jsp");

%>








//요청주소

http://localhost:8090/프로젝트이름/Sample16Main.jsp





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











블로그 이미지

알 수 없는 사용자

,

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

JSP와 오라클 연동

- JSP&JDBC 프로그램 작성은 아래 순서를 따른다.

기능 구현 분석 > 화면 구성(웹 환경) > 데이터베이스(샘플 쿼리) 준비 > 클래스 (JSP 포함) 구성 분석 > 액션 코드 작성 > 테스트(콘솔 환경) > 최종 결과(웹 환경)



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

원격 접속을 위한 오라클 서버 환경 설정.


1. 팀원은 오라클 로컬 서버는 서비스 중지 상태를 만든다.


2. 팀장(SQL 서버 담당자)은 오라클 서버의 관리자 계정(SYS)에 대한 암호를 변경한다.

ALTER USER sys IDENTIFIED BY 새로운암호;


3. 팀장(SQL 서버 담당자)은 원격 서버 연결을 위해서 오라클 서버에 팀원들의 계정을 생성한다(자기 자신 계정 포함).

CREATE USER 계정이름 IDENTIFIED BY 1234

DEFAULT TABLESPACE users

QUOTA UNLIMITED ON users;

GRANT CONNECT, RESOURCE, CREATE VIEW TO 계정이름;


--계정 삭제할 때 사용할 것

DROP USER 계정이름;

DROP USER 계정이름 CASCADE;


4. 팀장(SQL 서버 담당자)은 원격 서버 연결을 위해서 방화벽에 1521 포트 허용을 추가한다.


5. 팀원은 SQL Developer에서 팀장(SQL 서버 담당자) 컴퓨터의 IP 번호를 이용해서  원격 연결을 설정한다.


6. 팀원은 원격 연결이 되면 본인의 암호를 변경한다.

ALTER USER 계정이름 IDENTIFIED BY 새로운암호;






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

JDBC(Java Database Connectivity) 환경 설정


1. JDBC API is a Java API that can access any kind of tabular data, especially data stored in a Relational Database. JDBC works with Java on a variety of platforms, such as Windows, Mac OS, and the various versions of UNIX.


2. 구성 요소

JDBC API: This provides the application-to-JDBC Manager connection.

JDBC Driver API: This supports the JDBC Manager-to-Driver Connection.


3. 오라클 전용 JDBC Driver 준비

www.oracle.com 사이트에서 ojdbc6.jar 다운로드


http://www.oracle.com/technetwork/database/features/jdbc/index-091264.html?ssSourceSiteId=ocomen



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

JSP에서 오라클 연동


1. Import the packages . Requires that you include the packages containing the JDBC classes needed for database programming. Most often, using import java.sql.* will suffice.


2. Register the JDBC driver . Requires that you initialize a driver so you can open a communications channel with the database.


static final String JDBC_DRIVER = "oracle.jdbc.driver.OracleDriver";  

Class.forName(JDBC_DRIVER);


3. Open a connection . Requires using the DriverManager.getConnection() method to create a Connection object, which represents a physical connection with the database.


static final String DB_URL = "jdbc:oracle:thin:@IP주소:포트번호:SID";

static final String USER = "username";

static final String PASS = "password";

DriverManager.getConnection(DB_URL,USER,PASS);


4. Clean up the environment . Requires explicitly closing all database resources versus relying on the JVM's garbage collection.




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

JSP에서 오라클 연동 테스트1


//Sample01.jsp

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

    pageEncoding="UTF-8"%>

<%@ page import="java.sql.*" %>    

<%


Connection conn = null;

try {

Class.forName("oracle.jdbc.driver.OracleDriver");

conn = DriverManager.getConnection("jdbc:oracle:thin:아이디/패스워드@211.63.89.XX:1521:xe");

if (conn != null) {

System.out.println("오라클 서버 연결 성공!");

}

} catch (ClassNotFoundException e) {

e.printStackTrace();

} catch (SQLException e) {

e.printStackTrace();

}finally {

    try{

       if(conn!=null)

          conn.close();

    }catch(SQLException se){

       se.printStackTrace();

    }

}


%>    

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

</head>

<body>

<div>

<p>오라클 연결 테스트!</p>

</div>

</body>

</html>


//요청주소

http://localhost:8090/프로젝트이름/Sample01.jsp

-> 오라클 연결 성공 여부 확인은 이클립스 콘솔 창 확인할 것.



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

JSP에서 오라클 연동 테스트2


//DBConn.java (Java Resources>src 폴더 하위에 com.test 패키지 안에 생성)

package com.test;


import java.sql.*;


public class DBConn {


//Connection(데이터베이스 연결) 객체 저장용 변수 선언

private static Connection conn = null;

//1. 데이터베이스 연결 과정

public static Connection getConn() 

throws ClassNotFoundException, SQLException {


//Connection 객체가 생성되지 않은 경우에만

//신규 객체를 생성한다. -> SingleTone

if (conn == null) {

//데이터베이스 연결 액션(로그인 과정)

Class.forName("oracle.jdbc.driver.OracleDriver");

String url = "jdbc:oracle:thin:아이디/패스워드@211.63.89.XX:1521:xe";

conn = DriverManager.getConnection(url);

}

return conn;

}

//2. 데이터베이스 연결 종료 과정

public static void close() throws SQLException {

if (conn != null) {

conn.close();

}

conn = null; //멤버변수를 NULL 값으로 초기화

}

}





//Sample12.jsp (WebContent 폴더 하위에 생성)

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

    pageEncoding="UTF-8"%>

<%@ page import="java.sql.*" %>    

<%@ page import="com.test.*" %>    

<%

Connection conn = null;

PreparedStatement pstmt = null;

String result = "오라클 연결 테스트_실패!";

try {

conn = DBConn.getConnection();

if (conn != null) {

result = "오라클 연결 테스트_성공!";

}

}catch(Exception e){

e.printStackTrace();

}finally{

try {

if (pstmt != null) {

pstmt.close();

}

}catch(Exception e){

}

DBConn.close();

}


%>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

</head>

<body>

<div>

<%=result%>

</div>

</body>

</html>







//요청주소

http://localhost:8090/프로젝트이름/Sample12.jsp





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

데이터베이스에서 자료를 읽어내서 웹페이지에 출력(SELECT 쿼리 테스트)

-> 동적으로 HTML (table)태그 생성 과정 필요


1. 데이터베이스 준비

CREATE TABLE employees (

 id NUMBER NOT NULL,

 age NUMBER NOT NULL,

 first VARCHAR2(255),

 last VARCHAR2(255)

);

 

 

INSERT INTO employees VALUES (100, 18, 'Zara', 'Ali');

INSERT INTO employees VALUES (101, 25, 'Mahnaz', 'Fatma');

INSERT INTO employees VALUES (102, 30, 'Zaid', 'Khan');

INSERT INTO employees VALUES (103, 28, 'Sumit', 'Mittal');

COMMIT;



--테이블 존재 확인

SELECT * FROM user_tables;


--데이터 확인

SELECT ID, AGE, FIRST, LAST FROM employees;


--테이블 구조 확인

SELECT * FROM user_tab_columns

  WHERE table_name='EMPLOYEES';


--테이블 제약조건 확인

SELECT * FROM constraint_check

  WHERE table_name='EMPLOYEES';



2. 프로그램 구성

//DBConn.java

//Sample13.jsp -> 데이터베이스 연결, SELECT 쿼리, 결과 출력(웹페이지).

//TableStyle.css


3. 프로그램 소스 코드

//TableStyle.css

@CHARSET "UTF-8";

table#t01 {

    width: 100%; 

    background-color: #f1f1c1;

}

table#t01 tr:nth-child(odd) {

    background-color: #eee;

}

table#t01 tr:nth-child(even) {

    background-color: #fff;

}

table#t01 th {

    color: white;

    background-color: black;

}





//Sample13.jsp

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

    pageEncoding="UTF-8"%>

<%@ page import="java.sql.*" %>

<%@ page import="com.test.*" %>

<%

StringBuilder sb = new StringBuilder();

Connection conn = null;

PreparedStatement pstmt = null;

try {

conn = DBConn.getConnection();


//SELECT 쿼리 실행 및 결과 출력(웹페이지) 테스트

//SELECT ID, AGE, FIRST, LAST FROM employees;

String sql = String.format("SELECT ID, AGE, FIRST, LAST FROM employees");

pstmt = conn.prepareStatement(sql);

//데이터 바인딩 과정 추가

ResultSet rs = pstmt.executeQuery();

while(rs.next()) {

//웹페이지 동적 생성 과정 추가 -> Table 태그

sb.append(String.format("<tr>\r\n"));

sb.append(String.format("<td>%s</td>", rs.getString("id")));

sb.append(String.format("<td>%s</td>", rs.getString("age")));

sb.append(String.format("<td>%s</td>", rs.getString("first")));

sb.append(String.format("<td>%s</td>\r\n", rs.getString("last")));

sb.append(String.format("</tr>\r\n"));

}

rs.close();

}catch(Exception e){

e.printStackTrace();

}finally{

try {

if (pstmt != null) {

pstmt.close();

}

}catch(Exception e){

}

DBConn.close();

}

%>    

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>


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


</head>

<body>

<div>

<h1>회원명단</h1>

<table id="t01">

<tr>

<th>ID</th><th>AGE</th><th>FIRST</th><th>LAST</th>

</tr>

<!-- 

<tr>

<td>200</td><td>20</td><td>hong</td><td>gildong</td>

</tr>

-->

<%=sb.toString()%> 

</table>


</div>

</body>

</html>




//요청주소

http://localhost:8090/프로젝트이름/Sample13.jsp


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

회원의 정보(id, age, first, last) 입력 받아서 데이터베이스 저장 (INSERT 쿼리)

-> 입력폼 구성 필요. <form>, <input>, submit 버튼

-> 사용자가 입력한 자료를 서버에 전송 및 수신하는 과정 필요.


1. 데이터베이스 준비

CREATE TABLE employees (

 id NUMBER NOT NULL, --PK, 필수 항목

 first VARCHAR2(255) NOT NULL, --필수 항목

 last VARCHAR2(255),

 age NUMBER

);


ALTER TABLE employees

ADD CONSTRAINT employees_id_pk PRIMARY KEY(id);

 

INSERT INTO employees (id,age,first,last) VALUES (100, 18, 'Zara', 'Ali');

INSERT INTO employees (id,age,first,last) VALUES (101, 25, 'Mahnaz', 'Fatma');

INSERT INTO employees (id,age,first,last) VALUES (102, 30, 'Zaid', 'Khan');

INSERT INTO employees (id,age,first,last) VALUES (103, 28, 'Sumit', 'Mittal');

COMMIT;



--테이블 존재 확인

SELECT * FROM user_tables;


--데이터 확인

SELECT ID, AGE, FIRST, LAST FROM employees;


--테이블 구조 확인

SELECT * FROM user_tab_columns

  WHERE table_name='EMPLOYEES';


--테이블 제약조건 확인 (테이블명은 대문자로 표기)

SELECT * FROM constraint_check

  WHERE table_name='EMPLOYEES';




2. 프로그램 구성

//DBConn.java

//Sample14InsertForm.jsp -> 입력 폼 구성 페이지. submit 액션 추가.

//Sample14Insert.jsp -> 데이터 수신, 데이터베이스 연결, INSERT 쿼리, 결과 출력(웹페이지).


3. 프로그램 소스 코드

//Sample14InsertForm.jsp (실행 페이지)

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

    pageEncoding="UTF-8"%>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>


<script type="text/javascript">

window.onload=function() {

var myForm = document.getElementById("myForm");

var id = document.getElementById("id");

var age = document.getElementById("age");

var first = document.getElementById("first");

var last = document.getElementById("last");

var errorMsg = document.getElementById("errorMsg");

document.getElementById("myForm").onsubmit=function() {

//문제)

//데이터 검사 과정 추가 -> 메시지 출력 -> return false;

if(id.value ==""){

errorMsg.innerHTML = "ID를 채워야 합니다.";

return false;

}

if (id.value.match(/[^0-9]/)) {

errorMsg.innerHTML="ID는 숫자만 사용해야 합니다.";

return false;

}

if(first.value ==""){

errorMsg.innerHTML = "FIRST를 채워야 합니다.";

return false;

}

if(age.value.match(/[^0-9]/)){

errorMsg.innerHTML="AGE는 숫자만 사용해야 합니다.";

return false;

}

//서브밋 액션 처리

return true;

};

};


</script>


</head>

<body>

<div>

<%-- 회원 정보(id, age, first, last) 입력 폼 페이지 --%>

<h1>회원 정보</h1>

<form action="Sample14Insert.jsp" method="post" id="myForm">

<table>

<tr>

<th>ID*</th>

<td>

<!-- 

name="" 식별자는 JSP 프로그램과 연동

id="" 식별자는 자바스크립트와 연동

-->

<input type="text" name="id" id="id"> (숫자 전용)

</td>

</tr>

<tr>

<th>FIRST*</th>

<td>

<input type="text" name="first" id="first">

</td>

</tr>

<tr>

<th>LAST</th>

<td>

<input type="text" name="last" id="last">

</td>

</tr>

<tr>

<th>AGE</th>

<td>

<input type="text" name="age" id="age"> (숫자 전용)

</td>

</tr>

<tr>

<th></th>

<td>

<input type="submit" value="회원추가">

<span id="errorMsg" style="color:red;"></span>

</td>

</tr>

</table>

</form>

</div>

</body>

</html>







//Sample04Insert.jsp (브라우저에서 직접 요청하지 않는다)

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

    pageEncoding="UTF-8"%>

<%@ page import="java.sql.*" %>

<%@ page import='com.test.*' %>    

<%

//데이터 수신 과정 추가 (한글 데이터->인코딩 추가)

request.setCharacterEncoding("UTF-8");

String id = request.getParameter("id");

String first = request.getParameter("first");

String last = request.getParameter("last");

String age = request.getParameter("age");


StringBuilder sb = new StringBuilder();

Connection conn = null;

PreparedStatement pstmt = null;

int result = 0;

try {

conn = DBConn.getConnection();

String sql = String.format("INSERT INTO employees (id,first,last,age) VALUES (?, ?, ?, ?)");

pstmt = conn.prepareStatement(sql);

//데이터 바인딩 과정 추가

pstmt.setInt(1, Integer.parseInt(id));

pstmt.setString(2, first);

pstmt.setString(3, last);

pstmt.setString(4, age); //NULL 값 대비 setString() 메소드 사용

result = pstmt.executeUpdate();


}catch(Exception e){

e.printStackTrace();

}finally{

try {

if (pstmt != null) {

pstmt.close();

}

}catch(Exception e){

}

DBConn.close();

}


sb.append(String.format("%d개의 행이 삽입되었습니다.", result));



%>    

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

</head>

<body>

<div>

<%-- 회원 정보 입력 액션 페이지 --%>

<%=sb.toString()%>

</div>

</body>

</html>



//요청주소

http://localhost:8090/프로젝트이름/Sample14InsertForm.jsp

-> 회원 추가가 끝난 후에서 결과 페이지(Sample14Insert.jsp)에서 새로고침(F5) 액션을 수행하게 되면 입력 액션이 반복되는 문제가 발생한다.

-> Sample14Insert.jsp 페이지는 사용자에게 보여지지 않는 페이지로 만들어야 한다.

-> 강제 페이지 전환 액션 필요. 출력 페이지로 전환.

-> response.sendRedirect("페이지주소");




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


'JSP' 카테고리의 다른 글

05일차_성적관리1차  (1) 2015.06.22
04일차_회원관리1차  (0) 2015.06.22
02일차_데이터송수신  (1) 2015.06.22
01일차_JSP실행구조, 스크립트요소  (0) 2015.06.22
StudentInsert  (0) 2015.05.17
블로그 이미지

알 수 없는 사용자

,