Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Archives
Today
Total
관리 메뉴

Everything has an expiration date

[SpringMVC] 20240115 [프로그램 소스] 본문

[Spring MVC]/Program source (Spring MVC)

[SpringMVC] 20240115 [프로그램 소스]

Jelly-fish 2024. 1. 15. 15:28

SpringMVCStudy

 

EmployeeList.jsp (메인 화면)

 

[ filter 적용하기 ]

 

web.xml 에, `CharacterEncodingFilter` 필터를 등록한다.
<!-- check~!!! -->
<!-- 필터 등록 → 인코딩 필터 등록 → CharacterEncodingFilter -->
<filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

    <!-- 필터 설정 → 필터 객체에 파라미터 초기값 설정 -->
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/</url-pattern>	<!-- 어떤 요청이든 다 필터가 작용하도록 처리 『/』 -->
</filter-mapping>

   


     ▶ filter 객체 (`CharcterEncodingFilter`) 가져오기 

<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

     

     ▶ filter 설정 `<init-param>` - UTF-8로 설정.

<!-- 필터 설정 → 필터 객체에 파라미터 초기값 설정 -->
<init-param>
    <param-name>encoding</param-name>
    <param-value>UTF-8</param-value>
</init-param>

 

     ▶ 클라이언트가 어떤 Url 을 요청했을 때 필터를 적용시킬 것인지 설정하기. (mapping)

          (`/*`) → 어떤 요청(request)이 들어오든 모두 필터를 적용시키도록 한다.

<filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <!-- 어떤 요청이든 다 필터가 작용하도록 처리 『/』 -->
    <url-pattern>/*</url-pattern>	
</filter-mapping>

[ View 페이지에 보여질 텍스트에, format 형식 지정하기 ]

 

① View 페이지에서 `taglib` 을 통해 CDN 방식으로 format 을 불러온다.

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

② View 페이지에서 특정 format 형식을 지정할 텍스트에 `<fmt: >` 태그를 작성한다.

 

  • `groupingUsed="true"` : 숫자 세 자리당 쉼표를 붙여주는 옵션 (구두점) 속성이다. (10,000)

 

원래 표시해야 했던 값인 `${employee.basicPay }` 를 

`<fmt:formatNumber>` 태그의 value 속성으로 넣어준다.

`<fmt:formatNumber value="${employee.basicPay }">` 

EmployeeList.jsp
<%-- <td>${employee.basicPay }</td> --%>
<td>
    <fmt:formatNumber value="${employee.basicPay }"
    groupingUsed="true"></fmt:formatNumber>
</td>

 

format 지정 전 `4000000` (사백 만 원)

<td>${employee.basicPay }</td>

 

format 지정 후 `4,000,000` (사백 만 원, 숫자 콤마가 세 자리 단위로 들어간 것을 확인.)

<td>
    <fmt:formatNumber value="${employee.basicPay }"
    groupingUsed="true"></fmt:formatNumber>
</td>

 


Mvc04


 

   #11. RegionDAO.java 
/*
 *   #11. EmployeeDAO.java
 *   - 데이터베이스 액션 처리 클래스
 *   - 지역 데이터 CRUD 액션
 *     (Create / Read / Update / Delete)
 *   - Connection 객체에 대한 의존성 주입을 위한 준비
 *     -> 인터페이스 형태의 속성 구성(dataSource)
 *     -> Setter 구성
 */

package com.test.mvc;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import javax.sql.DataSource;

public class RegionDAO implements IRegionDAO
{
	DataSource dataSource;
	
	public void setdataSource(DataSource dataSource)
	{
		this.dataSource = dataSource;
	}

