1. employees_select.jsp
- SQL query 수행 후 검색된 데이터를 Dataset에 할당하고 클라이언트로 전송
2. 첨부된 jsp를 Tomcat7.0 -> webapps - > ROOT - >edu(폴더만듬) -> xp(폴더만듬)폴더 안에 복사한다.
3. editPlus와 같은 문서 편집기를 통해 jsp을 열어서 코드 분석해보자.
<%@ page import="org.apache.commons.logging.*" %>
<%@ page import="com.tobesoft.xplatform.data.*" %>
<%@ page import="com.tobesoft.xplatform.tx.*" %>
<%@ page import = "java.util.*" %>
<%@ page import = "java.sql.*" %>
<%@ page import = "java.io.*" %>
<%@ page contentType="text/xml; charset=UTF-8" %>
<%
// PlatformData
// - XplatFormData을 생성
// - 조회가 끝나고 dataset과 변수를 한번에 담는 데이타 덩어리
PlatformData o_xpData = new PlatformData();
int nErrorCode = 0;
String strErrorMsg = "START";
String sTest="111";
try {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
// 개발자 환경에 맞게 변경해줘야됨.
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:EX", "study", "study");
stmt = conn.createStatement();
String SQL="select * from employees";
rs = stmt.executeQuery(SQL);
// xmplatform에 테이블 데이터를 담을 dataset 객체 생성
DataSet ds = new DataSet("ds_employees");
// 컬럼 생성
// 컬럼 생성시 구성 (컬럼명, 컬럼타입, 컬럼사이즈)
ds.addColumn("EMP_ID" ,DataTypes.STRING ,(short)10 );
ds.addColumn("FULL_NAME" ,DataTypes.STRING ,(short)50 );
ds.addColumn("HIRE_DATE" ,DataTypes.STRING ,(short)30 );
ds.addColumn("MARRIED" ,DataTypes.STRING ,(short)1 );
ds.addColumn("SALARY" ,DataTypes.INT ,(short)10 );
ds.addColumn("GENDER" ,DataTypes.STRING ,(short)1 );
ds.addColumn("DEPT_ID" ,DataTypes.STRING ,(short)10 );
ds.addColumn("EMP_MEMO" ,DataTypes.STRING ,(short)4000 );
while(rs.next())
{
// 빈 레코드를 만듬.
int row = ds.newRow();
// 추가될 레코드 위치에 resultSet으로 불러오는 값들을 각각의 컴럼에 넣어 준다.
ds.set(row ,"EMP_ID" ,rs.getString("EMP_ID") );
ds.set(row ,"FULL_NAME" ,rs.getString("FULL_NAME") );
ds.set(row ,"HIRE_DATE" ,rs.getString("HIRE_DATE") );
ds.set(row ,"MARRIED" ,rs.getString("MARRIED") );
ds.set(row ,"SALARY" ,rs.getString("SALARY") );
ds.set(row ,"GENDER" ,rs.getString("GENDER") );
ds.set(row ,"DEPT_ID" ,rs.getString("DEPT_ID") );
ds.set(row ,"EMP_MEMO" ,rs.getString("EMP_MEMO") );
}
// DataSet-->PlatformData에 담음
o_xpData.addDataSet(ds);
nErrorCode = 0;
strErrorMsg = "SUCC";
} catch (SQLException e) {
nErrorCode = -1;
strErrorMsg = e.getMessage();
}
if ( stmt != null ) try { stmt.close(); } catch (Exception e) {nErrorCode = -1; strErrorMsg = e.getMessage();}
if ( conn != null ) try { conn.close(); } catch (Exception e) {nErrorCode = -1; strErrorMsg = e.getMessage();}
} catch (Throwable th) {
nErrorCode = -1;
strErrorMsg = th.getMessage();
}
// VariableList
// XplatFormData을 참조함
VariableList varList = o_xpData.getVariableList();
strErrorMsg=sTest;
//Variable--> VariableList
// 변수 리스트에 변수이름, value형태로 값을 담는다.
varList.add("ErrorCode", nErrorCode);
varList.add("ErrorMsg", strErrorMsg);
// HttpPlatformResponse
HttpPlatformResponse pRes = new HttpPlatformResponse(response, PlatformType.CONTENT_TYPE_XML, "UTF-8");
// xplatFormData를 담음
pRes.setData(o_xpData);
// Send data
// xplatFormData를 클라이언트 쪽으로 보냄
pRes.sendData();
%>
4. 조회버튼에 이벤트를 만들자.
버튼을 클릭하고 왼쪽 속성창에 번개모양아이콘을 클릭한다. 그리고 발생시킬 이벤트를 선택하고 의미있는 이름을 입력하고 엔터를 친다.
5. load()를 통해 서버와 연결해보자.
Dataset.load() 란?
-지정된 URL의 Dataset정보를 읽어 Dataset을 구성
만약, 현재 Dataset이 다른 Dataset정보를 포함하고 있다면 이전의 Dataset정보는 Clear된다.
그리고 하나의 Dataset을 조회할때 사용이 가능하다.
비동기 란?
-Transaction함수가 Service를 호출 후 통신 완료와 관계없이 다음 script를 수행하며 Result는 Call Back함수에서
확인이 가능하다.
동기 란?
-Transaction함수가 Service를 호출 후 통신이 완료되는 시점까지 대기상태에서 Result를 받은면 다음 script를 실행함.
XplatForm은 default가 비동기이다.
6. 출력해보자.
조회버튼을 누르게 되면 DB에 있는 값들을 불러오는 것을 볼 수 있다.
7. 지금처럼 간단하게 프로그램을 작성할때는 상관없지만 기업용프로젝트라든지 코드양이 많으 프로젝트때는 ds_employees.url 부분에서 Full Server Name을 적게 되면 나중에 유지보수 하기가 힘들다. 그러기 때문에 자주 사용하는 url를 TypeDefintion에 저장해 두면 수정하기도 편하고 코드양도 줄어들 것이다.
"http://localhost:8080/edu/xp/"까지 복사를 한다.
왼쪽 Project Explorer에서 TypeDefinition를 더블클릭 한 후 Services탭으로 이동한다. 그리고 add버튼을 클릭 한 후 밑 화면과 동일하게 입력한 후 ok버튼을 누른다.
다시 script창으로 넘어와서 service에서 입력한 serviceID를 입력하고 ::을 하면 아까와 동일한 url이 만들어진다.
8. 5번글에서 XplatForm default는 비동기라고 했는데 한번 확인해 보자.
ds_employess dataset을 클릭한 후 우측 속성창에 이벤트 버튼을 클릭하게 되면 onload 이벤트가 있다. 의미있는 이름을 만든 후 엔터를 누르자.
비동기 방식은 load가 될때까지 기다리지 않고 그 다음 동작을 실행하게 된다. trace()를 통해서 한 번확인해 보자.
조회 버튼을 눌러서 확인해 본 결과 비동기 방식으로 출력이 되고 있는 것을 볼 수 있다.
1~2번째 입력을 지운이유는 더미dataset의 값을 불러왔기 때문에 우리가 보고자 하는 결과와 무관한 출력이다.
댓글 없음:
댓글 쓰기