달력

122024  이전 다음

  • 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

JSON-PRC-java 적용하기

java 2006. 2. 25. 22:35

http://kingori.egloos.com/1673534

ajax의 광풍이 몰아닥칠때, XMLHttpRequest 와 함께 이름이 여기저기서 보이던 JSON-RPC , 그 중에서도 JSON-RPC-java 를 직접 사용해보았다.

ajax 는 분명히 손이 많이 가지만 한번 적용해보고 싶었고, 또한 적용하지 않으면 상당히 우울한 부분이 마침 눈에 띄어서 옳다꾸나 하고 냉큼 써먹어봤다.

사용한 부분은 대량의 입력을 받아 submit 하기 직전에 대략 3개~4개의 column 들에 대한 validation 이었다. 당연히 server-side 에서의 validation 이다.
보통 이럴경우 struts의 form validation 을 쓰는데, 이런 경우 form 이 dynamic 하게 늘어나고 parameter 도 array 로 날라다니고 해서 아주 골치아프다.
사용자 입장에서는 대략 40개의 입력값을 줬는데, submit 했다가 validation에서 뻑나면 다시 일일이 입력해줘야 하고, 이걸 막기 위해선 개발자가 40개의 입력값을 받아다가 어디에 저장해놓고, validation 해서 뻑나면 다시 redirecting 시켜준 후 저장해 놓은 입력값을 다시 form 에 일일이 박아다 주고. 관두고 말지!
이때 ajax 를 통한 validation 을 쓰면 아주 깔끔하게 처리할 수 있다. 물론 iframe 을 사용해서 매우 아름답지 못한 방법으로 할 수도 있지만 느리고, 또 꼬이기 십상이다. 내 경우 단순결과를 얻기위해 iframe으로 10번정도의 request를 날려야하니 이것또한 우울하다.

XMLHttpRequest 를 쓸 수도 있는데 굳이 JSON-RPC 를 사용한 이유는, 단순 validation 이기 때문에 값만 받아오면 되는데 ( true|false ) , 요것때문에 xml 페이지 처리하고 값 받아오는것을 만드는것이 귀찮고, 또 귀파는데 삽자루 들이미는 격이라서 아얘 객체로 왔다리 갔다리 하는 JSON-RPC 로 눈을 돌렸다.

홈페이지에 나와있는 설명을 번역하자면

  • JSON (JavaScript Object Notation) 은 C, C++, C#, Java, JavaScript, Perl, TCL 등의 언어와 호환가능한 lightweight 한 데이타교환 format이다.
  • JSON-RPC 는 XML-RPC 과 유사한 단순한 remote procedure call protocol 이지만, XML 대신 JSON format 을 사용한다.
  • 페이지 reloading 없이 원격 method 호출을 위해 XMLHttpRequest object (IE의 경우는 MSXML ActiveX ) 가 쓰인다.
  • JSON-RPC-Java 는 JSON-RPC protocol 을 Java로 작성한 것이다

결국 XMLHttpRequest 위에 올라가서, 원격 메소드 호출 후 결과값을 JSON 으로 가져다 주는 것이니 나의 경우와 같이 결과값만 받는 경우 XMLHttpRequest 직접 구현보다 훨씬 편하다.

간단히 실제 적용내용을 정리하면
  1. web application 에 사용할 directory 를 만든다. ( 기존 application 에 적용할 때는 필요없음).
  2. web application root 밑에 WEB-INF 디렉토리를 만들고 아래와 같이 web.xml 을 작성.

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
    <web-app>
    <directory-servlet>none</directory-servlet>
    <display-name>jsonrpc</display-name>
    <!-- Action Servlet Configuration -->
    <servlet>
    <servlet-name>JSONRPCServlet</servlet-name>
    <servlet-class>com.metaparadigm.jsonrpc.JSONRPCServlet</servlet-class>
    </servlet>
    <servlet-mapping>
    <servlet-name>JSONRPCServlet</servlet-name>
    <url-pattern>/json</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    </welcome-file-list>
    </web-app>

  3. library 디렉토리에 json.jar 복사
  4. js 위치한 곳에 jsonrpc.js 복사
  5. 환경설정끝! jsp 작성


내가 만든 테스트 페이지의 소스와 jsp 는
<%@ page contentType="text/html;charset=EUC-KR"
import
="kingori.MessageGetter" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<jsp:useBean id="JSONRPCBridge"
class="com.metaparadigm.jsonrpc.JSONRPCBridge" scope="session"/>
<%
JSONRPCBridge.registerObject("messageGetter", new MessageGetter() );
%>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<title>JSONRPCJAVA test</title>
<script type="text/javascript" src="jsonrpc.js"></script>
<script type="text/javascript">
jsonrpc = new JSONRpcClient("json");

function getMessage()
{
document.getElementById("messageSpan").innerHTML =
jsonrpc.messageGetter.getMessage();
}
</script>
</head>
<body>
<p>Please tell me something:
<input type="button" onclick="getMessage();" value="click"/></p>
<p>message:<span id="messageSpan"></span></p>
</body>
</html>

package kingori;

public class MessageGetter
{
public String getMessage()
{
return "hohoho!";
}
}


위와 같다.

jsp 에서의 호출부분이 매우 단순하다. 만약 object에 뭔가를 넣어줘야 할 경우 javascript 단에서 처리하면 된다. 위의 코드라면
jsonrpc.messageGetter.getMessage( value);

이런 식이 될 듯.

한가지 문제는 validator 자체가 http request , http response 를 거치지 않고 JSONRPC 가 그냥 불러버리기 때문에 "로긴한 사용자 이름을 가져와서 세팅하기" 등등의 부분에서 꼼수가 필요하지 않을까 생각한다. 이것은 jsp 단 코드에서 해결해줘야 하지 않을까 생각한다. (아직 해보진 않았지만.)

꽤 깔끔하고, XMLHttpRequest 일일이 구현하는것보다 간편하다. 대신 만약 xml document 전체를 뿌려준다거나 할 경우는 차라리 XMLHttpRequest 로 구현하는게 더 편하지 않을까 싶다.

내 결론은
  • 달랑 값만 필요 => JSONRPC-JAVA
  • 웹단 HTML 도 같이 가져오고싶다 => XMLHttpRequest


정도. 뭐가 되었던간에 예전같이 iframe 으로 장난하던 것보다 비할 데 없이 편하고, 보기도 좋다.
Posted by 알 수 없는 사용자
|