	@Override
	public ArrayList<Region> list() throws SQLException
	{
		Connection conn = dataSource.getConnection();
		
		ArrayList<Region> lists = new ArrayList<Region>();
		
		String sql = "SELECT REGIONID, REGIONNAME, DELCHECK "
				+   " FROM REGIONVIEW "
				+   " ORDER BY REGIONID";
		
		PreparedStatement pstmt = conn.prepareStatement(sql);
		
		ResultSet rs = pstmt.executeQuery();
		
		while(rs.next())
		{
			Region region = new Region();
			region.setRegionId(rs.getString("REGIONID"));
			region.setRegionName(rs.getString("REGIONNAME"));
			region.setDelCheck(rs.getInt("DELCHECK"));
			
			lists.add(region);
			
		}
		
		rs.close();
		pstmt.close();
		conn.close();
		
		return lists;
	}

	@Override
	public int add(Region region) throws SQLException
	{
		int result = 0;
		
		Connection conn = dataSource.getConnection();
		
		String sql = "INSERT INTO REGION(REGIONID, REGIONNAME) "
				+   " VALUES(REGIONSEQ.NEXTVAL, ?)";
		
		PreparedStatement pstmt = conn.prepareStatement(sql);
		
		pstmt.setString(1, region.getRegionName());
		
		result = pstmt.executeUpdate();
		
		pstmt.close();
		conn.close();
		
		return result;
	}

	@Override
	public int remove(String regionId) throws SQLException
	{
		int result = 0;
		
		Connection conn = dataSource.getConnection();
		
		String sql = "DELETE "
				+   " FROM REGION "
				+   " WHERE REGIONID = ?";
		
		PreparedStatement pstmt = conn.prepareStatement(sql);
		
		pstmt.setInt(1, Integer.parseInt(regionId));
		
		result = pstmt.executeUpdate();
		
		pstmt.close();
		conn.close();
		
		return result;
	}

	@Override
	public int modify(Region region) throws SQLException
	{
		int result = 0;
		
		Connection conn = dataSource.getConnection();
		
		String sql = "UPDATE REGION"
				+   " SET REGIONNAME=?"
				+   " WHERE REGIONID=?";
		
		PreparedStatement pstmt = conn.prepareStatement(sql);
		
		pstmt.setString(1, region.getRegionName());
		pstmt.setInt(2, Integer.parseInt(region.getRegionId()));
		
		result = pstmt.executeUpdate();
		
		return result;
	}
	
	
}

   #12. PositionDAO.java 
package com.test.mvc;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import javax.sql.DataSource;

public class PositionDAO implements IPositionDAO
{
	DataSource datasource;
	
	public void setDatasource(DataSource datasource)
	{
		this.datasource = datasource;
	}

	@Override
	public ArrayList<Position> list() throws SQLException
	{
		Connection conn = datasource.getConnection();
		
		ArrayList<Position> lists = new ArrayList<Position>();
		
		String sql = "SELECT POSITIONID, POSITIONNAME, MINBASICPAY, DELCHECK "
				+   " FROM POSITIONVIEW"
				+   " ORDER BY POSITIONID";
		
		PreparedStatement pstmt = conn.prepareStatement(sql);
		
		ResultSet rs = pstmt.executeQuery();
		
		while(rs.next())
		{
			Position position = new Position();
			
			position.setPositionId(rs.getString("POSITIONID"));
			position.setPositionName(rs.getString("POSITIONNAME"));
			position.setMinBasicPay(rs.getInt("MINBASICPAY"));
			position.setDelCheck(rs.getInt("DELCHECK"));
			
			lists.add(position);
		}
		
		rs.close();
		pstmt.close();
		conn.close();
		
		return lists;
	}

	@Override
	public int add(Position position) throws SQLException
	{
		int result = 0;
		
		Connection conn = datasource.getConnection();
		
		String sql = "INSERT INTO POSITION(POSITIONID, POSITIONNAME, MINBASICPAY) "
				+   " VALUES(POSITIONSEQ.NEXTVAL, ?, ?)";
		
		PreparedStatement pstmt = conn.prepareStatement(sql);
		
		pstmt.setString(1, position.getPositionName());
		pstmt.setInt(2, position.getMinBasicPay());
		
		result = pstmt.executeUpdate();
		
		pstmt.close();
		conn.close();
		
		return result;
	}

