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;
public class TestDwr{
public TestBean hello(TestBean b){
TestBean bean = new TestBean();
bean.setName(b.getName());
bean.setAge(b.getAge());
return bean;
}
}
=====================================
package test;
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-mapping의 url-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 형식으로 사용할 수 있다는 것을 명심하자.
참고. 많은 양의 데이터를 가져 올때 사용 하면 속도가 느리다. 간단한 콤보박스 생성용도로 사용하면 적당 할 듯 하다.
[출처] http://happy2ni.egloos.com/3255283
'Jsp_Html' 카테고리의 다른 글
[Jsp] CSS style !important (0) | 2013.09.13 |
---|---|
[Jsp] is quoted with " which must be escaped when used within the value (0) | 2013.07.25 |
[Jsp] 스트러츠2 설정 (0) | 2011.12.13 |
[Jsp] MultipartRequest 파일 업로드 I (0) | 2011.10.26 |
[Jsp] MultipartRequest 파일 업로드 II (0) | 2011.10.26 |