DWR 설정 및 사용
DWR 이 우선 무엇인지 잠깐 설명을 하자면 Java 와 JavaScript 간의 통신을 가능하도록 해주는 lib 이다.
본인 역시 자세히 모르기 때문에 아는정도만 기술해보기로 하겠다.
우선 DWR lib 를 다운받는다. [ http://directwebremoting.org/ ]
WAS WEB-INF/lib/ 에 라이브러리를 추가하고
web.xml 에 dwr servlet 을 추가한다.
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>false</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
이처럼 추가한다.
그리고 dwr.xml 을 WEB-INF/ 에 생성한다.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://www.getahead.ltd.uk/dwr/dwr20.dtd">
<dwr>
<allow>
<create creator="new" javascript="Test">
<param name="class" value="test.TestDwr" />
</create>
<convert converter="bean" match="test.TestBean"/>
</allow>
</dwr>
그럼 TestDwr.java 와 TestBean.java 를 만들장.
===================================
package test.action;
public class TestDwr{
public TestBean hello(TestBean b){
TestBean bean = new TestBean();
bean.setName(b.getName());
bean.setAge(b.getAge());
return bean;
}
}
=====================================
package test.action;
public class TestBean{
String name;
String age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
그럼 html 에서 javascript 를 어찌 사용하는지 보겠다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="contextPath" value="${pageContext.request.contextPath}" scope="request" />
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<script language="javascript" src="${contextPath}/dwr/interface/Test.js"></script>
<script language="javascript" src="${contextPath}/dwr/engine.js"></script>
<script language="javascript" src="${contextPath}/dwr/util.js"></script>
<script language="javascript">
function hi(name){
var p = {name:"a", age:"19"};
Test.hello(p, callBackHi);
}
function callBackHi(data){
alert(data.name + "/" + data.age);
}
</script>
<body>
<input type="button" value="DWR Test" onclick="hi('D2')">
</body>
</html>
이러면 설정과 테스트 환경은 끝냈다.
그럼 잠시 설명을 하자면
dwr.xml 에서 create 로 생성한 javasript 이름으로 javascript 를 불러들인다.
<create creator="new" javascript="Test">
<script language="javascript" src="${contextPath}/dwr/interface/Test.js"></script>
src 경로에서 dwr/interface 는 고정이다. (참고로 dwr 은 web.xml 에서 servlet-pattern 명이다.)
이렇게 하면 dwr.xml 에서 TestDwr 내에 <param name="class" value="test.TestDwr" /> 의 클래스를 사용하겠다는 뜻이다. 그럼 javascript 내에서 해당 클래스를 호출한다. 참고로 javascript 내에서 호출할때는 javascript 이름으로 호출해야 한다.
Test.hello(p, callBackHi);
요것을 잘보면 p 는 java class 의 hello 메소드에 넘겨질 파라미터 값이다. 그럼 callBackHi 는 java 수행후 호출된 javascript 메소드가 되겠다.(콜백함수)
hello 메소드는 TestBean 을 반환시킨다. 때문에 callBackHi 는 그 빈형태로 데이타를 받아서 속성을 꺼낼수 있다. 이때 이렇게 String 이 아닌 다른 Object 로 파라미터나, 반환값이 될때는 해달 값이 어떤 Object Type 인지 dwr 이 알아야 한다. 그러기 위해서 convert 를 사용한다.
파라미터 또는 반환값의 Class 를 미리 dwr.xml 에 정의해놓아야 javascript 에서 object 형식으로 사용할 수 있다는 것을 명심하자.
'Work' 카테고리의 다른 글
Json 유효성 검사 사이트 (0) | 2013.09.02 |
---|---|
Apache Struts 버전 확인 방법 (0) | 2013.08.14 |
각종 소프트웨어 라이센스 구매처 (2) | 2012.04.25 |
net use 사용 터미널 세션 종료 하기 (0) | 2011.12.19 |
원격 접속 프로그램 사용시 툴에서 빽스페이스나 델키 안먹을때 (0) | 2010.12.01 |