	@Override
	public int remove(String positionId) throws SQLException
	{
		int result = 0;
		
		Connection conn = datasource.getConnection();
		
		String sql = "DELETE "
				+   " FROM POSITION"
				+   " WHERE POSITIONID=?";
		
		PreparedStatement pstmt = conn.prepareStatement(sql);
		
		pstmt.setInt(1, Integer.parseInt(positionId));
		
		result = pstmt.executeUpdate();
		
		pstmt.close();
		conn.close();
		
		return result;
	}

	@Override
	public int modify(Position position) throws SQLException
	{
		int result = 0;
		
		Connection conn = datasource.getConnection();
		
		String sql = "UPDATE POSITION "
				+   " SET POSITIONNAME=?, MINBASICPAY=? "
				+   " WHERE POSITIONID=?";
		
		
		PreparedStatement pstmt = conn.prepareStatement(sql);
		
		pstmt.setString(1, position.getPositionName());
		pstmt.setInt(2, position.getMinBasicPay());
		pstmt.setInt(3, Integer.parseInt(position.getPositionId()));
		
		result = pstmt.executeUpdate();
		
		pstmt.close();
		conn.close();
		
		return result;
	}
}

 

   #13. EmployeeMenu.jsp 
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%
	request.setCharacterEncoding("UTF-8");
	String cp = request.getContextPath();
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>EmployeeMenu.jsp</title>
<link rel="stylesheet" type="text/css" href="<%=cp %>/css/menuStyle.css"> <!-- menuStyle이라는 css만들기로함 -->
</head>
<body>
<!------------------------------
#13. EmployeeMenu.jsp
     - 메인 메뉴 페이지 구성
     - 로그아웃 기능 포함
------------------------------->     

<div id="menu">
	<ul>
		<li>
			<a href="" class="menu">직원 관리</a>
		</li>
		<li>
			<a href="" class="menu">지역 관리</a>
		</li>
		<li>
			<a href="" class="menu">부서 관리</a>
		</li>
		<li>
			<a href="" class="menu">직위 관리</a>
		</li>
		
		<li>
			<a href="" class="menu">로그 아웃</a>
		</li>

	</ul>
</div>

</body>
</html>

   #14. menuStyle.css

 

@charset "UTF-8";
/*================================
	#14. menuStyle.css
	     - 메뉴 스타일 구성
================================*/

ul
{
	list-style-type: none;
	margin: 0;
	padding: 0;
	overflow: hidden;
}
li
{
	width: 20%;
	float: left;
}

a.menu:link, a.menu:visited
{
	display: block;
	font-weight: bold;
	color: #ffffff;
	background-color: #008000;
	text-align: center;
	padding: 4px;
	text-decoration: none;
	text-transform: uppercase;
	height: 30px;
	font-size: 14pt;
}


a.menu:hover, a.menu:active
{
	background-color: #ffffff;
	color: #008000;
	border: 2px solid #008000;
	border-radius: 5px;
	height: 26px;
}

   #15. EmployeeList.jsp 

 

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%
	request.setCharacterEncoding("UTF-8");
	String cp = request.getContextPath();
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>EmployeeList.jsp</title>
<link rel="stylesheet" type="text/css" href="<%=cp %>/css/main.css">
<!-- view안에 넣어버리면 경로가 달라질 수도 있으니 cp 경로 추가해 준다. -->

</head>
<body>

<!--===========================================================
	#15. EmployeeList.jsp
	     - 직원 리스트 출력 페이지
	     - 관리자가 접근하는 직원 데이터 출력 페이지
	       (일반 직원이 접근하는 직원 데이터 출력 페이지는
	        EmpList.jsp 로 구성할 예정)
============================================================-->

