Data Scientist 옌

매일 발전하는 IT문제해결사

국비지원교육 (22.01-22.07)/강의노트

22-04-22(금) 060일차 [HTML, JavaScript, JSP, XML] ID체크 팝업, XML 데이터 파싱, 설정 파일로서의 XML 활용

옌炎 2022. 6. 14. 14:42
728x90

수업내용


1교시 (09:30-10:20)

  • popup_idCheck.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>아이디 체크</title>
	<script type="text/javascript">
		
		function sendID() {
			// 부모 창
			window.parent.opener.document.kmemForm.kid.value=
			// 자식 창
			document.idform.id.value;
			
			// 자식창을 스스로 닫는다.
			window.self.close();
		}
	</script>
</head>

<body>
	<%
		String _kid = request.getParameter("kid");
		System.out.println("_kid >>> :  + _kid");
		
		boolean bool = false;
		
		if ("1234".equals(_kid)) {
			bool = true;
		}
		
		String returnMsg = "";
		String returnKid = "";
		if (!bool) {
			returnMsg = "사용 가능한 아이디 입니다.";
			returnKid = _kid;
		} else {
			returnMsg = "이미 사용 중인 아이디 입니다.";
			returnKid = "";
		}
	%>
	
	<form name="idform" method="POST" action="<%= request.getRequestURI() %>">
		<h4> <%= returnMsg %></h4>
		<%= returnKid %><br>
		
		<input type="hidden" name="id" value="<%= returnKid %>"><br>
		<input type="submit" value="확인" onClick="sendID()">
	</form>
</body>
</html>
  • popup_1.html
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>Insert title here</title>
	<script type="text/javascript">
	
		// 아이디 체크
		function idCheck() {
			
			console.log("idCheck 함수 진입");
			alert("idCheck 함수 진입");
			var idVal = document.getElementById("kid").value
			
			window.open("/KosMember/kos_script/popup_idCheck.jsp?kid=" + idVal,
					 "_blank" // "self" 면 팝업이 뜨지 않고 페이지에서 이동함
					,"left=500,top=400,width=300,hiehgt=300"
					,false);
		}
	</script>
</head>

<body>
	<div>
		<form   name="kmemForm" id="kmemForm"
				action="#"
				method="POST">
		<table border="1">
			<tr>
				<td colspan="2" align="center">
					<font size="4" style="color:Blue;">KOSMO 108기</font>
					<img src="/KosMember/img/img_mandoo/naruhodo.gif" width="25" height="25" alt="image">
				</td>
			</tr>
			<tr>
				<td class="mem">아이디</td>
				<td>
					<input type="text" name="kid" id="kid" placeholder="아이디 중복 체크" />
					<input type="button" name="kidbtn" id="kidbtn"
										 value="popup_아이디중복확인" onclick="idCheck()"/>
				</td>
			</tr>
			<tr>
				<td class="mem">아이디</td>
				<td>
					<input type="text" name="kid_1" id="kid_1" placeholder="Ajax로 해보기" />
					<input type="button" name="kidbtn_1" id="kidbtn_1" value="Ajax_아이디중복확인"/>
				</td>
			</tr>
			<tr>
				<td class="mem">패스워드</td>
				<td>
					<input type="text" name="kpw" id="kpw" placeholder="Ajax로 해보기" />
					<input type="button" value="Ajax_비밀번호확인" id="pwCheck"/>
				</td>
			</tr>
			<tr id="id9">
				<td colspan="2">
					<input type="button" value="보내기" onclick="kmemConfirm()"/>
					<input type="reset" value="취소" />
				</td>
			</tr>
		</table>
		</form>
	</div>
</body>
</html>

  • popup_idCheck.jsp ← “1234” 부분에 DB 연결해보기
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<!-- 커넥션 클래스 import -->
<%@ page import="a.b.c.common.KosConnectivity" %>

<!--  java.sql.* JDBC 클래스 import -->
<%@ page import="java.sql.Connection" %>
<%@ page import="java.sql.PreparedStatement" %>
<%@ page import="java.sql.ResultSet" %>

