Thanks,Evgeny!
Thank for share these code!
I had read them.I used TunnelService replacing custom finder that you
used,'cause I think TunnelService is easy for using.But I'd learned
how to using custom finder to implement same function from them.

On Fri, Feb 15, 2008 at 12:40 AM, Evgeny Shepelyuk <[EMAIL PROTECTED]> wrote:
> cleverpig <greatcleverpig <at> gmail.com> writes:
>
>  >
>
> > I post this draft in wiki.restlet.org--"Using AJAX in
>  > Restlet":http://wiki.restlet.org/docs_1.1/g1/43-restlet/52-restlet.html
>  >
>  > I will start this tutorial with a simply example-"microblog",that's a
>  > text based micro blog for demo how to using AJAX in Restlet.
>  > Demo construction:
>  >     * Web client: call background service via JSON protocol in full
>  > REST way(GET/PUT/POST/DELETE).
>  >     * Server side: uses db4o to work as store service provider,and
>  > expose data in RESTful way.
>  >     * Server handle process: Application dispatch request to
>  > Router,Router find corresponding reource,Resource handle request and
>  > return representation.
>  >
>  > Pls make review and point out drawback.
>
>
>  This is an example of usign prototype without proxying methods via POST.
>
>  1. HTML
>  <html lang="en">
>  <head>
>  <script language="javascript" type="text/javascript" src="./prototype.js"></
>  script>
>  <script type="text/javascript" language="JavaScript">
>  function callJSON() {
>         new Ajax.Request('/ajax', {
>                 parameters: 'name=PUT', method: 'put', putBody: "PUT BODY",
>                 onComplete: function (transport) {
>                         alert(transport.responseText);
>                 }
>         });
>         new Ajax.Request('/ajax', {
>                 parameters: 'name=POST', method: 'post',
>                 onComplete: function (transport) {
>                         alert(transport.responseText);
>                 }
>         });
>         new Ajax.Request('/ajax', {
>                 parameters: 'name=DELETE', method: 'delete',
>                 onComplete: function (transport) {
>                         alert(transport.responseText);
>                 }
>         });
>  }
>  </script>
>  </head>
>
>  <body class="callingcards">
>  <input type="button" onclick="callJSON();" value="PRESSME">
>  </body>
>  </html>
>
>  2. Server starting class
>
>  import org.restlet.data.*;
>  import org.restlet.*;
>
>  public class Server {
>         public static void main(String[] args) throws Exception {
>                 Component component = new Component();
>                 component.getServers().add(Protocol.HTTP, 8182);
>                 component.getClients().add(Protocol.FILE);
>
>                 Application application = new Application(component.getContext
>  ()) {
>                         @Override
>                         public Restlet createRoot() {
>                                 Router router = new Router(getContext());
>                                 router.setFinderClass(PrototypeFinder.class);
>
>                                 router.attach("", new Directory(getContext(),
>  "file:///C:/json-restlet"));
>                                 router.attach("/ajax", AjaxResource.class);
>
>                                 return router;
>                         }
>                 };
>                 component.getDefaultHost().attach("", application);
>                 component.start();
>         }
>  }
>
>  3. Custom Finder
>
>  import org.restlet.Finder;
>  import org.restlet.Context;
>  import org.restlet.Handler;
>  import org.restlet.data.Request;
>  import org.restlet.data.Response;
>  import org.restlet.data.Parameter;
>  import org.restlet.data.Method;
>
>  public class PrototypeFinder extends Finder {
>         public  PrototypeFinder(Context context, Class<? extends Handler>
>  targetClass) {
>                 super(context, targetClass);
>         }
>
>         public void handle(Request request, Response response) {
>                 Parameter p = request.getEntityAsForm().getFirst("_method");
>                 request.setMethod(null != p ? Method.valueOf(p.getValue()) :
>  request.getMethod());
>                 super.handle(request, response);
>         }
>  }
>
>  4. Resource class
>
>  import org.restlet.resource.*;
>  import org.restlet.Context;
>  import org.restlet.ext.json.JsonRepresentation;
>  import org.restlet.data.Request;
>  import org.restlet.data.Response;
>  import org.restlet.data.MediaType;
>  import org.json.JSONObject;
>  import org.json.JSONArray;
>
>  import java.util.Arrays;
>
>  public class AjaxResource  extends Resource {
>
>         public AjaxResource(Context context, Request request, Response
>  response) {
>                 super(context, request, response);
>
>                 getVariants().add(new Variant(MediaType.TEXT_HTML));
>                 getVariants().add(new Variant(MediaType.TEXT_PLAIN));
>         }
>
>         public Representation represent(Variant variant) throws
>  ResourceException {
>                 return new StringRepresentation("some data",
>  MediaType.TEXT_ALL);
>         }
>
>         public void acceptRepresentation(Representation representation) throws
>  ResourceException {
>                 getResponse().setEntity(new StringRepresentation("PLAIN TEXT
>  for POST", MediaType.TEXT_PLAIN));
>         }
>
>         public void removeRepresentations() throws ResourceException {
>                 getResponse().setEntity(new StringRepresentation("PLAIN TEXT
>  for DELETE", MediaType.TEXT_PLAIN));
>         }
>
>         public void storeRepresentation(Representation representation) throws
>  ResourceException {
>                 getResponse().setEntity(new StringRepresentation("PLAIN TEXT
>  for PUT", MediaType.TEXT_PLAIN));
>         }
>
>         public boolean allowPost() {
>                 return true;
>         }
>
>         public boolean allowDelete() {
>                 return true;
>         }
>
>         public boolean allowPut() {
>                 return true;
>         }
>  }
>
>



-- 
cleverpig
Location: Beijing
Address: Room 4018,No.A2 South Avenue Fuxingmen Beijing,P.R.China
Zipcode: 100031
Phone: 010-66415588-1113
MSN: [EMAIL PROTECTED]
QQ: 149291732
Skepe: cleverpigatmatrix
My Facebook ID:cleverpig
My Blog: hihere.sohu.com
My Tags: del.icio.us/cleverpig
My Twitter: twitter.com/cleverpig
My Organization: www.beijing-open-party.org
一些值得关注的唧歪:
 http://jiwai.de/t/jmatrix/
 http://jiwai.de/t/db4o/
 http://jiwai.de/t/matrix-community/

Reply via email to