<div>
	<!-- 메뉴 영역 -->
	<div>
		<c:import url="EmployeeMenu.jsp"></c:import>
	</div>
	
	<!-- 콘텐츠 영역 -->
	<div id="content">
		<h1>[ 직원 관리 (관리자 전용)]</h1>
		<hr />
		
		<div>
			<form>
				<input type="button" value="직원 추가" class="btn" />
			</form>
		</div>
		<br /><br />
		<!------------------------------------------------------ 
		EMPLOYEEID NAME SSN BIRTHDAY LUNAR LUNARNAME TELEPHONE          
		DEPARTMENTID DEPARTMENTNAME POSITIONID POSITIONNAME
		REGIONID REGIONNAME BASICPAY EXTRAPAY PAY GRADE
		------------------------------------------------------->
		
		<table id="customers" class="table">
			<tr>
				<!-- 항목 15 EA -->
				<th>번호</th>
				<th>이름</th>
				<th>주민번호</th>
				<th>생년월일</th>
				<th>양음력</th>
				<th>전화번호</th>
				<th>지역</th>
				<th>부서</th>
				<th>직위</th>
				<th>기본급</th>
				<th>수당</th>
				<th>급여</th>
				<th>등급</th>
				<th>수정</th>
				<th>삭제</th>
			</tr>
			
			<c:forEach var="employee" items="${employeeList }">
				<tr>
					<td>${employee.employeeId }</td>
					<td>${employee.name }</td>
					<td>${employee.ssn }-*******</td>
					<td>${employee.birthday }</td>
					<td>${employee.lunarName }</td>
					<td>${employee.telephone }</td>
					<td>${employee.regionName }</td>
					<td>${employee.departmentName }</td>
					<td>${employee.positionName }</td>
					
					<%-- <td>${employee.basicPay }</td> --%>
					<!-- groupingUsed=true : 세 자리 당 쉼표. 구두점. (10,000) -->
					<td>
						<fmt:formatNumber value="${employee.basicPay }"
						groupingUsed="true"></fmt:formatNumber>
					</td>
					
					
					<%-- <td>${employee.extraPay }</td> --%>
					<td>
						<fmt:formatNumber value="${employee.extraPay }"
						groupingUsed="true"></fmt:formatNumber>
					</td>
					
					
					<td>${employee.pay }</td>
					<td>
						<fmt:formatNumber value="${employee.pay }"
						groupingUsed="true"></fmt:formatNumber>
					</td>
					
					
					
					<%-- <td>${employee.grade }</td> --%>
					<td>
						${employee.grade == 0 ? "관리자" : "일반사원"}
					</td>
					
					<td><button type="button" class="btn">수정</button></td>
					<td><button type="button" class="btn">삭제</button></td>
				</tr>
			</c:forEach>
			
			
			<!-- 
			<tr>
				<td>1</td>
				<td>고길동</td>
				<td>620527</td>
				<td>1962-05-27</td>
				<td>양력</td>
				<td>010-1123-3344</td>
				<td>서울</td>
				<td>개발부</td>
				<td>사원</td>
				<td>1,500,500</td>
				<td>1,500,500</td>
				<td>3,000,000</td>
				<td>관리자</td>
				<td><button type="button" class="btn">수정</button></td>
				<td><button type="button" class="btn">삭제</button></td>
			</tr>
			
			<tr>
				<td>2</td>
				<td>도우너</td>
				<td>861227</td>
				<td>1986-12-27</td>
				<td>음력</td>
				<td>010-3306-4499</td>
				<td>서울</td>
				<td>개발부</td>
				<td>사원</td>
				<td>1,500,500</td>
				<td>1,500,500</td>
				<td>3,000,000</td>
				<td>일반사원</td>
				<td><button type="button" class="btn">수정</button></td>
				<td><button type="button" class="btn">삭제</button></td>
			</tr>
			 -->
			
		</table>
	</div>
	
	회사 소개 및 어플리케이션 소개 영역
	<div id="footer">
	</div>
	