<!-- 깡통 클래스 import -->
<%@ page import="a.b.c.kos.mem.vo.MemVO" %>

<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>아이디 체크</title>
	<script type="text/javascript">
		
		function sendID() {
			// 부모 창
			window.parent.opener.document.kmemForm.kid.value=
			// 자식 창
			document.idform.id.value;
			
			// 자식창을 스스로 닫는다.
			window.self.close();
		}
	</script>
</head>

<body>
	<%
		String _kid = request.getParameter("kid");
		System.out.println("_kid >>> :  + _kid");
		
		MemVO mvo = null;
		mvo = new MemVO();
		mvo.setMid(_kid);
		
		boolean bool = false;
		
		// jdbc 연결 및 sql 사용학;
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rsRs = null;
		int nCnt = 0;
		
		conn = KosConnectivity.getConnection();
		String sqls = "SELECT COUNT(A.MNUM) NCNT FROM KOS_MEMBER A WHERE A.DELETEYN='Y' AND A.MID=?";
		pstmt = conn.prepareStatement(sqls);
		
		pstmt.clearParameters();
		pstmt.setString(1, mvo.getMid());
		rsRs = pstmt.executeQuery();
		
		if (rsRs != null) {
			while (rsRs.next()) {
				nCnt = rsRs.getInt(1);
				// nCnt = rsRs.getInt("NCNT"); // 컬럼 명,  컬럼 명 앨리어스
			}
		}
		
		if (nCnt == 1) {
			bool = true;
		}
		
		String returnMsg = "";
		String returnKid = "";
		if (!bool) {
			returnMsg = "사용 가능한 아이디 입니다.";
			returnKid = _kid;
		} else {
			returnMsg = "이미 사용 중인 아이디 입니다.";
			returnKid = "";
		}
	%>
	
	<form name="idform" method="POST" action="<%= request.getRequestURI() %>">
		<h4> <%= returnMsg %></h4>
		<%= returnKid %><br>
		
		<input type="hidden" name="id" value="<%= returnKid %>"><br>
		<input type="submit" value="확인" onClick="sendID()">
	</form>
</body>
</html>

2교시 (10:30-11:20)

  • OracleXmlTest_1.java
package a.b.c.test.xml;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;

public class OracleXmlTest_1 {
	
	// C:\00.KOSMO108\30.Web\eclipse_web_1_work\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\kosMember\kos_xml	
	public static final String XML_FILE_PATH = "C:\\00.KOSMO108\\30.Web\\eclipse_web_1_work\\.metadata\\.plugins\\org.eclipse.wst.server.core\\tmp0\\wtpwebapps\\KosMember\\kos_xml";
	// public static final String XML_FILE_PATH = "C:\\00.KOSMO108\\30.Web\\eclipse_web_1_work\\KosMember\\WebContent\\kos_xml";
	public static final String XML_PROLOG = "<?xml version='1.0' encoding='UTF-8'?>"; // 선언부
	
	public String getXml(final String tableName) throws Exception {
		
		System.out.println("String tableName >>> : " + tableName);
		
		Connection conn = null;
		Statement stmt = null;
		ResultSet rsRs = null;
		
		ResultSetMetaData resultMeta = null;
		int colCount = 0;
		StringBuffer strBuffer = new StringBuffer(XML_PROLOG);
		
		try {
			
			conn = DBPropertyConn.getConnection();
			stmt = conn.createStatement();
			rsRs = stmt.executeQuery("SELECT * FROM " + tableName);
			
			resultMeta = rsRs.getMetaData();
			
			colCount = resultMeta.getColumnCount();
			System.out.println(tableName + " 테이블 컬럼 카운트 >>> : " + colCount);
			
			strBuffer.append("\n");
			strBuffer.append("<" + tableName.toUpperCase() + ">");
			strBuffer.append("\n");
			
			while (rsRs.next()) {
				strBuffer.append("<" +  "ROW" + ">");
				for (int i=0; i < colCount; i++) {
					strBuffer.append("<" + resultMeta.getColumnName(i+1) + ">");
					strBuffer.append(rsRs.getString(i+1));
					strBuffer.append("</" + resultMeta.getColumnName(i+1) + ">");
					strBuffer.append("\n");
				}
				strBuffer.append("</" +  "ROW" + ">");
			}
			strBuffer.append("</" + tableName.toUpperCase() + ">");
			strBuffer.append("\n");
		} catch (SQLException e) {
			System.out.println(" getXML() : " + e);
		} finally {}
		
		return strBuffer.toString();
	}
	
