주요글: 도커 시작하기
반응형
DWR을 이용해서 웹 어플리케이션을 개발하다 보면 성능 상의 이유로 DWR이 객체를 변환해서 생성하는 JSON 코드를 서버 코드에서 직접 생성하고 싶을 때가 있다. 이 경우 다음과 같은 절차에 따라 작업을 진행하면 된다.

1. web.xml 파일의 DwrServlet에 publishContainerAs 초기화 파라미터 값 설정

<servlet>
  <servlet-name>dwr-invoker</servlet-name>
  <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
  <init-param>
     <param-name>publishContainerAs</param-name>
     <param-value>dwrContainer</param-value>
  </init-param>
</servlet>

DwrServlet은 publishContainerAs 초기화 파라미터에 설정된 값이 있으면 ServletContext.setAttribute() 메서드를 이용해서 DWR Container를 ServletContext에 보관한다. 이때 publishContainerAs 초기화 파라미터의 값을 속성 이름으로 사용한다.

2. DWR이 제공하는 클래스를 이용해서 객체를 JSON으로 변환한다.

Container dwrContainer = (Container)getServletContext().getAttribute("dwrContainer");
ConverterManager converterManager = (ConverterManager)dwrContainer.getBean(
                                                                    ConverterManager.class.getName());
ScriptBuffer sb = new ScriptBuffer("dwrObject=");
SomeObject object = ...; // JSON으로 변환할 객체
sb.appendData(object); //
String json = null;
try {
 json = ScriptBufferUtil.createOutput(sb, converterManager);
 json = StringEscapeUtils.escapeJavaScript(json);
} catch (MarshallException e) {
 throw new RuntimeException(e);
}
request.setAttribute("JSON_OBJECT", json);

위 코드에서 StringEscapeUtils 클래스는 Jakarta Commons Lang 프로젝트에 포함된 클래스이다.

ScriptBufferUtil.createOutput() 메서드는 ScriptBuffer에 설정한 객체로부터 자바 스크립트 코드를 생성해 주는데, 이때 생성된 자바 스크립트 코드는 서버 측의 객체를 자바 스크립트의 JSON 형식으로 변환해주는 코드가 된다.

3. 자바 스크립트의 eval()을 이용해서 자바 스크립트 객체로 변환

이제 남은 작업은 eval()을 이용해서 DWR 모듈이 생성한 자바 스크립트 코드를 실행해서 그 결과를 객체로 저장하면 된다.

var someObj = (function () { return eval("${JSON_OBJECT}"); })();

+ Recent posts