</div>

</body>
</html>

① EmployeeController.java 컨트롤러에서 전달한 `employeeList`를 수신

 

[EmployeeController.java]

@Override
	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception
	{
		// 액션 코드
		
		ModelAndView mav = new ModelAndView();
		
		ArrayList<Employee> employeeList = new ArrayList<Employee>();
		
		try
		{
			employeeList = dao.list();
			
			mav.addObject("employeeList", employeeList);
		
			mav.setViewName("/WEB-INF/view/EmployeeList.jsp");
			
			
		} catch (Exception e)
		{
			System.out.println(e.toString());
		}
		
		return mav;
		
	}

② c 태그 `<c:forEach var="employee" items="${employeeList}">` 를 이용하여
    화면에 레코드를 하나씩 반복하여 보여준다.
<c:forEach var="employee" items="${employeeList }">
				<tr>
					<td>${employee.employeeId }</td>
					<td>${employee.name }</td>
                            .... (생략)
				</tr>
</c:forEach>

 


   #16. main.css 
@charset "UTF-8";

/* main.css */

*
{
	font-family: 맑은 고딕;
	color: #343;
}

body, p, div, span, input, table, th, td, select
{
	font-size: 18px;
}

.control
{
	border: 1px solid gray;
	border-radius: 3px;
}

.table
{
	border-collapse: collapse;
	width: 100%;
}

.table th, .table td
{
	border: 1px solid gray;
	border-left: 0px;
	border-right: 0px;
	padding: 3px;
	line-height: 150%;
}

.table th
{
	font-weight: bold;
	background-color: #EEE;
}

.btn
{
	font-weight: bold;
}

.btn:hover
{
	color: white;
	background-color: #787;
}

.btn:active 
{
	color: orange;	
}

   #17. EmployeeListController.java
/*===================================================
  #17. EmployeeListController.java
       - 사용자 정의 컨트롤러 클래스
       - 회원 리스트 페이지 요청에 대한 액션 처리.
       - DAO 객체에 대한 의존성 주입(DI)를 위한 준비
         → 인터페이스 형태의 자료형을 속성으로 구성
         → setter 메소드 준비

=====================================================*/
package com.test.mvc;

import java.util.ArrayList;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

//※ Spring 의 『Controller』 인터페이스를 구현하는 방법을 통해
//사용자 정의 컨트롤러 클래스를 구성한다.
//cf. Controller Annotation 활용
public class EmployeeListController implements Controller
{
	
	// 주요 속성 구성
	// → 인터페이스 형태의 자료형을 속성으로 구성
	
	private IEmployeeDAO dao;
	
	// setter 구성
	public void setDao(IEmployeeDAO dao)
	{
		this.dao = dao;
	}
	
	// 요청을 핸들링 하겠다는 메소드.
	@Override
	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception
	{
		// 액션 코드
		
		ModelAndView mav = new ModelAndView();
		
		ArrayList<Employee> employeeList = new ArrayList<Employee>();
		
		try
		{
			employeeList = dao.list();
			
			mav.addObject("employeeList", employeeList);
		
			mav.setViewName("/WEB-INF/view/EmployeeList.jsp");
			
			
		} catch (Exception e)
		{
			System.out.println(e.toString());
		}
		
		return mav;
		
	}

}

   #18. web.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>Mvc00</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>

	<!-- #18. web.xml -->
	
	<!-- ※ Spring MVC Framework 등록 -->
	<!--    → Front Controller 등록 -->
	<!--    → DispatcherServlet 객체 등록 -->

	<servlet>
		<servlet-name>dispatcher</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
	</servlet>
	
	<servlet-mapping>
		<servlet-name>dispatcher</servlet-name>
		<url-pattern>*.action</url-pattern>
	</servlet-mapping>
	
	<!-- check~!!! -->
	<!-- 필터 등록 → 인코딩 필터 등록 → CharacterEncodingFilter -->
	<filter>
		<filter-name>encodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		
		<!-- 필터 설정 → 필터 객체에 파라미터 초기값 설정 -->
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
		
	</filter>
	
	<filter-mapping>
		<filter-name>encodingFilter</filter-name>
		<url-pattern>/</url-pattern>	<!-- 어떤 요청이든 다 필터가 작용하도록 처리 『/』 -->
	</filter-mapping>
	
	
	
	