	public static boolean xmlParse(String fileName, String xmlVal) {
		
		boolean bool = false;
		
		try {
			
			BufferedWriter bw = new BufferedWriter(
					new FileWriter(OracleXmlTest_1.XML_FILE_PATH + "/" + fileName.toLowerCase() + ".xml"));
			bw.write(xmlVal);
			bw.flush();
			bw.close(); // 무조건 닫아줘야 한다.
			
			bool = true;
			
		} catch(IOException e) {
			System.err.println(e);
		}
		return bool;
	}
	
	public boolean makeXml(final String tableName) {
		
		boolean bool = false;
		
		try {
			
			if (tableName.length() > 0) {
				
				final String fileName = tableName;
				
				String xmlVal = getXml(fileName);
				System.out.println("Oracle String Data를 xml로 생성 >>> : \n" + xmlVal);
				
				if (xmlVal !=null && xmlVal.length() > 0) {
					
					bool = OracleXmlTest_1.xmlParse(fileName, xmlVal);
					if (bool) {
						System.out.println(OracleXmlTest_1.XML_FILE_PATH + " 디렉토리에 " + fileName + ".xml 파일이 잘 생성되었습니다. ");
					} else {
						System.out.println(" 파일이 생성되지 않았습니다. ");
					}
				}
			} else {
				System.out.println("java OracleXmlTest_1 테이블 이름");
			}
		} catch (Exception e) {
			System.out.println("e.getMessage() >>> : " + e.getMessage());
		}
		
		return bool;
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try {
			Scanner sc = new Scanner(System.in);
			System.out.println("테이블 이름을 KEY-IN 하시오 >>> : " );
			String tableName = sc.next();
			
			OracleXmlTest_1 ot_1 = new OracleXmlTest_1();
			if(tableName.length() > 0){		
				boolean bool = ot_1.makeXml(tableName);
			}else{	
				System.out.println("java OracleXmlTest_1 테이블이름 ");
			}				
		}catch(Exception e){
			System.out.println("e.getMessage() >>> : " + e.getMessage());
		}
	}
}
  • test_xml_table.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
   
<%@ page import = "java.io.BufferedReader" %>
<%@ page import = "java.io.InputStreamReader" %>
<%@ page import = "java.net.URL" %>

<%@ page import = "a.b.c.test.xml.OracleXmlTest_1" %>
<%

	String tablename = request.getParameter("tablename");
	OracleXmlTest_1 oxt_1 = new OracleXmlTest_1();
	boolean bool = oxt_1.makeXml(tablename);
	//bool = false;
	if (!bool) return;

	String strHtml = "";
	String strLine = "";
	String xmlFilename = tablename + ".xml";
	
	try {
		String strUrl = "http://localhost:8088/KosMember/kos_xml/"+xmlFilename;
		BufferedReader br = new BufferedReader(
			new InputStreamReader((new URL(strUrl))
			.openConnection().getInputStream(),"UTF-8"));
		
		while ((strLine = br.readLine()) != null){
			strHtml += strLine;
		}
		
		System.out.println(strHtml);
		br.close();
	} catch(Exception e) {
		throw e;
	}
%>
    
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>XML PARSING</title>
	<!-- jQuery CDN 불러오기  -------------------------------------------->
	<script  src="http://code.jquery.com/jquery-latest.min.js"></script>
	
	<script type="text/javascript">
		
		$(document).ready(function(){
			
			var xmlText, xmlParser, xmlDoc;
			
			xmlText = "<%= strHtml %>";
			alert(xmlText);
			
			xmlParser = new DOMParser();
			xmlDoc = xmlParser.parseFromString(xmlText, "text/xml");
			alert(xmlDoc); // [object XMLDocument]
			
			$("#parseText").click(function(){
				document.getElementById("text").innerHTML = xmlDoc;
				console.log(xmlDoc);
					
			});
			
			$("#parseFind").click(function(){
				document.getElementById("text").innerHTML = text;
				console.log(text);
			});
		});
	</script>
