넥사크로(Nexacro): 데이터베이스에 읽고 쓰기 및 기타
Deploy 수행
Build > Deploy… > Deploy Application > 을 클릭한 다음 경로는 이클립스 동적 웹 프로젝트 폴더의 WebContents 폴더로 설정합니다.
프로젝트에 폼 설정
childframe으로 이동 후 Appearance의 formurl에서 설정합니다.
폼 간 이동
1
2
3
4
5
this.toFrmTest_onclick = function(obj:Button, e:nexacro.ClickEventInfo)
{
this.go("Base::FrmPortal.xfdl");
}
Base 폴더 밑의 FrmPortal.xfdl 파일명의 폼으로 이동합니다.
전역 변수 사용
alert(application.[전역 변수 이름]);
클라이언트/서버 구축
폼으로 writer와 message를 보내고 처리 결과를 받는 코드입니다.
(1) 클라이언트(넥사크로 프로젝트) 쪽 코드 (input):
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
32
33
34
35
36
37
38
39
40
this.btnBack_onclick = function(obj:Button, e:nexacro.ClickEventInfo)
{
this.go("Base::FrmPortal.xfdl");
}
this.btnSubmit_onclick = function(obj:Button, e:nexacro.ClickEventInfo)
{
var writer = this.writer.value;
var message = this.message.value;
// 비어 있는 행 추가
var row = this.DatasetRequest.addRow(); // 숫자 리턴
this.DatasetRequest.setColumn(row, "id", 0);
this.DatasetRequest.setColumn(row, "writer", writer);
this.DatasetRequest.setColumn(row, "message", message);
var id = "request";
var url = "../input.msg";
var reqDs = "request=DatasetRequest"; // DatasetRequest를 리퀘스트에 담아 보낸다.
var respDs = "DatasetResponse=response"; // 서버가 response라는 이름으로 DatasetResponse를 보낸다.
// 왼쪽 자리에는 데이터를 받아올 데이터셋의 아이디를 입력
var args = "";
// var args = "writer=" + writer + " message=" + message;
var callback = "afterComplete"; // 작업이 끝난 후 할 작업을 적는다. 함수의 이름을 문자열로 적는다.
// 데이터를 보내는 방식
// 1. DS(request dataset)에 보냄
// 2. arguments에 보냄 (간단한 자료)
this.transaction(id, url, reqDs, respDs, args, callback);
// alert(writer + message);
}
this.afterComplete = function(id, code, msg){
//alert(this.DatasetResponse.getColumn(0, "forward"));
alert(this.DatasetResponse.getColumn(0, "resultMessage"));
this.go(this.DatasetResponse.getColumn(0, "forward"));
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
this.btnBack_onclick = function(obj:Button, e:nexacro.ClickEventInfo)
{
this.go("Base::FrmPortal.xfdl");
}
// 폼의 onload시 불러올 이벤트
this.loadData = function() {
var id = "outputProc";
var url = "../output.msg";
var reqDs = "";
var respDs = "DatasetMessages=response";
var args = "";
var callback = "received";
this.transaction(id, url, reqDs, respDs, args, callback);
}
this.received = function() {
alert("통신완료");
}
(2) 서버(자바 서블릿) 쪽 코드:
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("요청 확인");
request.setCharacterEncoding("UTF8");
// PrintWriter를 꺼내기 전에 response의 인코딩을 설정
response.setCharacterEncoding("UTF8");
// 넥사크로 XML 파싱
// HTTP Platform Request
HttpPlatformRequest hpRequest = new HttpPlatformRequest(request);
try {
// URL 패턴 획득
String requestURI = request.getRequestURI();
String contextPath = request.getContextPath();
System.out.println("@RequestURI: " + requestURI);
System.out.println("@ContextPath: " + contextPath);
String command = requestURI.substring(contextPath.length());
System.out.println("@Command: " + command);
// DAO: 공용 영역에 만들어 놓음
MessagesDAO mdao = new MessagesDAO();
if(command.equals("/input.msg")) {
hpRequest.receiveData(); // 일단 뭔가 받음
PlatformData inputData = hpRequest.getData();
DataSet ds = inputData.getDataSet("request");
// request=DatasetRequest에서 받는 쪽의 이름은 request이다.
int row = ds.getRowCount();
String writer = ds.getString(row - 1, 1);
String message = ds.getString(row - 1, 2);
System.out.println(writer + " : " + message);
// response로 다시 보냄
// DAO 작업
int result = mdao.insertAnMessage(new Message(0, writer, message));
String resultMessage = result > 0 ? "입력 성공" : "입력 실패";
PlatformData outputData = new PlatformData();
DataSet respDataset = new DataSet("response");
respDataset.addColumn("forward", DataTypes.STRING, 256);
respDataset.addColumn("resultMessage", DataTypes.STRING, 256);
// resultMessge 컬럼 추가
int row2 = respDataset.newRow();
respDataset.set(row2, "forward", "Base::FrmMain.xfdl");
respDataset.set(row2, "resultMessage", resultMessage);
// resultMessage 메시지 추가
outputData.addDataSet(respDataset);
HttpPlatformResponse respData = new HttpPlatformResponse(response,
PlatformType.CONTENT_TYPE_XML, "UTF-8");
respData.setData(outputData);
respData.sendData();
} else if(command.equals("/output.msg")) {
hpRequest.receiveData(); // 일단 뭔가 받음
PlatformData inputData = hpRequest.getData();
DataSet ds = inputData.getDataSet("request");
List<Message> outputList = mdao.getAllMessages();
PlatformData outputData = new PlatformData();
DataSet respDataset = new DataSet("response");
respDataset.addColumn("seq", DataTypes.INT, 4);
respDataset.addColumn("writer", DataTypes.STRING, 20);
respDataset.addColumn("message", DataTypes.STRING, 300);
for(Message m : outputList) {
int row = respDataset.newRow();
respDataset.set(row, "seq", m.getId());
respDataset.set(row, "writer", m.getWriter());
respDataset.set(row, "message", m.getMessage());
}
outputData.addDataSet(respDataset);
HttpPlatformResponse respData = new HttpPlatformResponse(response,
PlatformType.CONTENT_TYPE_XML, "UTF-8");
respData.setData(outputData);
respData.sendData();
}
} catch (PlatformException e) {
e.printStackTrace();
} catch (NamingException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
This post is licensed under
CC BY 4.0
by the author.