</web-app>

   #19. dispatcher-servlet.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
			http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
			http://www.springframework.org/schema/context
			http://www.springframework.org/schema/context/spring-context-3.0.xsd">
	<context:component-scan base-package="org.springframework.samples.petclinic.web" />
	
	<!-- ※ 사용자 정의 Controller 객체 등록 및 URL 매핑 주소 등록 -->
	<!--    - 『name=""』 속성에 매핑 주소를 등록한다. -->
	<!--       이 과정에서 Front Controller 가 갖고있는 확장자의 형태로 구성한다. -->
	<!--    - 『class=""』 속성은 -->
	<!--       Controller 객체의 패키지 경로가 포함된 클래스 이름을 등록한다. -->
	
	<!-- DataSource 등록 → SimpleDriverDataSource -->
	<bean id="localDataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
		<property name="driverClass" value="oracle.jdbc.driver.OracleDriver"></property>
		<property name="url" value="jdbc:oracle:thin:@211.238.142.170:1521:xe"></property>
		<property name="username" value="scott"></property>
		<property name="password" value="tiger"></property>
	</bean>
	
	<bean id="remoteDataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
		<property name="driverClass" value="oracle.jdbc.driver.OracleDriver"></property>
		<property name="url" value="jdbc:oracle:thin:@211.238.142.171:1521:xe"></property>
		<property name="username" value="scott"></property>
		<property name="password" value="tiger"></property>
	</bean>

	
	<!-- DAO 등록 -->
	<bean id="employeeDAO" class="com.test.mvc.EmployeeDAO">
		<property name="dataSource" ref="localDataSource"></property>
	</bean>
	
	<!-- Employee 관련 Controller 등록 -->
	<bean name="/employeelist.action" class="com.test.mvc.EmployeeListController">
		<property name="dao" ref="employeeDAO"></property>
	</bean>
	
	<bean name="/employeeinsertform.action" class="com.test.mvc.EmployeeInsertFormController">
		<property name="dao" ref="employeeDAO"></property>
	</bean>
	
	<bean id="departmentDAO" class="com.test.mvc.DepartmentDAO">
		<property name="dataSource">
			<ref bean="localDataSource" />
		</property>
	</bean>
	
	<bean id="regionDAO" class="com.test.mvc.RegionDAO">
		<property name="dataSource">
			<ref bean="localDataSource" />
		</property>
	</bean>
	
	
	
	
</beans>

   #20. employeelist.action  - 비어있는 파일

   #21. EmployeeInsertForm.jsp

 

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%
	request.setCharacterEncoding("UTF-8");
	String cp = request.getContextPath();
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>EmployeeInsertForm.jsp</title>
<link rel="stylesheet" type="text/css" href="<%=cp %>/css/main.css">
<link rel="stylesheet" type="text/css" href="<%=cp %>/css/jquery-ui.css">

<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
<script type="text/javascript" src="<%=cp %>/js/jquery-ui.js"></script>

<script type="text/javascript">

	// 입력창에 커서를 올렸을 때, 캘린더가 나오는 기능
	// → 『Datepicker』

	// $();
	// jquery();
	// $(document).ready();
	$(document).ready(function()
	{
		// jQuery-UI 캘린더를 불러오는 함수 처리(datepicker())
		
		// 【『캘린더 값을 적용할 textbox ID』.datepicker()】
		$("#birthday").datepicker(
		{
			dateFormat: "yy-mm-dd"
			, changeMonth: true
			, changeYear: true
			// List로 쫙 뿌려준다~!!! 
			// 연 / 월 ~!!!
			
		});
		
	});

