Deploy 수행

Build > Deploy… > Deploy Application >  을 클릭한 다음 경로는 이클립스 동적 웹 프로젝트 폴더의 WebContents 폴더로 설정합니다.


프로젝트에 폼 설정

childframe으로 이동 후 Appearanceformurl에서 설정합니다.


폼 간 이동

this.toFrmTest_onclick = function(obj:Button,  e:nexacro.ClickEventInfo)
{
    this.go("Base::FrmPortal.xfdl");
}

Base 폴더 밑의 FrmPortal.xfdl 파일명의 폼으로 이동합니다.


전역 변수 사용

 alert(application.[전역 변수 이름]);


클라이언트/서버 구축

폼으로 writer와 message를 보내고 처리 결과를 받는 코드입니다.

(1) 클라이언트(넥사크로 프로젝트) 쪽 코드 (input):

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"));
}
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) 서버(자바 서블릿) 쪽 코드:

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();
        } 
 
    }

문의 | 코멘트 또는 yoonbumtae@gmail.com




3개의 댓글

김수빈 · 2020년 11월 5일 6:35 오후

안녕하십니까 좋은글 감사합니다. 혹시 관련 파일이 남아있으면 받을 수 있을까요? 제가 이번에 넥사크로 프로젝트를 진행하는데 정말 많은 도움이 될 것 같습니다! 감사합니다.

답글 남기기

Avatar placeholder

이메일 주소는 공개되지 않습니다.