</head>
<body>
	<h3>XML 데이터 파싱하기</h3>
	<hr>
		<button id="parseText">DOM Parser로 XML 파싱하기 </button>
		<button id="parseFind">find() 함수로 파싱하기 </button> 
	<p id="text"></p> 
</body>
</html>
  • test_xml_table.html
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>Insert title here</title>
</head>

<body>
	<form	action="/KosMember/kos_xml/test_xml_table.jsp"
			method="GET">
		<input type="text" class="tablename" name="tablename" id="tablename" />
		<input type="submit" value="보내기"/>
	</form>
</body>
</html>

 

3교시 (11:30-12:20)

  • test_xml_emp_1.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%@ page import = "java.io.BufferedReader" %>
<%@ page import = "java.io.InputStreamReader" %>
<%@ page import  = "java.net.URL" %>

<%@ page import = "a.b.c.test.xml.OracleXmlTest_1" %>

<%
	String strHtml = "";
	String strLine = "";
	
	try {
		String strUrl = "http://localhost:8088/KosMember/kos_xml/emp.xml";
		BufferedReader br = new BufferedReader(
				new InputStreamReader((new URL(strUrl))
						.openConnection().getInputStream(), "UTF-8"));
		
		while ((strLine = br.readLine()) != null) {
			strHtml += strLine;
		}
		
		System.out.println(strHtml);
		br.close();
	} catch(Exception e) {
		throw e;
	}
%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>XML PARSING</title>
	<!-- jQuery CDN 불러오기 -->
	<script src="http://code.jquery.com/jquery-latest.min.js"></script>
	<script type="text/javascript">
	
		$(document).ready(function(){
			
		var xmlText, xmlParser, xmlDoc;
		
		xmlText = "<%= strHtml %>";
		alert(xmlText);
		
		xmlParser = new DOMParser();
		xmlDoc = xmlParser.parseFromString(xmlText, "text/xml");
		alert(xmlDoc);
		
		$("#parseText").click(function(){
			
			document.getElementById("text").innerHTML = xmlDoc;
			
			var empno, ename, job, mgr, hiredate, sal, comm, deptno;
			
			var nlist = xmlDoc.getElementsByTagName("ROW").length;
			
			for (i=0; i < nlist; i++) {
				
				empno = xmlDoc.getElementsByTagName("EMPNO")[i].childNodes[0].nodeValue;
				ename = xmlDoc.getElementsByTagName("ENAME")[i].childNodes[0].nodeValue;
				job = xmlDoc.getElementsByTagName("JOB")[i].childNodes[0].nodeValue;
				mgr = xmlDoc.getElementsByTagName("MGR")[i].childNodes[0].nodeValue;
				hiredate = xmlDoc.getElementsByTagName("HIREDATE")[i].childNodes[0].nodeValue;
				sal = xmlDoc.getElementsByTagName("SAL")[i].childNodes[0].nodeValue;
				comm = xmlDoc.getElementsByTagName("COMM")[i].childNodes[0].nodeValue;
				deptno = xmlDoc.getElementsByTagName("DEPTNO")[i].childNodes[0].nodeValue;
				
				console.log(			empno
								+ "," + ename
								+ "," + job
								+ "," + mgr
								+ "," + hiredate
								+ "," + sal
								+ "," + comm
								+ "," + deptno);
				}
			});
		
			$("#parseFind").click(function(){
				$(xmlText).find("ROW").each(function(){
					var empno = $(this).find("EMPNO").text();
					var ename = $(this).find("ENAME").text();
					console.log(empno + "," + ename);
				});
			});
		});
		
		
	</script>
</head>

<body>
	<h3>XML 데이터 파싱하기</h3>
	<hr>
		<button id="parseText">DOM Parser XML 파싱하기 </button>
		<button id="parseFind">find() 함수로 파싱하기</button>
	<p id="text"></p>