</script>

</head>
<body>
<!--==================================
	#21. EmployeeInsertForm.jsp
	     - 직원 데이터 입력 페이지
	     - 관리자만 접근 허용
=====================================-->

<div>
	<!-- 메뉴 영역 -->
	<div>
		<c:import url="EmployeeMenu.jsp"></c:import>
	</div>
	
	<!-- 콘텐츠 영역 -->
	
	<div id="content">
	
		<h1>[ 직원 추가 ]</h1>
		<hr>
		
		<form action="employeeinsert.action" method="post" id="employeeForm">
			<table>
				<tr>
					<th>이름</th>
					<td>
						<input type="text" id="name" name="name" placeholder="이름">
					</td>
				</tr>
				<tr>
					<th>주민번호</th>
					<td>
						<input type="text" id="ssn1" name="ssn1" style="width: 100px;"
						placeholder="앞 6자리">
						<input type="password" id="ssn2" name="ssn2" style="width: 110px;"
						placeholder="뒤 7자리">
					</td>
				</tr>
				<tr>
					<th>생년월일</th>
					<td>
						<input type="text" id="birthday" name="birthday" placeholder="생년월일">
					</td>
				</tr>
				<tr>
					<th>양/음력</th>
					<td>
						<input type="radio" value="0" name="lunar" id="lunar0" checked="checked">
						<label for="lunar0">양력</label>
						<input type="radio" value="1" name="lunar" id="lunar1">
						<label for="lunar1">음력</label>
					</td>
				</tr>
				<tr>
					<th>전화번호</th>
					<td>
						<input type="tel" id="telephone" name="telephone" placeholder="전화번호">
					</td>
				</tr>
				<tr>
					<th>지역</th>
					<td>
						<select id="regionId" name="regionId">
						
							<c:forEach var="region" items="${regionList }">
								<option value="${region.regionId }">${region.regionName }</option>
							</c:forEach>
							
							<%--  ★ ID 를 뿌렸어야지!!! ★
							<c:forEach var="i" begin="0" end="${regionList.size()-1 }" step="1">
								<option value="${i+1 }">${regionList[i].regionName }</option>
							</c:forEach>
							 --%>
						
							<!-- 
							<option value="1">관악구</option>
							<option value="2">마포구</option>
							<option value="3">은평구</option>
							<option value="4">도봉구</option>
							 -->
						</select>
					</td>
				</tr>
				
				
				<tr>
					<th>부서</th>
					<td>
						<select id="departmentId" name="departmentId">
						
							<c:forEach var="department" items="${departmentList }">
								<option value="${department.departmentId }">${department.departmentName }</option>
							</c:forEach>
							
							<%--  ★ ID 를 뿌렸어야지!!! ★
							<c:forEach var="i" begin="0" end="${departmentList.size()-1 }" step="1">
								<option value="${i+1 }">${departmentList[i].departmentName }</option>
							</c:forEach>
							 --%>
						 
							<!-- 
							<option value="1">축구부</option>
							<option value="2">야구부</option>
							<option value="3">수영부</option>
							<option value="4">원예부</option>
							<option value="5">독서부</option>
							 -->
							
						</select>
					</td>
				</tr>
				<tr>
					<th>직위</th>
					<td>
						<select id="positionId" name="positionId">
						
						<c:forEach var="position" items="${positionList }">
							<option value="${position.positionId }">${position.positionName }</option>
						</c:forEach>
						
							<%-- ★ ID 를 뿌렸어야지!!! ★
							<c:forEach var="i" begin="0" end="${positionList.size()-1 }" step="1">
								<option value="${i+1 }">${positionList[i].positionName }</option>
							</c:forEach>
							 --%>
						
							<!-- 
							<option value="1">팀장</option>
							<option value="2">기술고문</option>
							<option value="3">팀원</option>
							<option value="4">탈영병</option>
							<option value="5">엑스맨</option>
							 -->
						</select>
					</td>
				</tr>
				
				<tr>
					<th>기본급</th>
					<td>
						<input type="text" id="basicPay" name="basicPay">
						(최소 기본급 <span id="minBasicPay"
						 style="color: red; font-weight: bold;">0</span>원)
					</td>
				</tr>
				<tr>
					<th>수당</th>
					<td>
						<input type="text" id="extraPay" name="extraPay">
					</td>
				</tr>
				
				<tr>
					<td colspan="2" align="center">
						<br><br>
						
						<button type="button" class="btn" id="submitBtn">직원 추가</button>
						<button type="button" class="btn" id="listBtn">직원 리스트</button>
						
					</td>
				</tr>
				
				
			</table>
		</form>		
	
	</div>	
	
	<!-- 회사 소개 및 어플리케이션 소개 영역 -->
	<div id="footer">
	</div>
	