</body>
</html>

  • test_parser_1.html
<!DOCTYPE html> 
<html lang="ko"> 
<head> 
<meta charset="UTF-8"> 
<title>XML Parser</title> 
<style type="text/css"></style>

<!--
XML DOM 노드 
-------------------------
문서 노드(Document node)	: 전체 XML 문서를 나타낸다.
엘리먼트 노드(Element node)	: XML 엘리먼트를 나타낸다.
텍스트 노드(Text node)		: XML 엘리먼트 내의 텍스트를 나타낸다.
속성 노드(Attribute node)	: XML 엘리먼트 내의 속성을 나타낸다.
주석 노드(Comment node)		: XML 문서 내의 주석을 나타낸다.

XML DOM 프로퍼티
-------------------------
nodeName 			: 노드의 이름
nodeValue 			: 노드의 값
nodeType 			: 노드의 유형
parentNode 			: 자식 노드의 부모 노드
childNodes 			: 부모 노드의 자식 노드. 노드의 배열이 반환됨
firstChild 			: 부모 노드의 첫 번째 자식
lastChild 			: 부모 노드의 마지막 자식
nextSibling 		: 다음 형제 노드
previousSibling 	: 이전 형제 노드
attributes 			: 노드의 속성, 속성 노드의 리스트가 반환됨

XML DOM 메서드
-------------------------
getElementsByTagName(name) 	: 지정한 태그 이름에 해당하는 모든 엘리먼트를 구해서 노드 배열을 반환한다.
appendChild(childNode) 		: 부모 노드에 자식 노드를 삽입한다.
removeChild(childNode) 		: 부모 노드에서 자식 노드를 제거한다.

 
XML DOM 노드 유형
-------------------------
nodeType명 	nodeType값
Element			1
Attribute		2
Text			3
Comment			8
Document		9

XML DOM의  nodeName 프로퍼티
-------------------------
엘리먼트 노드의 nodeName 	: 태그이름
속성노드의 nodeName		: 속성의 이름
텍스트노드의 nodeName 	: #text
문서노드의 nodeName 	: #document

XML DOM의  nodeValue 프로퍼티
-------------------------
엘리먼트 노드의 nodeValue : undefined
텍스트노드의 nodeValue 	: 텍스트
속성노드의 nodeValue	: 속성 값


 -->
<script> 
	function parseText() { 
		
		var xmlText, xmlParser, xmlDoc; 
		
		xmlText = "<country>"
				+ "<name>korea</name>" 
				+ "<capital>seoul</capital>"
				+ "<lang>eng</lang>"
				+ "</country>" 	
		xmlParser = new DOMParser(); 
		xmlDoc = xmlParser.parseFromString(xmlText, "text/xml"); 
		
		console.log("xmlDoc.nodeName >>> : " + xmlDoc.nodeName);
		console.log("xmlDoc.nodeType >>> : " + xmlDoc.nodeType);
		console.log("xmlDoc.documentElement.nodeName >>> : " + xmlDoc.documentElement.nodeName);
		console.log("xmlDoc.documentElement.nodeType >>> : " + xmlDoc.documentElement.nodeType);
		
		x = xmlDoc.documentElement.childNodes;
		console.log("x >>> : " + x );
		xlen = x.length;
		console.log("xlen >>> : " + xlen );
		
		for (i=0; i < xlen; i++){
			console.log("x["+i+"].nodeName >>> : " + x[i].nodeName);
			console.log("x["+i+"].nodeType >>> : " + x[i].nodeType);
			console.log("x["+i+"].childNodes[0].nodeName >>> : " + x[i].childNodes[0].nodeName);
			console.log("x["+i+"].childNodes[0].nodeType >>> : " + x[i].childNodes[0].nodeType);
		}
		
	} 
</script> 
</head> 
<body> 
<h3>문자열 파싱</h3> 
<hr>
<button onclick="parseText()">파싱하기!</button> 
<p id="text"></p> 
</body> 
</html>

4교시 (12:30-13:20)

  • JNDI
    JNDI (Java Naming and Directory Interface)
    ----------------------------------------------
    디렉토리 서비스에서 제공하는 데이터 및 객체를 발견(discovery)하고 참고(lookup)하기 위한 자바API다.

    Web Server는 Web 응용 프로그램의 이름 지정 환경에 대한 핸들 역할을 하는 개체를 반환합니다.
    이 개체는 다시 java:comp/env 이름 공간용 하위 컨텍스트를 제공합니다.
    각 Web 응용 프로그램은 자체의 이름 공간이 있습니다.

    JNDI 조회 이름 연결된 참조
    ----------------------------------------
    java:comp/env 응용 프로그램 환경 항목
    java:comp/env/jdbc JDBC DataSource
    java:comp/env/mail JavaMail 세션 연결 팩토리
    java:comp/env/url URL 연결 팩토리
  • context.xml ← 이 부분 추가
<Resource 	auth="Container" 				 
				maxActive="100" 
				maxIdle="30" 
				maxWait="10000"  
				type="javax.sql.DataSource" 
				
				name="jdbc/jndi_orclKSY00"
				driverClassName="oracle.jdbc.driver.OracleDriver"
				url="jdbc:oracle:thin:@127.0.0.1:1521:orclKSY00"
				username="scott" 
				password="tiger" />
  • 활용법
<%@ page import="javax.naming.Context" %>
<%@ page import="javax.naming.InitialContext" %>
<%@ page import="javax.naming.NamingException" %>
<%@ page import="javax.sql.DataSource" %>

<%
Context ct = new InitialContext();
DataSource ds = (DataSource)ct.lookup("java:comp/env/jdbc/Oracle11g_orclKOSMO00");
Connection conn = ds.getConnection(); 			
%>
  • xml_jndiTest.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<!-- JDBC 객체 import -->
<%@ page import="java.sql.Connection" %>
<%@ page import="java.sql.PreparedStatement" %>
<%@ page import="java.sql.ResultSet" %>
<%@ page import="java.sql.SQLException" %>
<%@ page import="java.sql.DriverManager" %>
<%@ page import="javax.sql.DataSource" %>

<!-- JNDI 객체 import -->
<%@ page import="javax.naming.Context" %>
<%@ page import="javax.naming.InitialContext" %>
<%@ page import="javax.naming. NamingException" %>

<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>Insert title here</title>
</head>

<body>
	<h3>
		JNDI InitialContext<br>
		JNDI : Java Naming and Directory Interface
	</h3>
	<hr>
	<%
		// Obtain our environment naming context
		Context initCtx = new InitialContext();
		out.println("initCtx >>> : " + initCtx + "<br>");
	
		// initCtx의 lookup 메서드를 이용해서 "java:comp/env"에 해당하는 객체를 찾아서 evnCtx에 삽입
		Context envCtx = (Context) initCtx.lookup("java:comp/env");
		out.println("envCtx >>> : " + envCtx + "<br>");
		
		// Look up our data source
		// envCtx의 lookup 메서드를 이용해서 "jdbc/Oracle11g_orclKSY00"에 해당하는 객체를 찾아서 ds에 삽입
		// name="jdbc/Oracle11g_orclKSY00"
		DataSource ds = (DataSource)envCtx.lookup("jdbc/jndi_orclKSY00");
		out.println("ds >>> : " + ds + "<br><hr>");
		
		// getConnection 메서드를 이용해서 커넥션 풀로부터 커넥션 객체를 얻어내어 conn 변수에 저장
		Connection conn = ds.getConnection();
		PreparedStatement stmt = conn.prepareStatement("SELECT * FROM EMP");
		ResultSet rsRs = stmt.executeQuery();
		
		while (rsRs.next()) {
			out.println(rsRs.getString(1) + " ");
			out.println(rsRs.getString(2) + " ");
			out.println(rsRs.getString(3) + " ");
			out.println(rsRs.getString(4) + " ");
			out.println(rsRs.getString(5) + " ");
			out.println(rsRs.getString(6) + " ");
			out.println(rsRs.getString(7) + " ");
			out.println(rsRs.getString(8) + " <br>");
		}
	%>
</body>
</html>

  • xml_jndiTest_1.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<!-- JDBC 객체 import -->