</div>


</body>
</html>

   #22. EmployeeInsertFormController.java

 

/*==========================================================
  #22. EmployeeInsertFormController.java
       - 사용자 정의 컨트롤러 클래스
       - 회원 데이터 입력 폼 페이지 요청에 대한 액션 처리.
       - DAO 객체에 대한 의존성 주입(DI)를 위한 준비
         → 인터페이스 형태의 자료형을 속성으로 구성
         → setter 메소드 준비
============================================================*/

package com.test.mvc;

import java.util.ArrayList;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

// ※ Spring 의 『Controller』 인터페이스를 구현하는 방법을 통해
//    사용자 정의 컨트롤러 클래스를 구성한다.
//    cf. Controller Annotation 활용
public class EmployeeInsertFormController implements Controller
{
	// 인터페이스 형태의 속성 구성
	private IEmployeeDAO dao;
	
	// setter 구성
	public void setDao(IEmployeeDAO dao)
	{
		this.dao = dao;
	}
	
	//***********************************************************************
	// IEmployeeDAO 를 implements 하는 EmployeeDAO 에
	// 부서, 직위, 지역 리스트를 반환하는 메소드가 없다면
	// 총 3개 (Department, Position, Region) 의 객체를 설정해야 했을 것이다.
	//***********************************************************************
	

	// 요청을 핸들링 하겠다는 메소드.
	@Override
	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception
	{
		// 액션 코드
		
		ModelAndView mav = new ModelAndView();
		
		
		ArrayList<Region> regionList = new ArrayList<Region>();
		ArrayList<Department> departmentList = new ArrayList<Department>();
		ArrayList<Position> positionList = new ArrayList<Position>();
		
		try
		{
			regionList = dao.regionList();
			departmentList = dao.departmentList();
			positionList = dao.positionList();
			
			mav.addObject("regionList", regionList);
			mav.addObject("departmentList", departmentList);
			mav.addObject("positionList", positionList);
			
			mav.setViewName("WEB-INF/view/EmployeeInsertForm.jsp");
			
			
		} catch (Exception e)
		{
			System.out.println(e.toString());
		}
		
		
		

		
		return mav;
		
	}


	
}

 

 

공유폴더 - `jQueryUi` 다운로드 → 각각의 파일들 WebContent에 복사 붙여넣기.

 

dateFormat 을 Oracle Database 테이블에 넣을 때의 양식에 맞게 수정.

 

EmployeeInsertForm.jsp (javascript 단 `<script>`)
$(document).ready(function()
{
    // jQuery-UI 캘린더를 불러오는 함수 처리(datepicker())

    // 【『캘린더 값을 적용할 textbox ID』.datepicker()】
    $("#birthday").datepicker(
    {
        dateFormat: "yy-mm-dd"
        , changeMonth: true
        , changeYear: true
        // List로 쫙 뿌려준다~!!! 
        // 연 / 월 ~!!!

    });

});