<%@ page import="java.sql.Connection" %>
<%@ page import="java.sql.PreparedStatement" %>
<%@ page import="java.sql.ResultSet" %>
<%@ page import="java.sql.SQLException" %>
<%@ page import="java.sql.DriverManager" %>
<%@ page import="javax.sql.DataSource" %>

<!-- JNDI 객체 -->
<%@ page import="javax.naming.Context" %>
<%@ page import="javax.naming.InitialContext" %>
<%@ page import="javax.naming.NamingException" %>

<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>Insert title here</title>
</head>
<body>
	<h3>
		JNDI InitialContext <br>
		JNDI : Java Naming and Directory Interface
	</h3>
	<hr>
	<%
		Context context = new InitialContext();
		DataSource ds = (DataSource) context.lookup("java:comp/env/jdbc/jndi_orclKSY00");
		
		// getConnection 메서드를 이용해서 커넥션 풀로부터 커넥션 객체를 얻어내어 conn 변수에 저장
		Connection conn = ds.getConnection();
		PreparedStatement stmt = conn.prepareStatement("SELECT * FROM EMP");
		ResultSet rsRs = stmt.executeQuery();
		
		while (rsRs.next()) {
			out.println(rsRs.getString(1) + " ");
			out.println(rsRs.getString(2) + " ");
			out.println(rsRs.getString(3) + " ");
			out.println(rsRs.getString(4) + " ");
			out.println(rsRs.getString(5) + " ");
			out.println(rsRs.getString(6) + " ");
			out.println(rsRs.getString(7) + " ");
			out.println(rsRs.getString(8) + " <br>");
		}
	%>
</body>
</html>


5교시 (14:30-15:20)

  • Spring 설정 파일로서의 xml
    • xml 설정 파일을 만들어 클래스를 기계가 관리하도록 함
    • spring3.pdf 참고

6교시 (15:30-16:20)

  • TestClass.java
package a.b.c.test.xml;

import java.util.ArrayList;

public class TestClass {
	
	public void test() {
		System.out.println("a.b.c.test.xml.TestClass 클래스에 있는 test() 메소드입니다.");
		System.out.println("Hello >>>>>>>>>>> ");
		
		ArrayList<String> aList = new ArrayList<String>();
		aList.add("신제현");
		aList.add("김민");
		aList.add("손준하");
		aList.add("홍길동");
		aList.add("김보연");
		aList.add("하연재");
		for (int i=0; i < aList.size(); i++) {
			System.out.println(">>> : " + aList.get(i));
		}
	}
	
	public static void main(String args[]){
		TestClass tc = new TestClass();
		tc.test();
	}
}
  • fileClass.xml
<?xml version="1.0" encoding="UTF-8"?>
<ROOT>
	<testclass>
		<test>a.b.c.test.xml.TestClass</test>
	</testclass>
</ROOT>
  • ReadXMLClass.java
package a.b.c.test.xml;

// DOM 만들기
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;

// DOM 문서 파싱
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import java.io.File;

public class ReadXMLClass {

	public static final String XML_FILE_PATH = "C:\\00.KOSMO108\\30.Web\\eclipse_web_1_work\\KosMember\\WebContent\\kos_xml";
	
	public static void main(String argv[]) {
	
		String testClass = "";
		
		try {
			// Tomcat 서버에서 웹 서버(코요테) 위치에 있는 fileClass.xml 파일을
			// Tomcat 서버가 설치된 로컬 경로에 있는 물리적 파일 위치를 찾아서
			// java.io.File 객체로 읽는 것이다.
			// java.io.File은 객체의 물리적 경로를 읽는 객체이다.
			String xmlFilePath = ReadXMLClass.XML_FILE_PATH;
			File fXmlFile = new File(xmlFilePath + "/fileClass.xml");
			
			// 팩토리 디자인 패턴 : 형식 : xml 파일을 읽어서 파싱
			// 물리적인 xml 파일을 xml 객체로 변환하기 위해서 팩토리 디자인 패턴을 이용한다.
			DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
			DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
			
			// parse() 함수가 물리적인 xml 파일을 파싱해서 메모리에 xml 객체로 변환시킨다.
			Document doc = dBuilder.parse(fXmlFile);
			
			// xml 문서를 깨끗하게 만드세요
			doc.getDocumentElement().normalize();
			
			System.out.println("Root element : " + doc.getDocumentElement().getNodeName());
			NodeList nList = doc.getElementsByTagName("testclass");
			System.out.println("-----------------------");
			
			for (int temp=0; temp < nList.getLength(); temp++) {
				Node nNode = nList.item(temp);
				if (nNode.getNodeType() == Node.ELEMENT_NODE) {
					
					Element eElement = (Element) nNode;
					
					testClass = getTagValue("test", eElement);
					System.out.println("test : " + testClass);
				}
			}
			try {
				Class cla_1 = Class.forName(testClass);
				TestClass classAction = (TestClass)cla_1.newInstance();
				System.out.println(" classAction >>> : " + classAction);
				classAction.test();
			} catch (Exception e) {} 
			
//			catch (ClassNotFoundException e) {}
//			catch (InstantiationException i) {}
//			catch (IllegalAccessException il) {}

		} catch (Exception e) {
			System.out.println(e);
		}
	}
	
	private static String getTagValue(String sTag, Element eElement) {
		NodeList nList = eElement.getElementsByTagName(sTag).item(0).getChildNodes();
		Node nValue = (Node)nList.item(0);
		return nValue.getNodeValue();
	}
}

7교시 (16:30-17:20)

  • 다른 클래스를 불러와보기
  • fileClass.xml
<?xml version="1.0" encoding="UTF-8"?>
<ROOT>

	<testclass>
		<test>a.b.c.test.xml.TestClass</test>
	</testclass>
<!--
	<testclass>
		<test>java.util.ArrayList</test>
	</testclass>
-->
<!--
	<testclass>
		<test>java.util.HashMap</test>
	</testclass>
-->
</ROOT>
  • ReadXMLClass.java
import java.util.ArrayList;
import java.util.HashMap;

//				Class cla_1 = Class.forName(testClass);
//				TestClass classAction = (TestClass)cla_1.newInstance();
//				System.out.println(" classAction >>> : " + classAction);
//				classAction.test();
	
//				Class cla_1 = Class.forName(testClass);
//				ArrayList classAction = (ArrayList)cla_1.newInstance();
//				System.out.println(" classAction >>> : " + classAction);
//				// classAction.test();

				Class cla_1 = Class.forName(testClass);
				HashMap classAction = (HashMap)cla_1.newInstance();
				System.out.println(" classAction >>> : " + classAction);
				// classAction.test();

8교시 (17:30-18:30)

  • db_1.properties
driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:orclKSY00
username=scott
password=tiger
  • Property_Read_1.java
package a.b.c.test.xml;
 
import java.io.Reader;
import java.util.Properties;

import org.apache.ibatis.io.Resources;

public class Property_Read_1 {

	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		
		String resource = "a/b/c/test/xml/db_1.properties";
		Properties prop = new Properties();
		
		try {
			
			Reader rd = Resources.getResourceAsReader(resource);
			prop.load(rd);
			
			System.out.println(prop.getProperty("driver"));
			System.out.println(prop.getProperty("url"));
			System.out.println(prop.getProperty("username"));
			System.out.println(prop.getProperty("password"));

		} catch (Exception e) {}
	}
}

  • db_2.ini
driver=a.b.c
url=jdbc:oracle
username=ss
password=dd
  • Property_Read_2.java
package a.b.c.test.xml;

import java.io.Reader;
import java.util.Properties;

import org.apache.ibatis.io.Resources;

public class Property_Read_2 {
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		String resource = "a/b/c/test/xml/db_2.ini";
		Properties prop = new Properties();
		
		try {
			
			Reader rd = Resources.getResourceAsReader(resource);
			prop.load(rd);
			
			System.out.println(prop.getProperty("driver"));
			System.out.println(prop.getProperty("url"));
			System.out.println(prop.getProperty("username"));
			System.out.println(prop.getProperty("password"));
		} catch (Exception e) {}
	}
}


Notes


728x90